aboutsummaryrefslogtreecommitdiff
path: root/src/boot/fe/item.ml
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-09-14 10:52:32 -0700
committerGraydon Hoare <[email protected]>2010-09-14 10:52:32 -0700
commit7287d3aaa0545a9b22cea874f2d751de4fefd23d (patch)
treed35680fc38e9a559d466be476066bb34243415e2 /src/boot/fe/item.ml
parentUpdate manual to cover change to nominal tag items. (diff)
downloadrust-7287d3aaa0545a9b22cea874f2d751de4fefd23d.tar.xz
rust-7287d3aaa0545a9b22cea874f2d751de4fefd23d.zip
Teach front-end about simple, first-cut version of const items.
Diffstat (limited to 'src/boot/fe/item.ml')
-rw-r--r--src/boot/fe/item.ml18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/boot/fe/item.ml b/src/boot/fe/item.ml
index a74952cc..3bf61f8c 100644
--- a/src/boot/fe/item.ml
+++ b/src/boot/fe/item.ml
@@ -19,6 +19,13 @@ let rec parse_expr (ps:pstate) : (Ast.stmt array * Ast.expr) =
let pexp = ctxt "expr" Pexp.parse_pexp ps in
Pexp.desugar_expr ps pexp
+and parse_prim_expr (ps:pstate) : Ast.expr =
+ let pexp = ctxt "expr" Pexp.parse_pexp ps in
+ let (stmts, expr) = Pexp.desugar_expr ps pexp in
+ if Array.length stmts = 0
+ then expr
+ else raise (Parse_err (ps, "expected primitive expression"))
+
and parse_expr_atom (ps:pstate) : (Ast.stmt array * Ast.atom) =
let pexp = ctxt "expr" Pexp.parse_pexp ps in
Pexp.desugar_expr_atom ps pexp
@@ -944,6 +951,17 @@ and parse_mod_item (ps:pstate)
(decl params (Ast.MOD_ITEM_fn fn))) |]
end
+ | CONST ->
+ bump ps;
+ let ty = Pexp.parse_ty ps in
+ let ident = Pexp.parse_ident ps in
+ expect ps EQ;
+ let expr = parse_prim_expr ps in
+ expect ps SEMI;
+ let bpos = lexpos ps in
+ [| (ident, span ps apos bpos
+ (decl [||] (Ast.MOD_ITEM_const (ty, Some expr)))) |]
+
| MOD ->
bump ps;
let (ident, params) = parse_ident_and_params ps "mod" in