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 ++++++++++++++++------ src/test/run-pass/const.rs | 1 + 2 files changed, 17 insertions(+), 6 deletions(-) (limited to 'src') 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) diff --git a/src/test/run-pass/const.rs b/src/test/run-pass/const.rs index 36ffb994..ec7b9342 100644 --- a/src/test/run-pass/const.rs +++ b/src/test/run-pass/const.rs @@ -1,4 +1,5 @@ const int i = 10; fn main() { + log i; } \ No newline at end of file -- cgit v1.2.3