Switch log_expr to carrying a full expr:u32 for level. Add log_full variant that parses that expr, prepare for snapshot.
This commit is contained in:
parent
66856a39b3
commit
8d9e7deab5
9 changed files with 59 additions and 29 deletions
|
|
@ -247,7 +247,7 @@ tag expr_ {
|
|||
expr_cont;
|
||||
expr_ret(option::t<@expr>);
|
||||
expr_be(@expr);
|
||||
expr_log(int, @expr);
|
||||
expr_log(int, @expr, @expr);
|
||||
|
||||
/* just an assert, no significance to typestate */
|
||||
expr_assert(@expr);
|
||||
|
|
|
|||
|
|
@ -424,7 +424,8 @@ fn noop_fold_expr(e: expr_, fld: ast_fold) -> expr_ {
|
|||
expr_cont. { e }
|
||||
expr_ret(e) { expr_ret(option::map(e, fld.fold_expr)) }
|
||||
expr_be(e) { expr_be(fld.fold_expr(e)) }
|
||||
expr_log(lv, e) { expr_log(lv, fld.fold_expr(e)) }
|
||||
expr_log(i, lv, e) { expr_log(i, fld.fold_expr(lv),
|
||||
fld.fold_expr(e)) }
|
||||
expr_assert(e) { expr_assert(fld.fold_expr(e)) }
|
||||
expr_check(m, e) { expr_check(m, fld.fold_expr(e)) }
|
||||
expr_if_check(cond, tr, fl) {
|
||||
|
|
|
|||
|
|
@ -165,7 +165,8 @@ fn bad_expr_word_table() -> hashmap<str, ()> {
|
|||
"cont", "ret", "be", "fail", "type", "resource", "check",
|
||||
"assert", "claim", "native", "fn", "lambda", "pure",
|
||||
"unsafe", "block", "import", "export", "let", "const",
|
||||
"log", "log_err", "tag", "obj", "copy", "sendfn", "impl"] {
|
||||
"log", "log_err", "log_full",
|
||||
"tag", "obj", "copy", "sendfn", "impl"] {
|
||||
words.insert(word, ());
|
||||
}
|
||||
words
|
||||
|
|
@ -758,6 +759,15 @@ fn is_bar(t: token::token) -> bool {
|
|||
alt t { token::BINOP(token::OR.) | token::OROR. { true } _ { false } }
|
||||
}
|
||||
|
||||
fn mk_lit_u32(p: parser, i: u32) -> @ast::expr {
|
||||
let span = p.get_span();
|
||||
|
||||
let lv_lit = @{node: ast::lit_uint(i as u64, ast::ty_u32),
|
||||
span: span};
|
||||
|
||||
ret @{id: p.get_id(), node: ast::expr_lit(lv_lit), span: span};
|
||||
}
|
||||
|
||||
fn parse_bottom_expr(p: parser) -> @ast::expr {
|
||||
let lo = p.get_lo_pos();
|
||||
let hi = p.get_hi_pos();
|
||||
|
|
@ -899,13 +909,18 @@ fn parse_bottom_expr(p: parser) -> @ast::expr {
|
|||
hi = e.span.hi;
|
||||
ex = ast::expr_fail(some(e));
|
||||
} else { ex = ast::expr_fail(none); }
|
||||
} else if eat_word(p, "log_full") {
|
||||
let e = parse_expr(p);
|
||||
let lvl = parse_expr(p);
|
||||
ex = ast::expr_log(2, lvl, e);
|
||||
hi = e.span.hi;
|
||||
} else if eat_word(p, "log") {
|
||||
let e = parse_expr(p);
|
||||
ex = ast::expr_log(1, e);
|
||||
ex = ast::expr_log(1, mk_lit_u32(p, 1u32), e);
|
||||
hi = e.span.hi;
|
||||
} else if eat_word(p, "log_err") {
|
||||
let e = parse_expr(p);
|
||||
ex = ast::expr_log(0, e);
|
||||
ex = ast::expr_log(0, mk_lit_u32(p, 0u32), e);
|
||||
hi = e.span.hi;
|
||||
} else if eat_word(p, "assert") {
|
||||
let e = parse_expr(p);
|
||||
|
|
|
|||
|
|
@ -913,9 +913,16 @@ fn print_expr(s: ps, &&expr: @ast::expr) {
|
|||
}
|
||||
}
|
||||
ast::expr_be(result) { word_nbsp(s, "be"); print_expr(s, result); }
|
||||
ast::expr_log(lvl, expr) {
|
||||
alt lvl { 1 { word_nbsp(s, "log"); } 0 { word_nbsp(s, "log_err"); } }
|
||||
print_expr(s, expr);
|
||||
ast::expr_log(lvl, lexp, expr) {
|
||||
alt lvl {
|
||||
1 { word_nbsp(s, "log"); print_expr(s, expr); }
|
||||
0 { word_nbsp(s, "log_err"); print_expr(s, expr); }
|
||||
2 {
|
||||
word_nbsp(s, "log_full");
|
||||
word(s.s, " ");
|
||||
print_expr(s, lexp);
|
||||
}
|
||||
}
|
||||
}
|
||||
ast::expr_check(m, expr) {
|
||||
alt m {
|
||||
|
|
@ -990,7 +997,7 @@ fn print_expr_parens_if_not_bot(s: ps, ex: @ast::expr) {
|
|||
ast::expr_ternary(_, _, _) | ast::expr_move(_, _) |
|
||||
ast::expr_copy(_) | ast::expr_assign(_, _) | ast::expr_be(_) |
|
||||
ast::expr_assign_op(_, _, _) | ast::expr_swap(_, _) |
|
||||
ast::expr_log(_, _) | ast::expr_assert(_) |
|
||||
ast::expr_log(_, _, _) | ast::expr_assert(_) |
|
||||
ast::expr_check(_, _) { true }
|
||||
_ { false }
|
||||
};
|
||||
|
|
@ -1305,7 +1312,7 @@ fn need_parens(expr: @ast::expr, outer_prec: int) -> bool {
|
|||
ast::expr_be(_) { true }
|
||||
ast::expr_assert(_) { true }
|
||||
ast::expr_check(_, _) { true }
|
||||
ast::expr_log(_, _) { true }
|
||||
ast::expr_log(_, _, _) { true }
|
||||
_ { false }
|
||||
}
|
||||
}
|
||||
|
|
@ -1644,7 +1651,7 @@ fn ends_in_lit_int(ex: @ast::expr) -> bool {
|
|||
ast::expr_ternary(_, _, sub) | ast::expr_move(_, sub) |
|
||||
ast::expr_copy(sub) | ast::expr_assign(_, sub) | ast::expr_be(sub) |
|
||||
ast::expr_assign_op(_, _, sub) | ast::expr_swap(_, sub) |
|
||||
ast::expr_log(_, sub) | ast::expr_assert(sub) |
|
||||
ast::expr_log(_, _, sub) | ast::expr_assert(sub) |
|
||||
ast::expr_check(_, sub) { ends_in_lit_int(sub) }
|
||||
ast::expr_fail(osub) | ast::expr_ret(osub) {
|
||||
alt osub {
|
||||
|
|
|
|||
|
|
@ -333,7 +333,10 @@ fn visit_expr<E>(ex: @expr, e: E, v: vt<E>) {
|
|||
expr_cont. { }
|
||||
expr_ret(eo) { visit_expr_opt(eo, e, v); }
|
||||
expr_be(x) { v.visit_expr(x, e, v); }
|
||||
expr_log(_, x) { v.visit_expr(x, e, v); }
|
||||
expr_log(_, lv, x) {
|
||||
v.visit_expr(lv, e, v);
|
||||
v.visit_expr(x, e, v);
|
||||
}
|
||||
expr_check(_, x) { v.visit_expr(x, e, v); }
|
||||
expr_assert(x) { v.visit_expr(x, e, v); }
|
||||
expr_anon_obj(anon_obj) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue