diff options
| author | Graydon Hoare <[email protected]> | 2010-11-02 17:20:57 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-11-02 17:20:57 -0700 |
| commit | 7abf6eb7c67dfb43540fdcafd6f1e69bdd2a6849 (patch) | |
| tree | 1abdd0450b778fad9341365bb577da2548447feb /src/boot/fe/item.ml | |
| parent | Split out stratum-checking pass, implement more-strict (overly aggressive) im... (diff) | |
| download | rust-7abf6eb7c67dfb43540fdcafd6f1e69bdd2a6849.tar.xz rust-7abf6eb7c67dfb43540fdcafd6f1e69bdd2a6849.zip | |
Shift obj, type, param decls to have strata rather than effects.
Diffstat (limited to 'src/boot/fe/item.ml')
| -rw-r--r-- | src/boot/fe/item.ml | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/boot/fe/item.ml b/src/boot/fe/item.ml index 4c9bd556..fc144439 100644 --- a/src/boot/fe/item.ml +++ b/src/boot/fe/item.ml @@ -692,13 +692,12 @@ and parse_stmts_including_none (ps:pstate) : Ast.stmt array = and parse_ty_param (iref:int ref) (ps:pstate) : Ast.ty_param identified = let apos = lexpos ps in let _ = Pexp.parse_opacity ps in - let _ = Pexp.parse_stratum ps in - let e = Pexp.parse_effect ps in + let s = Pexp.parse_stratum ps in let ident = Pexp.parse_ident ps in let i = !iref in let bpos = lexpos ps in incr iref; - span ps apos bpos (ident, (i, e)) + span ps apos bpos (ident, (i, s)) and parse_ty_params (ps:pstate) : (Ast.ty_param identified) array = @@ -843,7 +842,7 @@ and parse_optional_meta_pat (ps:pstate) (ident:Ast.ident) : Ast.meta_pat = and parse_obj_item (ps:pstate) (apos:pos) - (effect:Ast.effect) + (stratum:Ast.stratum) : (Ast.ident * Ast.mod_item) = expect ps OBJ; let (ident, params) = parse_ident_and_params ps "obj" in @@ -872,7 +871,7 @@ and parse_obj_item expect ps RBRACE; let bpos = lexpos ps in let obj = { Ast.obj_state = state; - Ast.obj_effect = effect; + Ast.obj_stratum = stratum; Ast.obj_constrs = constrs; Ast.obj_fns = fns; Ast.obj_drop = !drop } @@ -884,7 +883,7 @@ and parse_obj_item and parse_tag_item (ps:pstate) (apos:pos) - (effect:Ast.effect) + (stratum:Ast.stratum) : (Ast.ident * Ast.mod_item) array = expect ps TAG; let (ident, params) = parse_ident_and_params ps "tag" in @@ -946,14 +945,14 @@ and parse_tag_item let ty_item = (ident, span ps apos bpos - (decl params (Ast.MOD_ITEM_type (effect, ty)))) + (decl params (Ast.MOD_ITEM_type (stratum, ty)))) in Array.append [| ty_item |] constructors and parse_type_item (ps:pstate) (apos:pos) - (effect:Ast.effect) + (stratum:Ast.stratum) : (Ast.ident * Ast.mod_item) = expect ps TYPE; let (ident, params) = parse_ident_and_params ps "type" in @@ -961,7 +960,7 @@ and parse_type_item 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 + let item = Ast.MOD_ITEM_type (stratum, ty) in (ident, span ps apos bpos (decl params item)) and parse_mod_item (ps:pstate) @@ -993,14 +992,25 @@ and parse_mod_item (ps:pstate) STATE | GC | IMPURE | UNSAFE | ABS | TYPE | OBJ | TAG | FN | ITER -> let _ = Pexp.parse_opacity ps in - let _ = Pexp.parse_stratum ps in + let stratum = Pexp.parse_stratum ps in let effect = Pexp.parse_effect ps in begin match peek ps with - OBJ -> [| parse_obj_item ps apos effect |] - | TAG -> parse_tag_item ps apos effect - | TYPE -> [| parse_type_item ps apos effect |] + OBJ -> + if effect <> Ast.EFF_pure + then raise (err "effect specified for obj" ps); + [| parse_obj_item ps apos stratum |] + | TAG -> + if effect <> Ast.EFF_pure + then raise (err "effect specified for tag" ps); + parse_tag_item ps apos stratum + | TYPE -> + if effect <> Ast.EFF_pure + then raise (err "effect specified for type" ps); + [| parse_type_item ps apos stratum |] | _ -> + if stratum <> Ast.STRAT_value + then raise (err "stratum specified for fn or iter" ps); let is_iter = (peek ps) = ITER in bump ps; let (ident, params) = parse_ident_and_params ps "fn" in @@ -1149,7 +1159,7 @@ and parse_native_mod_item_from_signature (ps:pstate) expect ps SEMI; let bpos = lexpos ps in [| (ident, span ps apos bpos - (decl params (Ast.MOD_ITEM_type (Ast.EFF_unsafe, t)))) |] + (decl params (Ast.MOD_ITEM_type (Ast.STRAT_value, t)))) |] | _ -> raise (unexpected ps) |