Skip to content

Commit 3eb38f9

Browse files
committed
---
yaml --- r: 6906 b: refs/heads/master c: 8d9e7de h: refs/heads/master v: v3
1 parent 4c2acb1 commit 3eb38f9

File tree

10 files changed

+60
-30
lines changed

10 files changed

+60
-30
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 66856a39b38b1ded0200e57c713c39ecf3dcc192
2+
refs/heads/master: 8d9e7deab5fd509160d60c33f2c7fb83acde9366

trunk/src/comp/middle/trans.rs

+14-10
Original file line numberDiff line numberDiff line change
@@ -3622,7 +3622,7 @@ fn trans_expr(bcx: @block_ctxt, e: @ast::expr, dest: dest) -> @block_ctxt {
36223622
assert dest == ignore;
36233623
ret trans_fail_expr(bcx, some(e.span), expr);
36243624
}
3625-
ast::expr_log(lvl, a) {
3625+
ast::expr_log(_, lvl, a) {
36263626
assert dest == ignore;
36273627
ret trans_log(lvl, bcx, a);
36283628
}
@@ -3768,7 +3768,7 @@ fn load_if_immediate(cx: @block_ctxt, v: ValueRef, t: ty::t) -> ValueRef {
37683768
ret v;
37693769
}
37703770

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 {
37723772
let ccx = bcx_ccx(cx);
37733773
let lcx = cx.fcx.lcx;
37743774
let modname = str::connect(lcx.module_path, "::");
@@ -3778,20 +3778,26 @@ fn trans_log(lvl: int, cx: @block_ctxt, e: @ast::expr) -> @block_ctxt {
37783778
let s = link::mangle_internal_name_by_path_and_seq(
37793779
lcx.ccx, lcx.module_path, "loglevel");
37803780
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)
37823782
});
37833783
llvm::LLVMSetGlobalConstant(global, False);
3784-
llvm::LLVMSetInitializer(global, C_null(ccx.int_type));
3784+
llvm::LLVMSetInitializer(global, C_null(T_i32()));
37853785
llvm::LLVMSetLinkage(global,
37863786
lib::llvm::LLVMInternalLinkage as llvm::Linkage);
37873787
lcx.ccx.module_data.insert(modname, global);
37883788
global
37893789
};
3790+
let level_cx = new_scope_block_ctxt(cx, "level");
37903791
let log_cx = new_scope_block_ctxt(cx, "log");
37913792
let after_cx = new_sub_block_ctxt(cx, "after");
37923793
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);
37953801
let sub = trans_temp_expr(log_cx, e);
37963802
let e_ty = ty::expr_ty(bcx_tcx(cx), e);
37973803
let log_bcx = sub.bcx;
@@ -3807,14 +3813,12 @@ fn trans_log(lvl: int, cx: @block_ctxt, e: @ast::expr) -> @block_ctxt {
38073813
let llvalptr = r.val;
38083814
let llval_i8 = PointerCast(log_bcx, llvalptr, T_ptr(T_i8()));
38093815

3810-
// FIXME lvl should not be int, but actually u32,
3811-
// and the upcall should take a u32, not an i32
38123816
Call(log_bcx, ccx.upcalls.log_type,
3813-
[lltydesc, llval_i8, C_i32(lvl as i32)]);
3817+
[lltydesc, llval_i8, level_res.val]);
38143818

38153819
log_bcx = trans_block_cleanups(log_bcx, log_cx);
38163820
Br(log_bcx, after_cx.llbb);
3817-
ret after_cx;
3821+
ret trans_block_cleanups(after_cx, level_cx);
38183822
}
38193823

38203824
fn trans_check_expr(cx: @block_ctxt, e: @ast::expr, s: str) -> @block_ctxt {

trunk/src/comp/middle/tstate/pre_post_conditions.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -344,9 +344,8 @@ fn find_pre_post_expr(fcx: fn_ctxt, e: @expr) {
344344
clear_pp(rslt);
345345
handle_var(fcx, rslt, e.id, path_to_ident(fcx.ccx.tcx, p));
346346
}
347-
expr_log(_, arg) {
348-
find_pre_post_expr(fcx, arg);
349-
copy_pre_post(fcx.ccx, e.id, arg);
347+
expr_log(_, lvl, arg) {
348+
find_pre_post_exprs(fcx, [lvl, arg], e.id);
350349
}
351350
expr_fn(f, cap_clause) {
352351
find_pre_post_expr_fn_upvars(fcx, e);

trunk/src/comp/middle/tstate/states.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -366,8 +366,8 @@ fn find_pre_post_state_expr(fcx: fn_ctxt, pres: prestate, e: @expr) -> bool {
366366
return_val);
367367
}
368368
expr_path(_) { ret pure_exp(fcx.ccx, e.id, pres); }
369-
expr_log(_, ex) {
370-
ret find_pre_post_state_sub(fcx, pres, ex, e.id, none);
369+
expr_log(_, lvl, ex) {
370+
ret find_pre_post_state_two(fcx, pres, lvl, ex, e.id, oper_pure);
371371
}
372372
expr_mac(_) { fcx.ccx.tcx.sess.bug("unexpanded macro"); }
373373
expr_lit(l) { ret pure_exp(fcx.ccx, e.id, pres); }

trunk/src/comp/middle/typeck.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1868,8 +1868,9 @@ fn check_expr_with_unifier(fcx: @fn_ctxt, expr: @ast::expr, unify: unifier,
18681868
bot = true;
18691869
write::nil_ty(tcx, id);
18701870
}
1871-
ast::expr_log(l, e) {
1872-
bot = check_expr(fcx, e);
1871+
ast::expr_log(_, lv, e) {
1872+
bot = check_expr_with(fcx, lv, ty::mk_mach_uint(tcx, ast::ty_u32));
1873+
bot |= check_expr(fcx, e);
18731874
write::nil_ty(tcx, id);
18741875
}
18751876
ast::expr_check(_, e) {

trunk/src/comp/syntax/ast.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ tag expr_ {
247247
expr_cont;
248248
expr_ret(option::t<@expr>);
249249
expr_be(@expr);
250-
expr_log(int, @expr);
250+
expr_log(int, @expr, @expr);
251251

252252
/* just an assert, no significance to typestate */
253253
expr_assert(@expr);

trunk/src/comp/syntax/fold.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,8 @@ fn noop_fold_expr(e: expr_, fld: ast_fold) -> expr_ {
424424
expr_cont. { e }
425425
expr_ret(e) { expr_ret(option::map(e, fld.fold_expr)) }
426426
expr_be(e) { expr_be(fld.fold_expr(e)) }
427-
expr_log(lv, e) { expr_log(lv, fld.fold_expr(e)) }
427+
expr_log(i, lv, e) { expr_log(i, fld.fold_expr(lv),
428+
fld.fold_expr(e)) }
428429
expr_assert(e) { expr_assert(fld.fold_expr(e)) }
429430
expr_check(m, e) { expr_check(m, fld.fold_expr(e)) }
430431
expr_if_check(cond, tr, fl) {

trunk/src/comp/syntax/parse/parser.rs

+18-3
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ fn bad_expr_word_table() -> hashmap<str, ()> {
165165
"cont", "ret", "be", "fail", "type", "resource", "check",
166166
"assert", "claim", "native", "fn", "lambda", "pure",
167167
"unsafe", "block", "import", "export", "let", "const",
168-
"log", "log_err", "tag", "obj", "copy", "sendfn", "impl"] {
168+
"log", "log_err", "log_full",
169+
"tag", "obj", "copy", "sendfn", "impl"] {
169170
words.insert(word, ());
170171
}
171172
words
@@ -758,6 +759,15 @@ fn is_bar(t: token::token) -> bool {
758759
alt t { token::BINOP(token::OR.) | token::OROR. { true } _ { false } }
759760
}
760761

762+
fn mk_lit_u32(p: parser, i: u32) -> @ast::expr {
763+
let span = p.get_span();
764+
765+
let lv_lit = @{node: ast::lit_uint(i as u64, ast::ty_u32),
766+
span: span};
767+
768+
ret @{id: p.get_id(), node: ast::expr_lit(lv_lit), span: span};
769+
}
770+
761771
fn parse_bottom_expr(p: parser) -> @ast::expr {
762772
let lo = p.get_lo_pos();
763773
let hi = p.get_hi_pos();
@@ -899,13 +909,18 @@ fn parse_bottom_expr(p: parser) -> @ast::expr {
899909
hi = e.span.hi;
900910
ex = ast::expr_fail(some(e));
901911
} else { ex = ast::expr_fail(none); }
912+
} else if eat_word(p, "log_full") {
913+
let e = parse_expr(p);
914+
let lvl = parse_expr(p);
915+
ex = ast::expr_log(2, lvl, e);
916+
hi = e.span.hi;
902917
} else if eat_word(p, "log") {
903918
let e = parse_expr(p);
904-
ex = ast::expr_log(1, e);
919+
ex = ast::expr_log(1, mk_lit_u32(p, 1u32), e);
905920
hi = e.span.hi;
906921
} else if eat_word(p, "log_err") {
907922
let e = parse_expr(p);
908-
ex = ast::expr_log(0, e);
923+
ex = ast::expr_log(0, mk_lit_u32(p, 0u32), e);
909924
hi = e.span.hi;
910925
} else if eat_word(p, "assert") {
911926
let e = parse_expr(p);

trunk/src/comp/syntax/print/pprust.rs

+13-6
Original file line numberDiff line numberDiff line change
@@ -913,9 +913,16 @@ fn print_expr(s: ps, &&expr: @ast::expr) {
913913
}
914914
}
915915
ast::expr_be(result) { word_nbsp(s, "be"); print_expr(s, result); }
916-
ast::expr_log(lvl, expr) {
917-
alt lvl { 1 { word_nbsp(s, "log"); } 0 { word_nbsp(s, "log_err"); } }
918-
print_expr(s, expr);
916+
ast::expr_log(lvl, lexp, expr) {
917+
alt lvl {
918+
1 { word_nbsp(s, "log"); print_expr(s, expr); }
919+
0 { word_nbsp(s, "log_err"); print_expr(s, expr); }
920+
2 {
921+
word_nbsp(s, "log_full");
922+
word(s.s, " ");
923+
print_expr(s, lexp);
924+
}
925+
}
919926
}
920927
ast::expr_check(m, expr) {
921928
alt m {
@@ -990,7 +997,7 @@ fn print_expr_parens_if_not_bot(s: ps, ex: @ast::expr) {
990997
ast::expr_ternary(_, _, _) | ast::expr_move(_, _) |
991998
ast::expr_copy(_) | ast::expr_assign(_, _) | ast::expr_be(_) |
992999
ast::expr_assign_op(_, _, _) | ast::expr_swap(_, _) |
993-
ast::expr_log(_, _) | ast::expr_assert(_) |
1000+
ast::expr_log(_, _, _) | ast::expr_assert(_) |
9941001
ast::expr_check(_, _) { true }
9951002
_ { false }
9961003
};
@@ -1305,7 +1312,7 @@ fn need_parens(expr: @ast::expr, outer_prec: int) -> bool {
13051312
ast::expr_be(_) { true }
13061313
ast::expr_assert(_) { true }
13071314
ast::expr_check(_, _) { true }
1308-
ast::expr_log(_, _) { true }
1315+
ast::expr_log(_, _, _) { true }
13091316
_ { false }
13101317
}
13111318
}
@@ -1644,7 +1651,7 @@ fn ends_in_lit_int(ex: @ast::expr) -> bool {
16441651
ast::expr_ternary(_, _, sub) | ast::expr_move(_, sub) |
16451652
ast::expr_copy(sub) | ast::expr_assign(_, sub) | ast::expr_be(sub) |
16461653
ast::expr_assign_op(_, _, sub) | ast::expr_swap(_, sub) |
1647-
ast::expr_log(_, sub) | ast::expr_assert(sub) |
1654+
ast::expr_log(_, _, sub) | ast::expr_assert(sub) |
16481655
ast::expr_check(_, sub) { ends_in_lit_int(sub) }
16491656
ast::expr_fail(osub) | ast::expr_ret(osub) {
16501657
alt osub {

trunk/src/comp/syntax/visit.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,10 @@ fn visit_expr<E>(ex: @expr, e: E, v: vt<E>) {
333333
expr_cont. { }
334334
expr_ret(eo) { visit_expr_opt(eo, e, v); }
335335
expr_be(x) { v.visit_expr(x, e, v); }
336-
expr_log(_, x) { v.visit_expr(x, e, v); }
336+
expr_log(_, lv, x) {
337+
v.visit_expr(lv, e, v);
338+
v.visit_expr(x, e, v);
339+
}
337340
expr_check(_, x) { v.visit_expr(x, e, v); }
338341
expr_assert(x) { v.visit_expr(x, e, v); }
339342
expr_anon_obj(anon_obj) {

0 commit comments

Comments
 (0)