Skip to content

Commit ac1d934

Browse files
committed
---
yaml --- r: 921 b: refs/heads/master c: 3352fab h: refs/heads/master i: 919: 00c0479 v: v3
1 parent b0ddd07 commit ac1d934

File tree

3 files changed

+80
-7
lines changed

3 files changed

+80
-7
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 44a0c7225d5aa13769c4531b25fd524976c7f7a0
2+
refs/heads/master: 3352fab59ba39194b2efd7e478aa1fbbfe0de8d1

trunk/src/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,8 @@ TEST_XFAILS_LLVM := $(TASK_XFAILS) \
517517

518518
TEST_XFAILS_SELF := $(filter-out \
519519
$(addprefix test/run-pass/, \
520+
arith-0.rs \
521+
arith-2.rs \
520522
bool-not.rs \
521523
char.rs \
522524
fact.rs \

trunk/src/comp/front/parser.rs

Lines changed: 77 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,10 @@ impure fn parse_ty_fn(parser p) -> ast.ty_ {
146146

147147
ret ast.ty_fn(inputs.node, output);
148148
}
149-
149+
150150
impure fn parse_ty(parser p) -> @ast.ty {
151151
auto lo = p.get_span();
152+
auto hi = lo;
152153
let ast.ty_ t;
153154
alt (p.peek()) {
154155
case (token.INT) { p.bump(); t = ast.ty_int; }
@@ -157,12 +158,29 @@ impure fn parse_ty(parser p) -> @ast.ty {
157158
case (token.CHAR) { p.bump(); t = ast.ty_char; }
158159
case (token.MACH(?tm)) { p.bump(); t = ast.ty_machine(tm); }
159160

161+
case (token.LPAREN) {
162+
p.bump();
163+
alt (p.peek()) {
164+
case (token.RPAREN) {
165+
hi = p.get_span();
166+
p.bump();
167+
t = ast.ty_nil;
168+
}
169+
case (_) {
170+
t = parse_ty(p).node;
171+
hi = p.get_span();
172+
expect(p, token.RPAREN);
173+
}
174+
}
175+
}
176+
160177
case (token.AT) { p.bump(); t = ast.ty_box(parse_ty(p)); }
161178

162179
case (token.VEC) {
163180
p.bump();
164181
expect(p, token.LBRACKET);
165182
t = ast.ty_vec(parse_ty(p));
183+
hi = p.get_span();
166184
expect(p, token.RBRACKET);
167185
}
168186

@@ -171,11 +189,39 @@ impure fn parse_ty(parser p) -> @ast.ty {
171189
auto f = parse_possibly_mutable_ty; // FIXME: trans_const_lval bug
172190
auto elems = parse_seq[tup(bool, @ast.ty)](token.LPAREN,
173191
token.RPAREN, some(token.COMMA), f, p);
192+
hi = p.get_span();
174193
t = ast.ty_tup(elems.node);
175194
}
176195

177196
case (token.FN) {
178197
t = parse_ty_fn(p);
198+
alt (t) {
199+
case (ast.ty_fn(_, ?out)) {
200+
hi = out.span;
201+
}
202+
}
203+
}
204+
205+
case (token.IDENT(_)) {
206+
let ast.path pth = vec();
207+
let bool more = true;
208+
while (more) {
209+
alt (p.peek()) {
210+
case (token.IDENT(?i)) {
211+
auto n = parse_name(p, i);
212+
hi = n.span;
213+
if (p.peek() == token.DOT) {
214+
p.bump();
215+
} else {
216+
more = false;
217+
}
218+
}
219+
case (_) {
220+
more = false;
221+
}
222+
}
223+
}
224+
t = ast.ty_path(pth, none[ast.def]);
179225
}
180226

181227
case (_) {
@@ -184,7 +230,7 @@ impure fn parse_ty(parser p) -> @ast.ty {
184230
fail;
185231
}
186232
}
187-
ret @spanned(lo, lo, t);
233+
ret @spanned(lo, hi, t);
188234
}
189235

190236
impure fn parse_arg(parser p) -> ast.arg {
@@ -328,6 +374,15 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
328374

329375
case (token.LPAREN) {
330376
p.bump();
377+
alt (p.peek()) {
378+
case (token.RPAREN) {
379+
hi = p.get_span();
380+
p.bump();
381+
auto lit = @spanned(lo, hi, ast.lit_nil);
382+
ret @spanned(lo, hi,
383+
ast.expr_lit(lit, ast.ann_none));
384+
}
385+
}
331386
auto e = parse_expr(p);
332387
hi = p.get_span();
333388
expect(p, token.RPAREN);
@@ -409,6 +464,7 @@ impure fn parse_path_expr(parser p) -> @ast.expr {
409464
}
410465

411466
case (token.LPAREN) {
467+
p.bump();
412468
auto ix = parse_bottom_expr(p);
413469
hi = ix.span;
414470
auto e_ = ast.expr_index(e, ix, ast.ann_none);
@@ -889,7 +945,7 @@ impure fn parse_block(parser p) -> ast.block {
889945
ret spanned(stmts.span, stmts.span, b);
890946
}
891947

892-
impure fn parse_fn(parser p) -> tup(ast.ident, @ast.item) {
948+
impure fn parse_item_fn(parser p) -> tup(ast.ident, @ast.item) {
893949
auto lo = p.get_span();
894950
expect(p, token.FN);
895951
auto id = parse_ident(p);
@@ -934,7 +990,7 @@ impure fn parse_mod_items(parser p, token.token term) -> ast._mod {
934990
ret rec(items=items, index=index);
935991
}
936992

937-
impure fn parse_mod(parser p) -> tup(ast.ident, @ast.item) {
993+
impure fn parse_item_mod(parser p) -> tup(ast.ident, @ast.item) {
938994
auto lo = p.get_span();
939995
expect(p, token.MOD);
940996
auto id = parse_ident(p);
@@ -946,13 +1002,28 @@ impure fn parse_mod(parser p) -> tup(ast.ident, @ast.item) {
9461002
ret tup(id, @spanned(lo, hi, item));
9471003
}
9481004

1005+
impure fn parse_item_type(parser p) -> tup(ast.ident, @ast.item) {
1006+
auto lo = p.get_span();
1007+
expect(p, token.TYPE);
1008+
auto id = parse_ident(p);
1009+
expect(p, token.EQ);
1010+
auto ty = parse_ty(p);
1011+
auto hi = p.get_span();
1012+
expect(p, token.SEMI);
1013+
auto item = ast.item_ty(id, ty, p.next_def_id(), ast.ann_none);
1014+
ret tup(id, @spanned(lo, hi, item));
1015+
}
1016+
9491017
impure fn parse_item(parser p) -> tup(ast.ident, @ast.item) {
9501018
alt (p.peek()) {
9511019
case (token.FN) {
952-
ret parse_fn(p);
1020+
ret parse_item_fn(p);
9531021
}
9541022
case (token.MOD) {
955-
ret parse_mod(p);
1023+
ret parse_item_mod(p);
1024+
}
1025+
case (token.TYPE) {
1026+
ret parse_item_type(p);
9561027
}
9571028
}
9581029
p.err("expectied item");

0 commit comments

Comments
 (0)