From c7b6302d5ced1544ce70b054a76efe9da785937e Mon Sep 17 00:00:00 2001 From: John Hodge Date: Fri, 26 Aug 2016 15:24:09 +0800 Subject: Const Eval - Evaluate enum values --- src/hir_conv/constant_evaluation.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') 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: -- cgit v1.2.3