@@ -3622,7 +3622,7 @@ fn trans_expr(bcx: @block_ctxt, e: @ast::expr, dest: dest) -> @block_ctxt {
3622
3622
assert dest == ignore;
3623
3623
ret trans_fail_expr ( bcx, some ( e. span ) , expr) ;
3624
3624
}
3625
- ast:: expr_log ( lvl, a) {
3625
+ ast:: expr_log ( _ , lvl, a) {
3626
3626
assert dest == ignore;
3627
3627
ret trans_log( lvl, bcx, a) ;
3628
3628
}
@@ -3768,7 +3768,7 @@ fn load_if_immediate(cx: @block_ctxt, v: ValueRef, t: ty::t) -> ValueRef {
3768
3768
ret v;
3769
3769
}
3770
3770
3771
- fn trans_log ( lvl : int , cx : @block_ctxt , e : @ast:: expr ) -> @block_ctxt {
3771
+ fn trans_log ( lvl : @ast :: expr , cx : @block_ctxt , e : @ast:: expr ) -> @block_ctxt {
3772
3772
let ccx = bcx_ccx ( cx) ;
3773
3773
let lcx = cx. fcx . lcx ;
3774
3774
let modname = str:: connect ( lcx. module_path , "::" ) ;
@@ -3778,20 +3778,26 @@ fn trans_log(lvl: int, cx: @block_ctxt, e: @ast::expr) -> @block_ctxt {
3778
3778
let s = link:: mangle_internal_name_by_path_and_seq (
3779
3779
lcx. ccx , lcx. module_path , "loglevel" ) ;
3780
3780
let global = str:: as_buf ( s, { |buf|
3781
- llvm:: LLVMAddGlobal ( lcx. ccx . llmod , ccx . int_type , buf)
3781
+ llvm:: LLVMAddGlobal ( lcx. ccx . llmod , T_i32 ( ) , buf)
3782
3782
} ) ;
3783
3783
llvm:: LLVMSetGlobalConstant ( global, False ) ;
3784
- llvm:: LLVMSetInitializer ( global, C_null ( ccx . int_type ) ) ;
3784
+ llvm:: LLVMSetInitializer ( global, C_null ( T_i32 ( ) ) ) ;
3785
3785
llvm:: LLVMSetLinkage ( global,
3786
3786
lib:: llvm:: LLVMInternalLinkage as llvm:: Linkage ) ;
3787
3787
lcx. ccx . module_data . insert ( modname, global) ;
3788
3788
global
3789
3789
} ;
3790
+ let level_cx = new_scope_block_ctxt ( cx, "level" ) ;
3790
3791
let log_cx = new_scope_block_ctxt ( cx, "log" ) ;
3791
3792
let after_cx = new_sub_block_ctxt ( cx, "after" ) ;
3792
3793
let load = Load ( cx, global) ;
3793
- let test = ICmp ( cx, lib:: llvm:: LLVMIntSGE , load, C_int ( ccx, lvl) ) ;
3794
- CondBr ( cx, test, log_cx. llbb , after_cx. llbb ) ;
3794
+
3795
+ Br ( cx, level_cx. llbb ) ;
3796
+ let level_res = trans_temp_expr ( level_cx, lvl) ;
3797
+ let test = ICmp ( level_res. bcx , lib:: llvm:: LLVMIntUGE ,
3798
+ load, level_res. val ) ;
3799
+
3800
+ CondBr ( level_res. bcx , test, log_cx. llbb , after_cx. llbb ) ;
3795
3801
let sub = trans_temp_expr ( log_cx, e) ;
3796
3802
let e_ty = ty:: expr_ty ( bcx_tcx ( cx) , e) ;
3797
3803
let log_bcx = sub. bcx ;
@@ -3807,14 +3813,12 @@ fn trans_log(lvl: int, cx: @block_ctxt, e: @ast::expr) -> @block_ctxt {
3807
3813
let llvalptr = r. val ;
3808
3814
let llval_i8 = PointerCast ( log_bcx, llvalptr, T_ptr ( T_i8 ( ) ) ) ;
3809
3815
3810
- // FIXME lvl should not be int, but actually u32,
3811
- // and the upcall should take a u32, not an i32
3812
3816
Call ( log_bcx, ccx. upcalls . log_type ,
3813
- [ lltydesc, llval_i8, C_i32 ( lvl as i32 ) ] ) ;
3817
+ [ lltydesc, llval_i8, level_res . val ] ) ;
3814
3818
3815
3819
log_bcx = trans_block_cleanups ( log_bcx, log_cx) ;
3816
3820
Br ( log_bcx, after_cx. llbb ) ;
3817
- ret after_cx;
3821
+ ret trans_block_cleanups ( after_cx, level_cx ) ;
3818
3822
}
3819
3823
3820
3824
fn trans_check_expr ( cx : @block_ctxt , e : @ast:: expr , s : str ) -> @block_ctxt {
0 commit comments