From 102ec1687700d51b5367bd68c43ce146bb8c9b74 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Wed, 18 Aug 2010 09:00:10 -0700 Subject: [PATCH] Flesh out the ast module in rustc a little. --- src/comp/fe/ast.rs | 48 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/comp/fe/ast.rs b/src/comp/fe/ast.rs index 8aea570dfd1..3a329dede1c 100644 --- a/src/comp/fe/ast.rs +++ b/src/comp/fe/ast.rs @@ -1,4 +1,50 @@ -type crate = rec( str filename ); + +import std.util.option; +import std.map.hashmap; + +type ident = str; + +type crate = rec( str filename, + _mod module); + +type block = vec[stmt]; + +type stmt = tag( stmt_block(block), + stmt_decl(@decl), + stmt_ret(option[@lval]) ); + +type decl = tag( decl_local(ident, option[ty]), + decl_item(ident, @item) ); + +type lval = tag( lval_ident(ident), + lval_ext(@lval, ident), + lval_idx(@lval, @atom) ); + +type atom = tag( atom_lit(lit)); + +type lit = tag( lit_char(char), + lit_int(int), + lit_nil(), + lit_bool(bool) ); + +type ty = tag( ty_nil(), + ty_bool(), + ty_int(), + ty_char() ); + +type mode = tag( local(), alias() ); + +type slot = rec(ty ty, mode mode); + +type _fn = rec(vec[rec(slot slot, ident ident)] inputs, + slot output, + block body); + +type _mod = hashmap[ident,item]; + +type item = tag( item_fn(@_fn), + item_mod(@_mod) ); + // // Local Variables: