diff options
| author | Graydon Hoare <[email protected]> | 2010-07-02 12:02:56 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-07-02 12:02:56 -0700 |
| commit | 285a4735b9565cc75cabd02f7b9c89aa8a70657e (patch) | |
| tree | cd9fbc798e6cc08ec7f758edc1a564a69f672532 /src/boot/fe/item.ml | |
| parent | Remove nameless node causing errors on doc make. (diff) | |
| download | rust-285a4735b9565cc75cabd02f7b9c89aa8a70657e.tar.xz rust-285a4735b9565cc75cabd02f7b9c89aa8a70657e.zip | |
Parse effect-qualified type definitions.
Diffstat (limited to 'src/boot/fe/item.ml')
| -rw-r--r-- | src/boot/fe/item.ml | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/boot/fe/item.ml b/src/boot/fe/item.ml index 658fb8c4..130909e2 100644 --- a/src/boot/fe/item.ml +++ b/src/boot/fe/item.ml @@ -760,6 +760,20 @@ and parse_obj_item span ps apos bpos (decl params (Ast.MOD_ITEM_obj obj))) +and parse_type_item + (ps:pstate) + (apos:pos) + (effect:Ast.effect) + : (Ast.ident * Ast.mod_item) = + expect ps TYPE; + let (ident, params) = parse_ident_and_params ps "type" in + let _ = expect ps EQ in + let ty = ctxt "mod type item: ty" Pexp.parse_ty ps in + let _ = expect ps SEMI in + let bpos = lexpos ps in + let item = Ast.MOD_ITEM_type (effect, ty) in + (ident, span ps apos bpos (decl params item)) + and parse_mod_item (ps:pstate) : (Ast.ident * Ast.mod_item) = let apos = lexpos ps in @@ -775,13 +789,15 @@ and parse_mod_item (ps:pstate) : (Ast.ident * Ast.mod_item) = | _ -> ps.pstate_infer_lib_name ident in + match peek ps with - IO | STATE | UNSAFE | OBJ | FN | ITER -> + IO | STATE | UNSAFE | TYPE | OBJ | FN | ITER -> let effect = Pexp.parse_effect ps in begin match peek ps with OBJ -> parse_obj_item ps apos effect + | TYPE -> parse_type_item ps apos effect | _ -> let is_iter = (peek ps) = ITER in bump ps; @@ -795,16 +811,6 @@ and parse_mod_item (ps:pstate) : (Ast.ident * Ast.mod_item) = (decl params (Ast.MOD_ITEM_fn fn))) end - | TYPE -> - bump ps; - let (ident, params) = parse_ident_and_params ps "type" in - let _ = expect ps EQ in - let ty = ctxt "mod type item: ty" Pexp.parse_ty ps in - let _ = expect ps SEMI in - let bpos = lexpos ps in - let item = Ast.MOD_ITEM_type ty in - (ident, span ps apos bpos (decl params item)) - | MOD -> bump ps; let (ident, params) = parse_ident_and_params ps "mod" in @@ -964,7 +970,8 @@ and parse_mod_item_from_signature (ps:pstate) in expect ps SEMI; let bpos = lexpos ps in - (ident, span ps apos bpos (decl params (Ast.MOD_ITEM_type t))) + (ident, span ps apos bpos + (decl params (Ast.MOD_ITEM_type (Ast.UNSAFE, t)))) | _ -> raise (unexpected ps) @@ -1008,7 +1015,7 @@ and expand_tags | _ -> [| |] in match item.node.Ast.decl_item with - Ast.MOD_ITEM_type tyd -> handle_ty_decl item.id tyd + Ast.MOD_ITEM_type (_, tyd) -> handle_ty_decl item.id tyd | _ -> [| |] |