diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-26 15:24:09 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-26 15:24:09 +0800 |
commit | c7b6302d5ced1544ce70b054a76efe9da785937e (patch) | |
tree | 0a6645b8f6619ba5bb3cb07e567dec9d1f2e9136 | |
parent | ec3b77077bd2ea364f4c2bea6b5b19d5b5f67648 (diff) | |
download | mrust-c7b6302d5ced1544ce70b054a76efe9da785937e.tar.gz |
Const Eval - Evaluate enum values
-rw-r--r-- | src/hir_conv/constant_evaluation.cpp | 12 |
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: |