Skip to content

Commit 0ae3013

Browse files
committed
---
yaml --- r: 875 b: refs/heads/master c: a3d666b h: refs/heads/master i: 873: 62508d3 871: a13ca83 v: v3
1 parent 3e90806 commit 0ae3013

File tree

5 files changed

+95
-90
lines changed

5 files changed

+95
-90
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: c0382617621b9728aa7e87b4b80928e33c4f338b
2+
refs/heads/master: a3d666bfdf3ef87a91eace7b533e433945b06d76

trunk/src/comp/front/ast.rs

+22-16
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ type crate_num = int;
1515
type def_num = int;
1616
type def_id = tup(crate_num, def_num);
1717

18+
// Annotations added during successive passes.
19+
tag ann {
20+
ann_none;
21+
ann_type(@ty);
22+
}
23+
1824
tag def {
1925
def_fn(def_id);
2026
def_mod(def_id);
@@ -85,22 +91,22 @@ tag decl_ {
8591

8692
type expr = spanned[expr_];
8793
tag expr_ {
88-
expr_vec(vec[@expr], option[@ty]);
89-
expr_tup(vec[tup(bool /* mutability */, @expr)], option[@ty]);
90-
expr_rec(vec[tup(ident,@expr)], option[@ty]);
91-
expr_call(@expr, vec[@expr], option[@ty]);
92-
expr_binary(binop, @expr, @expr, option[@ty]);
93-
expr_unary(unop, @expr, option[@ty]);
94-
expr_lit(@lit, option[@ty]);
95-
expr_cast(@expr, @ty);
96-
expr_if(@expr, block, option[block], option[@ty]);
97-
expr_while(@expr, block, option[@ty]);
98-
expr_do_while(block, @expr, option[@ty]);
99-
expr_block(block, option[@ty]);
100-
expr_assign(@expr /* TODO: @expr|is_lval */, @expr, option[@ty]);
101-
expr_field(@expr, ident, option[@ty]);
102-
expr_index(@expr, @expr, option[@ty]);
103-
expr_name(name, option[def], option[@ty]);
94+
expr_vec(vec[@expr], ann);
95+
expr_tup(vec[tup(bool /* mutability */, @expr)], ann);
96+
expr_rec(vec[tup(ident,@expr)], ann);
97+
expr_call(@expr, vec[@expr], ann);
98+
expr_binary(binop, @expr, @expr, ann);
99+
expr_unary(unop, @expr, ann);
100+
expr_lit(@lit, ann);
101+
expr_cast(@expr, @ty, ann);
102+
expr_if(@expr, block, option[block], ann);
103+
expr_while(@expr, block, ann);
104+
expr_do_while(block, @expr, ann);
105+
expr_block(block, ann);
106+
expr_assign(@expr /* TODO: @expr|is_lval */, @expr, ann);
107+
expr_field(@expr, ident, ann);
108+
expr_index(@expr, @expr, ann);
109+
expr_name(name, option[def], ann);
104110
}
105111

106112
type lit = spanned[lit_];

trunk/src/comp/front/parser.rs

+23-23
Original file line numberDiff line numberDiff line change
@@ -260,14 +260,14 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
260260
// FIXME: can only remove this sort of thing when both typestate and
261261
// alt-exhaustive-match checking are co-operating.
262262
auto lit = @spanned(lo, lo, ast.lit_nil);
263-
let ast.expr_ ex = ast.expr_lit(lit, none[@ast.ty]);
263+
let ast.expr_ ex = ast.expr_lit(lit, ast.ann_none);
264264

265265
alt (p.peek()) {
266266

267267
case (token.IDENT(?i)) {
268268
auto n = parse_name(p, i);
269269
hi = n.span;
270-
ex = ast.expr_name(n, none[ast.def], none[@ast.ty]);
270+
ex = ast.expr_name(n, none[ast.def], ast.ann_none);
271271
alt (p.peek()) {
272272
case (token.LPAREN) {
273273
// Call expr.
@@ -277,7 +277,7 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
277277
some(token.COMMA),
278278
pf, p);
279279
ex = ast.expr_call(@spanned(lo, hi, ex),
280-
es.node, none[@ast.ty]);
280+
es.node, ast.ann_none);
281281
hi = es.span;
282282
}
283283
}
@@ -299,7 +299,7 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
299299
some(token.COMMA),
300300
pf, p);
301301
hi = es.span;
302-
ex = ast.expr_tup(es.node, none[@ast.ty]);
302+
ex = ast.expr_tup(es.node, ast.ann_none);
303303
}
304304

305305
case (token.VEC) {
@@ -310,7 +310,7 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
310310
some(token.COMMA),
311311
pf, p);
312312
hi = es.span;
313-
ex = ast.expr_vec(es.node, none[@ast.ty]);
313+
ex = ast.expr_vec(es.node, ast.ann_none);
314314
}
315315

316316
case (token.REC) {
@@ -329,14 +329,14 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
329329
some(token.COMMA),
330330
pf, p);
331331
hi = es.span;
332-
ex = ast.expr_rec(es.node, none[@ast.ty]);
332+
ex = ast.expr_rec(es.node, ast.ann_none);
333333
}
334334

335335
case (_) {
336336
alt (parse_lit(p)) {
337337
case (some[ast.lit](?lit)) {
338338
hi = lit.span;
339-
ex = ast.expr_lit(@lit, none[@ast.ty]);
339+
ex = ast.expr_lit(@lit, ast.ann_none);
340340
}
341341
case (none[ast.lit]) {
342342
p.err("expecting expression");
@@ -361,14 +361,14 @@ impure fn parse_path_expr(parser p) -> @ast.expr {
361361
case (token.IDENT(?i)) {
362362
hi = p.get_span();
363363
p.bump();
364-
auto e_ = ast.expr_field(e, i, none[@ast.ty]);
364+
auto e_ = ast.expr_field(e, i, ast.ann_none);
365365
e = @spanned(lo, hi, e_);
366366
}
367367

368368
case (token.LPAREN) {
369369
auto ix = parse_bottom_expr(p);
370370
hi = ix.span;
371-
auto e_ = ast.expr_index(e, ix, none[@ast.ty]);
371+
auto e_ = ast.expr_index(e, ix, ast.ann_none);
372372
e = @spanned(lo, hi, e_);
373373
}
374374
}
@@ -389,22 +389,22 @@ impure fn parse_prefix_expr(parser p) -> @ast.expr {
389389
// FIXME: can only remove this sort of thing when both typestate and
390390
// alt-exhaustive-match checking are co-operating.
391391
auto lit = @spanned(lo, lo, ast.lit_nil);
392-
let ast.expr_ ex = ast.expr_lit(lit, none[@ast.ty]);
392+
let ast.expr_ ex = ast.expr_lit(lit, ast.ann_none);
393393

394394
alt (p.peek()) {
395395

396396
case (token.NOT) {
397397
p.bump();
398398
auto e = parse_prefix_expr(p);
399399
hi = e.span;
400-
ex = ast.expr_unary(ast.not, e, none[@ast.ty]);
400+
ex = ast.expr_unary(ast.not, e, ast.ann_none);
401401
}
402402

403403
case (token.TILDE) {
404404
p.bump();
405405
auto e = parse_prefix_expr(p);
406406
hi = e.span;
407-
ex = ast.expr_unary(ast.bitnot, e, none[@ast.ty]);
407+
ex = ast.expr_unary(ast.bitnot, e, ast.ann_none);
408408
}
409409

410410
case (token.BINOP(?b)) {
@@ -413,14 +413,14 @@ impure fn parse_prefix_expr(parser p) -> @ast.expr {
413413
p.bump();
414414
auto e = parse_prefix_expr(p);
415415
hi = e.span;
416-
ex = ast.expr_unary(ast.neg, e, none[@ast.ty]);
416+
ex = ast.expr_unary(ast.neg, e, ast.ann_none);
417417
}
418418

419419
case (token.STAR) {
420420
p.bump();
421421
auto e = parse_prefix_expr(p);
422422
hi = e.span;
423-
ex = ast.expr_unary(ast.deref, e, none[@ast.ty]);
423+
ex = ast.expr_unary(ast.deref, e, ast.ann_none);
424424
}
425425

426426
case (_) {
@@ -433,7 +433,7 @@ impure fn parse_prefix_expr(parser p) -> @ast.expr {
433433
p.bump();
434434
auto e = parse_prefix_expr(p);
435435
hi = e.span;
436-
ex = ast.expr_unary(ast.box, e, none[@ast.ty]);
436+
ex = ast.expr_unary(ast.box, e, ast.ann_none);
437437
}
438438

439439
case (_) {
@@ -461,7 +461,7 @@ impure fn parse_binops(parser p,
461461
auto rhs = sub(p);
462462
hi = rhs.span;
463463
auto exp = ast.expr_binary(pair._1, e, rhs,
464-
none[@ast.ty]);
464+
ast.ann_none);
465465
e = @spanned(lo, hi, exp);
466466
more = true;
467467
}
@@ -487,7 +487,7 @@ impure fn parse_binary_exprs(parser p,
487487
p.bump();
488488
auto rhs = sub(p);
489489
hi = rhs.span;
490-
auto exp = ast.expr_binary(pair._1, e, rhs, none[@ast.ty]);
490+
auto exp = ast.expr_binary(pair._1, e, rhs, ast.ann_none);
491491
e = @spanned(lo, hi, exp);
492492
more = true;
493493
}
@@ -541,7 +541,7 @@ impure fn parse_cast_expr(parser p) -> @ast.expr {
541541
p.bump();
542542
auto t = parse_ty(p);
543543
hi = t.span;
544-
e = @spanned(lo, hi, ast.expr_cast(e, t));
544+
e = @spanned(lo, hi, ast.expr_cast(e, t, ast.ann_none));
545545
}
546546

547547
case (_) {
@@ -585,7 +585,7 @@ impure fn parse_assign_expr(parser p) -> @ast.expr {
585585
p.bump();
586586
auto rhs = parse_expr(p);
587587
ret @spanned(lo, rhs.span,
588-
ast.expr_assign(lhs, rhs, none[@ast.ty]));
588+
ast.expr_assign(lhs, rhs, ast.ann_none));
589589
}
590590
}
591591
ret lhs;
@@ -610,7 +610,7 @@ impure fn parse_if_expr(parser p) -> @ast.expr {
610610
hi = eblk.span;
611611
}
612612
}
613-
ret @spanned(lo, hi, ast.expr_if(cond, thn, els, none[@ast.ty]));
613+
ret @spanned(lo, hi, ast.expr_if(cond, thn, els, ast.ann_none));
614614
}
615615

616616
impure fn parse_while_expr(parser p) -> @ast.expr {
@@ -623,7 +623,7 @@ impure fn parse_while_expr(parser p) -> @ast.expr {
623623
expect(p, token.RPAREN);
624624
auto body = parse_block(p);
625625
hi = body.span;
626-
ret @spanned(lo, hi, ast.expr_while(cond, body, none[@ast.ty]));
626+
ret @spanned(lo, hi, ast.expr_while(cond, body, ast.ann_none));
627627
}
628628

629629
impure fn parse_do_while_expr(parser p) -> @ast.expr {
@@ -637,15 +637,15 @@ impure fn parse_do_while_expr(parser p) -> @ast.expr {
637637
auto cond = parse_expr(p);
638638
expect(p, token.RPAREN);
639639
hi = cond.span;
640-
ret @spanned(lo, hi, ast.expr_do_while(body, cond, none[@ast.ty]));
640+
ret @spanned(lo, hi, ast.expr_do_while(body, cond, ast.ann_none));
641641
}
642642

643643
impure fn parse_expr(parser p) -> @ast.expr {
644644
alt (p.peek()) {
645645
case (token.LBRACE) {
646646
auto blk = parse_block(p);
647647
ret @spanned(blk.span, blk.span,
648-
ast.expr_block(blk, none[@ast.ty]));
648+
ast.expr_block(blk, ast.ann_none));
649649
}
650650
case (token.IF) {
651651
ret parse_if_expr(p);

0 commit comments

Comments
 (0)