about summary refs log tree commit diff
path: root/src/comp/front
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2011-02-23 14:37:39 -0800
committerGraydon Hoare <graydon@mozilla.com>2011-02-23 14:37:39 -0800
commit381684043f1ad044c72347d759c1c545c6bccc3d (patch)
treedb6832b0e3be44071f294410e3a1570b42402ca4 /src/comp/front
parentc6bc5cce4bf2ed84740ec6810505014c7d73b779 (diff)
downloadrust-381684043f1ad044c72347d759c1c545c6bccc3d.tar.gz
rust-381684043f1ad044c72347d759c1c545c6bccc3d.zip
Add a type for crate directives, to support intermixing with exprs in crate files.
Diffstat (limited to 'src/comp/front')
-rw-r--r--src/comp/front/ast.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs
index 30b4d324abd..2c307478fbe 100644
--- a/src/comp/front/ast.rs
+++ b/src/comp/front/ast.rs
@@ -5,6 +5,7 @@ import std._vec;
 import util.common.span;
 import util.common.spanned;
 import util.common.ty_mach;
+import util.common.filename;
 
 type ident = str;
 
@@ -43,6 +44,18 @@ tag def {
 type crate = spanned[crate_];
 type crate_ = rec(_mod module);
 
+tag crate_directive_ {
+    cdir_expr(@expr);
+    cdir_src_mod(ident, option.t[filename]);
+    cdir_dir_mod(ident, option.t[filename], vec[crate_directive]);
+    cdir_view_item(@view_item);
+    cdir_meta(@meta_item);
+    cdir_syntax(path);
+    cdir_auth(path, effect);
+}
+type crate_directive = spanned[crate_directive_];
+
+
 type meta_item = spanned[meta_item_];
 type meta_item_ = rec(ident name, str value);
 
@@ -161,6 +174,7 @@ tag expr_ {
     expr_do_while(block, @expr, ann);
     expr_alt(@expr, vec[arm], ann);
     expr_block(block, ann);
+    expr_crate_directive_block(vec[crate_directive_]);
     expr_assign(@expr /* TODO: @expr|is_lval */, @expr, ann);
     expr_assign_op(binop, @expr /* TODO: @expr|is_lval */, @expr, ann);
     expr_field(@expr, ident, ann);