Skip to content

Commit b8bb2e1

Browse files
lkupergraydon
authored andcommitted
Further on the path toward self-awareness.
Mostly: * Merciless refactoring of trans.rs so that trans_call can work for self-calls as well as other kinds of calls Also: * Various changes to go with having idents, rather than exprs, in expr_call_self AST nodes * Added missing case for SELF token to token.to_str()
1 parent 8703c80 commit b8bb2e1

File tree

7 files changed

+99
-118
lines changed

7 files changed

+99
-118
lines changed

src/comp/front/ast.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ tag expr_ {
258258
expr_tup(vec[elt], ann);
259259
expr_rec(vec[field], option.t[@expr], ann);
260260
expr_call(@expr, vec[@expr], ann);
261-
expr_call_self(@expr, vec[@expr], ann);
261+
expr_call_self(ident, vec[@expr], ann);
262262
expr_bind(@expr, vec[option.t[@expr]], ann);
263263
expr_spawn(spawn_dom, option.t[str], @expr, vec[@expr], ann);
264264
expr_binary(binop, @expr, @expr, ann);

src/comp/front/parser.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -887,10 +887,12 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
887887
}
888888

889889
case (token.SELF) {
890+
log "parsing a self-call...";
891+
890892
p.bump();
891893
expect(p, token.DOT);
892894
// The rest is a call expression.
893-
auto e = parse_bottom_expr(p);
895+
auto e = parse_ident(p);
894896
auto pf = parse_expr;
895897
auto es = parse_seq[@ast.expr](token.LPAREN,
896898
token.RPAREN,

src/comp/front/token.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,8 @@ fn to_str(token t) -> str {
348348

349349
/* Object type */
350350
case (OBJ) { ret "obj"; }
351+
case (SELF) { ret "self"; }
352+
351353

352354
/* Comm and task types */
353355
case (CHAN) { ret "chan"; }

src/comp/middle/fold.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ type ast_fold[ENV] =
8888
ann a) -> @expr) fold_expr_call,
8989

9090
(fn(&ENV e, &span sp,
91-
@expr f, vec[@expr] args,
91+
ident id, vec[@expr] args,
9292
ann a) -> @expr) fold_expr_call_self,
9393

9494
(fn(&ENV e, &span sp,
@@ -566,10 +566,9 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr {
566566
ret fld.fold_expr_call(env_, e.span, ff, aargs, t);
567567
}
568568

569-
case (ast.expr_call_self(?f, ?args, ?t)) {
570-
auto ff = fold_expr(env_, fld, f);
569+
case (ast.expr_call_self(?ident, ?args, ?t)) {
571570
auto aargs = fold_exprs(env_, fld, args);
572-
ret fld.fold_expr_call_self(env_, e.span, ff, aargs, t);
571+
ret fld.fold_expr_call_self(env_, e.span, ident, aargs, t);
573572
}
574573

575574
case (ast.expr_bind(?f, ?args_opt, ?t)) {
@@ -1185,9 +1184,9 @@ fn identity_fold_expr_call[ENV](&ENV env, &span sp, @expr f,
11851184
ret @respan(sp, ast.expr_call(f, args, a));
11861185
}
11871186

1188-
fn identity_fold_expr_call_self[ENV](&ENV env, &span sp, @expr f,
1187+
fn identity_fold_expr_call_self[ENV](&ENV env, &span sp, ident id,
11891188
vec[@expr] args, ann a) -> @expr {
1190-
ret @respan(sp, ast.expr_call_self(f, args, a));
1189+
ret @respan(sp, ast.expr_call_self(id, args, a));
11911190
}
11921191

11931192
fn identity_fold_expr_bind[ENV](&ENV env, &span sp, @expr f,

0 commit comments

Comments
 (0)