Skip to content

Commit ff2c099

Browse files
committed
---
yaml --- r: 1615 b: refs/heads/master c: ec7e84a h: refs/heads/master i: 1613: dcbce68 1611: 66e34d6 1607: 4e080df 1599: 5ce6008 v: v3
1 parent 1c738c0 commit ff2c099

File tree

4 files changed

+18
-12
lines changed

4 files changed

+18
-12
lines changed

[refs]

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

trunk/src/comp/front/ast.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ tag def {
4444
}
4545

4646
type crate = spanned[crate_];
47-
type crate_ = rec(_mod module);
47+
type crate_ = rec(vec[@crate_directive] directives,
48+
_mod module);
4849

4950
tag crate_directive_ {
5051
cdir_expr(@expr);

trunk/src/comp/front/parser.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -2244,7 +2244,9 @@ impure fn parse_crate_from_source_file(parser p) -> @ast.crate {
22442244
auto lo = p.get_span();
22452245
auto hi = lo;
22462246
auto m = parse_mod_items(p, token.EOF);
2247-
ret @spanned(lo, hi, rec(module=m));
2247+
let vec[@ast.crate_directive] cdirs = vec();
2248+
ret @spanned(lo, hi, rec(directives=cdirs,
2249+
module=m));
22482250
}
22492251

22502252
// Logic for parsing crate files (.rc)
@@ -2259,8 +2261,6 @@ impure fn parse_crate_directive(parser p) -> ast.crate_directive
22592261
auto hi = lo;
22602262
alt (p.peek()) {
22612263
case (token.AUTH) {
2262-
// FIXME: currently dropping auth clauses on the floor,
2263-
// as there is no effect-checking pass.
22642264
p.bump();
22652265
auto n = parse_path(p, GREEDY);
22662266
expect(p, token.EQ);
@@ -2271,8 +2271,6 @@ impure fn parse_crate_directive(parser p) -> ast.crate_directive
22712271
}
22722272

22732273
case (token.META) {
2274-
// FIXME: currently dropping meta clauses on the floor,
2275-
// as there is no crate metadata system
22762274
p.bump();
22772275
auto mis = parse_meta(p);
22782276
hi = p.get_span();
@@ -2381,7 +2379,8 @@ impure fn parse_crate_from_crate_file(parser p) -> @ast.crate {
23812379
cdirs, prefix);
23822380
hi = p.get_span();
23832381
expect(p, token.EOF);
2384-
ret @spanned(lo, hi, rec(module=m));
2382+
ret @spanned(lo, hi, rec(directives=cdirs,
2383+
module=m));
23852384
}
23862385

23872386

trunk/src/comp/middle/fold.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ type ast_fold[ENV] =
273273
(fn(&ENV e, &ast.native_mod m) -> ast.native_mod) fold_native_mod,
274274

275275
(fn(&ENV e, &span sp,
276+
vec[@ast.crate_directive] cdirs,
276277
&ast._mod m) -> @ast.crate) fold_crate,
277278

278279
(fn(&ENV e,
@@ -991,9 +992,12 @@ fn fold_native_mod[ENV](&ENV e, ast_fold[ENV] fld,
991992
}
992993

993994
fn fold_crate[ENV](&ENV env, ast_fold[ENV] fld, @ast.crate c) -> @ast.crate {
995+
// FIXME: possibly fold the directives so you process any expressions
996+
// within them? Not clear. After front/eval.rs, nothing else should look
997+
// at crate directives.
994998
let ENV env_ = fld.update_env_for_crate(env, c);
995999
let ast._mod m = fold_mod[ENV](env_, fld, c.node.module);
996-
ret fld.fold_crate(env_, c.span, m);
1000+
ret fld.fold_crate(env_, c.span, c.node.directives, m);
9971001
}
9981002

9991003
//// Identity folds.
@@ -1381,8 +1385,10 @@ fn identity_fold_native_mod[ENV](&ENV e,
13811385
ret m;
13821386
}
13831387

1384-
fn identity_fold_crate[ENV](&ENV e, &span sp, &ast._mod m) -> @ast.crate {
1385-
ret @respan(sp, rec(module=m));
1388+
fn identity_fold_crate[ENV](&ENV e, &span sp,
1389+
vec[@ast.crate_directive] cdirs,
1390+
&ast._mod m) -> @ast.crate {
1391+
ret @respan(sp, rec(directives=cdirs, module=m));
13861392
}
13871393

13881394
fn identity_fold_obj[ENV](&ENV e,
@@ -1537,7 +1543,7 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
15371543
fold_fn_decl = bind identity_fold_fn_decl[ENV](_,_,_,_),
15381544
fold_mod = bind identity_fold_mod[ENV](_,_),
15391545
fold_native_mod = bind identity_fold_native_mod[ENV](_,_),
1540-
fold_crate = bind identity_fold_crate[ENV](_,_,_),
1546+
fold_crate = bind identity_fold_crate[ENV](_,_,_,_),
15411547
fold_obj = bind identity_fold_obj[ENV](_,_,_,_),
15421548

15431549
update_env_for_crate = bind identity_update_env_for_crate[ENV](_,_),

0 commit comments

Comments
 (0)