summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-26 15:24:09 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-26 15:24:09 +0800
commitc7b6302d5ced1544ce70b054a76efe9da785937e (patch)
tree0a6645b8f6619ba5bb3cb07e567dec9d1f2e9136
parentec3b77077bd2ea364f4c2bea6b5b19d5b5f67648 (diff)
downloadmrust-c7b6302d5ced1544ce70b054a76efe9da785937e.tar.gz
Const Eval - Evaluate enum values
-rw-r--r--src/hir_conv/constant_evaluation.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/hir_conv/constant_evaluation.cpp b/src/hir_conv/constant_evaluation.cpp
index 3ed54209..7973a77d 100644
--- a/src/hir_conv/constant_evaluation.cpp
+++ b/src/hir_conv/constant_evaluation.cpp
@@ -624,6 +624,18 @@ namespace {
item.m_value_res = evaluate_constant(m_crate, m_new_values, *m_mod_path, FMT(p.get_name() << "$"), *item.m_value);
DEBUG("static: " << item.m_type << " = " << item.m_value_res);
}
+ void visit_enum(::HIR::ItemPath p, ::HIR::Enum& item) override {
+ for(auto& var : item.m_variants)
+ {
+ TU_IFLET(::HIR::Enum::Variant, var.second, Value, e,
+
+ e.val = evaluate_constant(m_crate, m_new_values, *m_mod_path, FMT(p.get_name() << "$" << var.first << "$"), *e.expr);
+ DEBUG("enum variant: " << p << "::" << var.first << " = " << e.val);
+ )
+ }
+ ::HIR::Visitor::visit_enum(p, item);
+ }
+
void visit_expr(::HIR::ExprPtr& expr) override
{
struct Visitor: