diff options
| author | Graydon Hoare <[email protected]> | 2010-10-04 17:25:52 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-10-04 17:25:52 -0700 |
| commit | 19d0fa107aeb79e7d2e1e4222fad4be8addf679d (patch) | |
| tree | 6fee0ba2f8b477af142a2ca5a0d228e29ef56573 /src/comp/front/parser.rs | |
| parent | Teach rustc about phi nodes, block relationships. Translate if- and block-exp... (diff) | |
| download | rust-19d0fa107aeb79e7d2e1e4222fad4be8addf679d.tar.xz rust-19d0fa107aeb79e7d2e1e4222fad4be8addf679d.zip | |
Improve name nodes to ast, teach to parse qualified names, put out flaming tinderbox.
Diffstat (limited to 'src/comp/front/parser.rs')
| -rw-r--r-- | src/comp/front/parser.rs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index 12a1f072..c939764b 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -153,7 +153,24 @@ io fn parse_lit(parser p) -> @ast.lit { fail; } +io fn parse_name(parser p, ast.ident id) -> ast.name { + p.bump(); + let vec[ast.ty] tys = vec(); + + alt (p.peek()) { + case (token.LBRACKET) { + auto pf = parse_ty; + tys = parse_seq[ast.ty](token.LBRACKET, + token.RBRACKET, + some(token.COMMA), + pf, p); + } + case (_) { + } + } + ret rec(ident=id, types=tys); +} io fn parse_bottom_expr(parser p) -> @ast.expr { alt (p.peek()) { @@ -203,8 +220,7 @@ io fn parse_bottom_expr(parser p) -> @ast.expr { } case (token.IDENT(?i)) { - p.bump(); - ret @ast.expr_ident(i); + ret @ast.expr_name(parse_name(p, i), none[ast.referent]); } case (_) { |