diff options
| author | Graydon Hoare <[email protected]> | 2010-09-14 11:44:25 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-09-14 11:44:25 -0700 |
| commit | 6cfeac162d4562b07a540af0959cc1d39c882f6d (patch) | |
| tree | 99e23a8c161a9b4799120c6ea38d73ea7df96914 | |
| parent | XFAIL const test on LLVM, of course. (diff) | |
| download | rust-6cfeac162d4562b07a540af0959cc1d39c882f6d.tar.xz rust-6cfeac162d4562b07a540af0959cc1d39c882f6d.zip | |
Translate const uses via runtime expression evaluation.
| -rw-r--r-- | src/boot/me/trans.ml | 22 | ||||
| -rw-r--r-- | src/test/run-pass/const.rs | 1 |
2 files changed, 17 insertions, 6 deletions
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 |