aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-09-14 11:44:25 -0700
committerGraydon Hoare <[email protected]>2010-09-14 11:44:25 -0700
commit6cfeac162d4562b07a540af0959cc1d39c882f6d (patch)
tree99e23a8c161a9b4799120c6ea38d73ea7df96914
parentXFAIL const test on LLVM, of course. (diff)
downloadrust-6cfeac162d4562b07a540af0959cc1d39c882f6d.tar.xz
rust-6cfeac162d4562b07a540af0959cc1d39c882f6d.zip
Translate const uses via runtime expression evaluation.
-rw-r--r--src/boot/me/trans.ml22
-rw-r--r--src/test/run-pass/const.rs1
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