From 6cfeac162d4562b07a540af0959cc1d39c882f6d Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Tue, 14 Sep 2010 11:44:25 -0700 Subject: Translate const uses via runtime expression evaluation. --- src/boot/me/trans.ml | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src/boot') diff --git a/src/boot/me/trans.ml b/src/boot/me/trans.ml index dd1dd46d..9831cc9c 100644 --- a/src/boot/me/trans.ml +++ b/src/boot/me/trans.ml @@ -1006,6 +1006,21 @@ let trans_visitor trans_cond_fail "bounds check" jmp; based elt_reg + and trans_lval_item + (lv:Ast.lval) + : (Il.cell * Ast.ty) = + assert (lval_base_is_item cx lv); + let ty = lval_ty cx lv in + let item = lval_item cx lv in + check_concrete item.node.Ast.decl_params (); + match item.node.Ast.decl_item with + Ast.MOD_ITEM_const (_, Some e) -> + (Il.Reg (force_to_reg (trans_expr e)), ty) + | _ -> + bug () + "trans_lval_full called on unsupported item lval '%a'" + Ast.sprintf_lval lv + and trans_lval_full (initializing:bool) (lv:Ast.lval) @@ -1062,12 +1077,7 @@ let trans_visitor else if initializing then err None "init item" - else - begin - assert (lval_base_is_item cx lv); - bug () - "trans_lval_full called on item lval '%a'" Ast.sprintf_lval lv - end + else trans_lval_item lv and trans_lval_maybe_init (initializing:bool) -- cgit v1.2.3