diff options
| author | Graydon Hoare <graydon@mozilla.com> | 2011-12-21 14:31:31 -0800 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2011-12-21 14:31:31 -0800 |
| commit | 8d9e7deab5fd509160d60c33f2c7fb83acde9366 (patch) | |
| tree | f4c2c91b66c07c90ab3d855d3f4cc687cd63eb98 /src/comp/syntax/parse/parser.rs | |
| parent | 66856a39b38b1ded0200e57c713c39ecf3dcc192 (diff) | |
| download | rust-8d9e7deab5fd509160d60c33f2c7fb83acde9366.tar.gz rust-8d9e7deab5fd509160d60c33f2c7fb83acde9366.zip | |
Switch log_expr to carrying a full expr:u32 for level. Add log_full variant that parses that expr, prepare for snapshot.
Diffstat (limited to 'src/comp/syntax/parse/parser.rs')
| -rw-r--r-- | src/comp/syntax/parse/parser.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs index 0a436a521c9..0b19ec47918 100644 --- a/src/comp/syntax/parse/parser.rs +++ b/src/comp/syntax/parse/parser.rs @@ -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); |
