From 8fad79a7d37c7cb31cd9b7cef260b64187dfc652 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Thu, 26 Feb 2026 23:58:00 +0100 Subject: [PATCH 01/12] initial work --- src/Common/DEC_GRAMMAR.sml | 8 +- src/Common/DecGrammar.sml | 120 +- src/Common/ERROR_INFO.sml | 26 +- src/Common/EfficientElab/ElabTopdec.sml | 4 +- src/Common/EfficientElab/Environments.sml | 13 +- src/Common/EfficientElab/StatObject.sml | 461 +++-- src/Common/ElabDec.sml | 121 +- src/Common/ErrorInfo.sml | 458 +++-- src/Common/ErrorTraverse.sml | 21 +- src/Common/STATOBJECT.sml | 6 +- src/Common/TYNAME.sig | 5 +- src/Common/TyName.sml | 29 +- src/Compiler/Lambda/CompileDec.sml | 2 +- src/Manager/FreeIds.sml | 4 +- src/Manager/OpacityElim.sml | 5 +- src/Parsing/GrammarUtils.sml | 14 +- src/Parsing/Topdec.grm | 49 +- src/Parsing/Topdec.grm.sml | 2042 ++++++++++--------- test/explicit_regions/Makefile | 3 +- test/explicit_regions/all.tst | 10 +- test/explicit_regions/er18.sml.log.ok | 5 + test/explicit_regions/err_expty4.sml | 7 + test/explicit_regions/err_expty4.sml.log.ok | 8 + test/explicit_regions/err_ty2.sml | 3 + test/explicit_regions/err_ty2.sml.log.ok | 7 + test/explicit_regions/err_ty3.sml | 3 + test/explicit_regions/err_ty3.sml.log.ok | 7 + test/explicit_regions/expty3.sml | 7 + test/explicit_regions/expty3.sml.out.ok | 1 + test/explicit_regions/ty1.sml | 8 +- 30 files changed, 1911 insertions(+), 1546 deletions(-) create mode 100644 test/explicit_regions/err_expty4.sml create mode 100644 test/explicit_regions/err_expty4.sml.log.ok create mode 100644 test/explicit_regions/err_ty2.sml create mode 100644 test/explicit_regions/err_ty2.sml.log.ok create mode 100644 test/explicit_regions/err_ty3.sml create mode 100644 test/explicit_regions/err_ty3.sml.log.ok create mode 100644 test/explicit_regions/expty3.sml create mode 100644 test/explicit_regions/expty3.sml.out.ok diff --git a/src/Common/DEC_GRAMMAR.sml b/src/Common/DEC_GRAMMAR.sml index e3c1c0271..b674fb391 100644 --- a/src/Common/DEC_GRAMMAR.sml +++ b/src/Common/DEC_GRAMMAR.sml @@ -74,7 +74,7 @@ sig and FClause = FCLAUSE of info * atpat list * ty option * exp * FClause option and typbind = - TYPBIND of info * tyvar list * tycon * ty * typbind option + TYPBIND of info * tyvar list * (info * regvar list) * tycon * ty * typbind option and datbind = DATBIND of info * tyvar list * tycon * conbind * datbind option @@ -107,7 +107,7 @@ sig and ty = TYVARty of info * tyvar | RECORDty of info * tyrow option * (info*regvar) option | - CONty of info * ty list * longtycon | + CONty of info * ty list * (info*regvar) list * longtycon | FNty of info * ty * (info*regvar) option * ty | PARty of info * ty * (info*(info*regvar)list) option | WITHty of info * ty * constraint (* ReML *) @@ -175,7 +175,9 @@ sig val getExplicitTyVarsTy : ty -> tyvar list - and getExplicitTyVarsConbind : conbind -> tyvar list + val getExplicitTyVarsConbind : conbind -> tyvar list + + val getRegVarsTy : ty -> regvar list (* ReML *) (*expansive harmless_con exp = true iff exp is expansive. harmless_con longid = true iff longid is an excon or a con different diff --git a/src/Common/DecGrammar.sml b/src/Common/DecGrammar.sml index 5a774289a..fd7ab3ee2 100644 --- a/src/Common/DecGrammar.sml +++ b/src/Common/DecGrammar.sml @@ -83,7 +83,7 @@ struct and FClause = FCLAUSE of info * atpat list * ty option * exp * FClause option and typbind = - TYPBIND of info * tyvar list * tycon * ty * typbind option + TYPBIND of info * tyvar list * (info * regvar list) * tycon * ty * typbind option and datbind = DATBIND of info * tyvar list * tycon * conbind * datbind option @@ -116,7 +116,7 @@ struct and ty = TYVARty of info * tyvar | RECORDty of info * tyrow option * (info*regvar) option | - CONty of info * ty list * longtycon | + CONty of info * ty list * (info*regvar) list * longtycon | FNty of info * ty * (info*regvar) option * ty | PARty of info * ty * (info*(info*regvar)list) option | WITHty of info * ty * constraint @@ -251,7 +251,7 @@ struct | PUTateff x => #1 x | GETateff x => #1 x - fun get_info_typbind (TYPBIND (info, tyvars, tycon, ty, typbind_opt)) = info + fun get_info_typbind (TYPBIND (info, tyvars, regvars, tycon, ty, typbind_opt)) = info fun get_info_tyrow (TYROW (info, lab, ty, tyrow_opt)) = info @@ -362,8 +362,8 @@ struct | RECvalbind(i, valbind) => RECvalbind(f i, map_valbind_info f valbind) - and map_typbind_info f (TYPBIND(i,tyvars,tycon,ty,typbind_opt)): typbind = - TYPBIND(f i,tyvars,tycon,map_ty_info f ty, + and map_typbind_info f (TYPBIND(i,tyvars,(ir,regvars),tycon,ty,typbind_opt)): typbind = + TYPBIND(f i,tyvars,(f ir,regvars),tycon,map_ty_info f ty, do_opt typbind_opt (map_typbind_info f)) and map_datbind_info f (DATBIND(i,tyvars,tycon,conbind,datbind_opt)): datbind = @@ -418,7 +418,7 @@ struct case ty of TYVARty(i,tyvar) => TYVARty(f i, tyvar) | RECORDty(i,tyrow_opt,opt) => RECORDty(f i, do_opt tyrow_opt (map_tyrow_info f),Option.map (fn (i,rv) => (f i,rv)) opt) - | CONty(i,tys,longtycon) => CONty(f i, map (map_ty_info f) tys,longtycon) + | CONty(i,tys,regvars,longtycon) => CONty(f i, map (map_ty_info f) tys, map (fn (i,r) => (f i,r)) regvars, longtycon) | FNty(i,ty,opt,ty') => FNty(f i, map_ty_info f ty, Option.map (fn (i,rv) => (f i,rv)) opt, map_ty_info f ty') | PARty(i,ty,opt) => PARty(f i, map_ty_info f ty, Option.map (fn (i,rvis) => (f i,List.map (fn (i,rv) => (f i,rv)) rvis)) opt) | WITHty (i,t,c) => WITHty (f i, map_ty_info f t, map_constraint_info f c) @@ -487,7 +487,7 @@ struct TYVARty(_, tv) => tv::res | RECORDty(_, NONE, _) => res | RECORDty(_, SOME tyrow, _) => fTyrow tyrow res - | CONty(_, tys, _) => foldl (fn (ty,res) => fTy ty res) res tys + | CONty(_, tys, _, _) => foldl (fn (ty,res) => fTy ty res) res tys | FNty(_, ty1, _, ty2) => fTy ty1 (fTy ty2 res) | PARty(_, ty, _) => fTy ty res | WITHty(_, ty, _) => fTy ty res @@ -505,12 +505,53 @@ struct NONE => res' | SOME conbind => fConbind conbind res' end - in - fun getExplicitTyVarsTy ty = fTy ty [] + fun getExplicitTyVarsTy ty = fTy ty [] fun getExplicitTyVarsConbind ty = fConbind ty [] end + local + fun ins r xs = if List.exists (fn x => RegVar.eq(x,r)) xs then xs + else r::xs + fun inss nil xs = xs + | inss (r::rs) xs = ins r (inss rs xs) + fun fInfoRegVar x acc = + case x of + NONE => acc + | SOME (_,r) => ins r acc + fun fTy ty acc = + case ty of + TYVARty _ => acc + | RECORDty(_, NONE, iro) => fInfoRegVar iro acc + | RECORDty(_, SOME tyrow, iro) => fTyrow tyrow (fInfoRegVar iro acc) + | CONty(_, tys, irs, _) => foldl (fn (ty,acc) => fTy ty acc) (inss (map #2 irs) acc) tys + | FNty(_, ty1, iro, ty2) => fTy ty1 (fInfoRegVar iro (fTy ty2 acc)) + | PARty(_, ty, NONE) => fTy ty acc + | PARty(_, ty, SOME (_,irs)) => fTy ty (inss (map #2 irs) acc) + | WITHty(_, ty, c) => fTy ty (fConstraint c acc) + and fConstraint c acc = + case c of + DISJOINTconstraint (_,e1,e2,_) => fEff e1 (fEff e2 acc) + | INCLconstraint (_,(_,r),e) => fEff e (ins r acc) + | PROPconstraint (_,_,e) => fEff e acc + and fEff e acc = + case e of + SETeff (_, aes) => fAtEffs aes acc + | VAReff (_,r) => ins r acc + and fAtEffs nil acc = acc + | fAtEffs (ae::aes) acc = + case ae of + VARateff (_,r) => ins r (fAtEffs aes acc) + | PUTateff (_,(_,r)) => ins r (fAtEffs aes acc) + | GETateff (_,(_,r)) => ins r (fAtEffs aes acc) + and fTyrow (TYROW(_, _, ty, tyrowopt)) acc = + case tyrowopt of + NONE => fTy ty acc + | SOME tyrow => fTyrow tyrow (fTy ty acc) + in + fun getRegVarsTy ty = fTy ty [] + end + (* finding the string name of a topmost value identifier in a pattern, if any exists: *) fun find_topmost_id_in_pat (ATPATpat(_, atpat)): string option = find_topmost_id_in_atpat atpat @@ -850,22 +891,36 @@ struct } ) + and layoutRegvarseq regvars = + case regvars + of nil => NONE + | [rv] => SOME(LEAF("`" ^ RegVar.pr rv)) + | rvs => SOME(NODE{start="`[", finish="]", indent=1, + children=map (LEAF o RegVar.pr) rvs, + childsep=RIGHT " " + } + ) + and layoutTypbind typbind : StringTree = let - fun treesOfTypbind(TYPBIND(_, tyvars, tycon, ty, typbind_opt)) - : StringTree list = + fun treesOfTypbind (TYPBIND(_, tyvars, (_,regvars), tycon, ty, typbind_opt)) + : StringTree list = let val tyvars_opt = layoutTyvarseq tyvars + val regvars_opt = layoutRegvarseq regvars val tyconT = LEAF(TyCon.pr_TyCon tycon) - val eqT = LEAF " = " + val eqT = LEAF "=" val tyT = layoutTy ty val this = NODE{start="", finish="", indent=0, children=(case tyvars_opt of SOME x => [x] | NONE => nil - ) @ [tyconT, eqT, tyT], - childsep=NOSEP + ) @ + (case regvars_opt of SOME x => [x] + | NONE => nil + ) @ [tyconT, eqT, tyT], + childsep=RIGHT " " } in this :: (case typbind_opt @@ -1128,23 +1183,28 @@ struct | NONE => LEAF "{}" (* "unit" ? *) end - | CONty(_, tys, longtycon) => + | CONty(_, tys, regvars, longtycon) => let - fun idTail t = - NODE{start="", finish=" " ^ TyCon.pr_LongTyCon longtycon, - indent=0, children=[t], childsep=NOSEP - } - in - case tys - of nil => LEAF(TyCon.pr_LongTyCon longtycon) - - | [ty] => idTail(layoutTy ty) - - | tys => idTail(NODE{start="(", finish=")", indent=1, - children=map layoutTy tys, - childsep=RIGHT ", " - } - ) + fun idTail ts = + NODE{start="", finish=" " ^ TyCon.pr_LongTyCon longtycon, + indent=0, children=ts, childsep=RIGHT " " + } + fun layRegvars () = NODE{start="`[", finish="]", indent=2, + children=map (fn (_,r) => LEAF(RegVar.pr r)) regvars, + childsep=RIGHT " "} + fun layTys () = NODE{start="(", finish=")", indent=1, + children=map layoutTy tys, + childsep=RIGHT ", "} + in case tys of + nil => (case regvars of + nil => LEAF(TyCon.pr_LongTyCon longtycon) + | _ => idTail [layRegvars()]) + | [ty] => (case regvars of + nil => idTail [layoutTy ty] + | _ => idTail [layoutTy ty, layRegvars()]) + | tys => (case regvars of + nil => idTail [layTys()] + | _ => idTail [layTys(), layRegvars()]) end | FNty(_, ty1, opt, ty2) => diff --git a/src/Common/ERROR_INFO.sml b/src/Common/ERROR_INFO.sml index 5b470c588..6ea1f3356 100644 --- a/src/Common/ERROR_INFO.sml +++ b/src/Common/ERROR_INFO.sml @@ -1,6 +1,6 @@ signature ERROR_INFO = (* ErrorInfo is part of the ElabInfo. See ELAB_INFO for an - * overview of the different kinds of info.*) + * overview of the different kinds of info.*) sig type TyName type TyVar @@ -19,19 +19,19 @@ signature ERROR_INFO = (* ErrorInfo is part of the ElabInfo. See ELAB_I type regvar datatype RepeatedId = ID_RID of id (* Repeated identifier, syntax *) - | LAB_RID of lab (* errors *) - | TYCON_RID of tycon - | EXCON_RID of id - | CON_RID of id - | TYVAR_RID of TyVar - | STRID_RID of strid - | SIGID_RID of sigid - | FUNID_RID of funid + | LAB_RID of lab (* errors *) + | TYCON_RID of tycon + | EXCON_RID of id + | CON_RID of id + | TYVAR_RID of TyVar + | STRID_RID of strid + | SIGID_RID of sigid + | FUNID_RID of funid | REGVAR_RID of regvar datatype ErrorInfo = (* Core errors: *) - UNIFICATION of Type * Type + UNIFICATION of Type * Type | UNIFICATION_TEXT of string * Type * string * Type | UNIFICATION_RANK of Type * Type * TyVar * TyName | LOOKUP_LONGID of longid @@ -84,10 +84,14 @@ signature ERROR_INFO = (* ErrorInfo is part of the ElabInfo. See ELAB_I | REGVARS_SCOPED_TWICE of regvar list | REGVAR_TY_UNBOXED | REGVAR_TY_ANNOTATE of string + | REGVARS_NOT_IN_REGVARSEQ of regvar list + | REGVARS_INVALID_ORDER of regvar list + | REGVARS_WRONG_ARITY_R of {expected: int, actual: int} + | REGVARS_WRONG_ARITY_E of {expected: int, actual: int} type Report val report : ErrorInfo -> Report structure ErrorCode : ERROR_CODE (* Support for error testing and handling. *) sharing type ErrorCode.ErrorInfo = ErrorInfo - end; + end diff --git a/src/Common/EfficientElab/ElabTopdec.sml b/src/Common/EfficientElab/ElabTopdec.sml index 555dafbbe..5e2c696f4 100644 --- a/src/Common/EfficientElab/ElabTopdec.sml +++ b/src/Common/EfficientElab/ElabTopdec.sml @@ -582,7 +582,7 @@ structure ElabTopdec: ELABTOPDEC = else if TyName.arity t <> List.length alphas then fail (ErrorInfo.WHERE_TYPE_ARITY (alphas, (longtycon, t)), out_ty) else - let val theta' = TypeFcn.from_TyVars_and_Type (alphas, tau) + let val theta' = TypeFcn.from_TyVars_and_Type (alphas, nil, tau) (* MEMO ReML *) val phi = Realisation.singleton (t, theta') val phi_E = Realisation.on_Env phi E in @@ -907,7 +907,7 @@ structure ElabTopdec: ELABTOPDEC = val tyvars = map TyVar.from_ExplicitTyVar explicittyvars val tyvars_repeated = repeaters (op =) explicittyvars val arity = List.length explicittyvars - val t = TyName.freshTyName {tycon=tycon, arity=arity, equality=equality} + val t = TyName.freshTyName {tycon=tycon, arity=arity, arity_reml=(0,0), equality=equality} (* ReML MEMO *) val theta = TypeFcn.from_TyName t val tystr = TyStr.from_theta_and_VE (theta, VE.empty) val (error, ids) = add_ids_tycon(ids,tycon) diff --git a/src/Common/EfficientElab/Environments.sml b/src/Common/EfficientElab/Environments.sml index 5bcef5aec..d4a64521c 100644 --- a/src/Common/EfficientElab/Environments.sml +++ b/src/Common/EfficientElab/Environments.sml @@ -92,7 +92,7 @@ structure Environments: ENVIRONMENTS = EqSet.empty | RECORDty(_, SOME tyrow, _) => ExplicitTyVarsTyRow tyrow - | CONty(_, tylist, _) => + | CONty(_, tylist, _, _) => foldl (uncurry EqSet.union) EqSet.empty (map ExplicitTyVarsTy tylist) | FNty(_,ty1,_,ty2) => EqSet.union (ExplicitTyVarsTy ty1) @@ -199,7 +199,7 @@ structure Environments: ENVIRONMENTS = [tyvar] | unguarded_ty(DecGrammar.RECORDty(_,tyrow_opt,_)) = unguarded_opt unguarded_tyrow tyrow_opt - | unguarded_ty(DecGrammar.CONty(_,ty_list,_)) = + | unguarded_ty(DecGrammar.CONty(_,ty_list,_,_)) = foldl (fn (ty, tyvarset) => unguarded_ty ty ++ tyvarset) [] ty_list | unguarded_ty(DecGrammar.FNty(_,ty1,_,ty2)) = @@ -755,14 +755,16 @@ structure Environments: ENVIRONMENTS = (tyname, TypeFcn.from_TyName (TyName.freshTyName {tycon = TyName.tycon tyname, - arity = TyName.arity tyname, equality = true}))) + arity = TyName.arity tyname, + arity_reml = TyName.arity_reml tyname, + equality = true}))) in fun equality_maximising_realisation (TE : TyEnv) : realisation = generate (iterate (tynames_of_nonequality_datatypes TE) TE) end (*local*) fun init' explicittyvars tycon = - let val tyname = TyName.freshTyName {tycon=tycon, arity=List.length explicittyvars, equality=false} + let val tyname = TyName.freshTyName {tycon=tycon, arity=List.length explicittyvars, arity_reml=(0,0), equality=false} val TE = singleton (tycon, TyStr.from_theta_and_VE (TypeFcn.from_TyName tyname, VE.empty)) in (tyname, TE) end @@ -1271,7 +1273,7 @@ structure Environments: ENVIRONMENTS = mk_tystr (TyName.tyName_REF, VE.close refVE_to_TE)) local (* initial TE for unit *) - val theta_unit = TypeFcn.from_TyVars_and_Type ([], Type.Unit) + val theta_unit = TypeFcn.from_TyVars_and_Type ([], nil, Type.Unit) val VE_unit = VE.empty in val TE_unit = TE.singleton (TyCon.tycon_UNIT, @@ -1679,6 +1681,7 @@ structure Environments: ENVIRONMENTS = let val tyname = noSome (TypeFcn.to_TyName theta) "modifyTyStr" val tyname_abs = TyName.freshTyName {tycon=TyName.tycon tyname, arity=TyName.arity tyname, + arity_reml=TyName.arity_reml tyname, equality=false} val phi = singleton(tyname_abs, TypeFcn.from_TyName tyname) val phi_inv = singleton(tyname, TypeFcn.from_TyName tyname_abs) diff --git a/src/Common/EfficientElab/StatObject.sml b/src/Common/EfficientElab/StatObject.sml index d63d091e5..903e03e44 100644 --- a/src/Common/EfficientElab/StatObject.sml +++ b/src/Common/EfficientElab/StatObject.sml @@ -37,6 +37,9 @@ structure StatObject: STATOBJECT = type regvar = RegVar.regvar type regvar_info = ParseInfo.ParseInfo * regvar + val parseInfoDummy : ParseInfo.ParseInfo = + ParseInfo.from_SourceInfo(SourceInfo.from_positions LexBasics.DUMMY LexBasics.DUMMY) + (* * New, more efficient representation of types and substitutions on types * @@ -123,35 +126,36 @@ structure StatObject: STATOBJECT = fun TyVarDesc_lt ({id,...}:TyVarDesc, {id=id2,...}:TyVarDesc) = id < id2 - fun TyVarDesc_id ({id,...}:TyVarDesc) = - id + fun TyVarDesc_id ({id,...}:TyVarDesc) = id fun findType ty = - case #TypeDesc ty - of TYVAR (tl as ref (TY_LINK ty')) => - (case #TypeDesc ty' - of TYVAR (tl' as ref (TY_LINK ty'')) => (tl := TY_LINK ty''; findType ty'') + case #TypeDesc ty of + TYVAR (tl as ref (TY_LINK ty')) => + (case #TypeDesc ty' of + TYVAR (tl' as ref (TY_LINK ty'')) => (tl := TY_LINK ty''; findType ty'') | _ => ty') - | _ => ty + | _ => ty fun findRecType r = - case r - of VARrec {RowVar = rl as ref (REC_LINK {rt=r'}), ...} => - let val r'' = findRecType r' in rl := REC_LINK {rt=r''}; r'' end - | _ => r + case r of + VARrec {RowVar = rl as ref (REC_LINK {rt=r'}), ...} => + let val r'' = findRecType r' + in rl := REC_LINK {rt=r''}; r'' + end + | _ => r (* For prettyprinting and the like it's most convenient to be able * to change a RecType into a (lab, Type) SortedMap with optional * RowVar. *) fun sanitiseRecType r : (Type Lab.Map.map) * ({RowVar : RowVar, level : level ref} option) = - case findRecType r - of NILrec => (Lab.Map.empty, NONE) - | VARrec rv => (Lab.Map.empty, SOME rv) - | ROWrec(lab, tau, r') => - let val (map, rvOpt) = sanitiseRecType r' - in (Lab.Map.add (lab, tau, map), rvOpt) - end + case findRecType r of + NILrec => (Lab.Map.empty, NONE) + | VARrec rv => (Lab.Map.empty, SOME rv) + | ROWrec(lab, tau, r') => + let val (map, rvOpt) = sanitiseRecType r' + in (Lab.Map.add (lab, tau, map), rvOpt) + end datatype eq_significant = EQ_SIGNIFICANT | EQ_NOT_SIGNIFICANT @@ -1644,35 +1648,83 @@ structure StatObject: STATOBJECT = fun instance_with_types (([],[],tau),[]) = tau | instance_with_types ((tvs,regvars,tau),taus) = let val tau = Type.remove_regvars regvars tau - fun instanceType ty = - let val ty = findType ty - val {TypeDesc, level} = ty - in if !level <> Level.GENERIC then ty - else case TypeDesc - of TYVAR (tv as ref (NO_TY_LINK {inst=ref(SOME ty),...})) => ty - | TYVAR (tv as ref (NO_TY_LINK {inst=ref NONE,...})) => - die "instanceType.generic tyvar not instantiated" - | TYVAR (ref (TY_LINK _)) => die "instanceType.findType doesn't work" - | ARROW (ty1,rvi0,ty2,rvi) => Type.mk_Arrow (instanceType ty1, URef.!! rvi0, instanceType ty2, URef.!! rvi) - | RECTYPE (r,rvi) => Type.from_RecType (instanceRecType r,URef.!! rvi) - | CONSTYPE (tys,tyname,rvis) => Type.mk_ConsType (map instanceType tys,tyname, URef.!! rvis) - end - and instanceRecType r = - let val r = findRecType r - in case r - of NILrec => r - | VARrec rho => r - | ROWrec (l,ty,r') => ROWrec (l,instanceType ty,instanceRecType r') - end + fun instanceType ty = + let val ty = findType ty + val {TypeDesc, level} = ty + in if !level <> Level.GENERIC then ty + else case TypeDesc of + TYVAR (tv as ref (NO_TY_LINK {inst=ref(SOME ty),...})) => ty + | TYVAR (tv as ref (NO_TY_LINK {inst=ref NONE,...})) => + die "instanceType.generic tyvar not instantiated" + | TYVAR (ref (TY_LINK _)) => die "instanceType.findType doesn't work" + | ARROW (ty1,rvi0,ty2,rvi) => Type.mk_Arrow (instanceType ty1, URef.!! rvi0, instanceType ty2, URef.!! rvi) + | RECTYPE (r,rvi) => Type.from_RecType (instanceRecType r,URef.!! rvi) + | CONSTYPE (tys,tyname,rvis) => Type.mk_ConsType (map instanceType tys,tyname, URef.!! rvis) + end + and instanceRecType r = + let val r = findRecType r + in case r of + NILrec => r + | VARrec rho => r + | ROWrec (l,ty,r') => ROWrec (l,instanceType ty,instanceRecType r') + end + val tvs_with_types = ListPair.zipEq(tvs, taus) + handle _ => die "instance_with_types.wrong number of types" + val _ = app TyVar.set_instance tvs_with_types + val tau' = instanceType tau + val _ = app TyVar.unset_instance tvs + in tau' + end - val tvs_with_types = BasisCompat.ListPair.zipEq(tvs, taus) - handle BasisCompat.ListPair.UnequalLengths => die "instance_with_types.wrong number of types" + fun instance_with_types_regvars (([],[],tau),[],[]) = tau + | instance_with_types_regvars ((tyvars,[],tau),taus,[]) = instance_with_types((tyvars,nil,tau),taus) + | instance_with_types_regvars ((tvs,regvars,tau),taus,regvars') = + let val regvars_regvars' = + BasisCompat.ListPair.zipEq(regvars, regvars') + handle BasisCompat.ListPair.UnequalLengths => die "instance_with_types.wrong number of regvars'" + fun lookRegvar rv = + let fun look nil = rv + | look ((rv',rv'')::ps) = if RegVar.eq(rv,rv') then rv'' + else look ps + in look regvars_regvars' + end + fun lookRi (p,r) : regvar_info = (p,lookRegvar r) + fun lookRis ris = List.map lookRi ris + fun lookRio NONE = NONE + | lookRio (SOME ri) = SOME (lookRi ri) + fun lookPrso NONE = NONE + | lookPrso (SOME(p,ris)) = SOME(p,lookRis ris) + fun instanceType ty = + let val ty = findType ty + val {TypeDesc, level} = ty + in (*if !level <> Level.GENERIC then ty + else*) case TypeDesc of + TYVAR (tv as ref (NO_TY_LINK {inst=ref(SOME ty),...})) => ty + | TYVAR (tv as ref (NO_TY_LINK {inst=ref NONE,...})) => + die "instanceType.generic tyvar not instantiated" + | TYVAR (ref (TY_LINK _)) => die "instanceType.findType doesn't work" + | ARROW (ty1,rvi0,ty2,rvi) => Type.mk_Arrow (instanceType ty1, lookRio (URef.!! rvi0), + instanceType ty2, lookRio (URef.!! rvi)) + | RECTYPE (r,rvi) => Type.from_RecType (instanceRecType r,lookRio (URef.!! rvi)) + | CONSTYPE (tys,tyname,rvis) => Type.mk_ConsType (map instanceType tys,tyname, lookPrso (URef.!! rvis)) + end + and instanceRecType r = + let val r = findRecType r + in case r of + NILrec => r + | VARrec rho => r + | ROWrec (l,ty,r') => ROWrec (l,instanceType ty,instanceRecType r') + end + + val tvs_types = + BasisCompat.ListPair.zipEq(tvs, taus) + handle BasisCompat.ListPair.UnequalLengths => die "instance_with_types.wrong number of types" + val _ = app TyVar.set_instance tvs_types + val tau' = instanceType tau + val _ = app TyVar.unset_instance tvs + in tau' + end - val _ = app TyVar.set_instance tvs_with_types - val tau' = instanceType tau - val _ = app TyVar.unset_instance tvs - in tau' - end (* instance sigma; instantiate sigma with fresh type variables *) @@ -1700,16 +1752,17 @@ structure StatObject: STATOBJECT = * instantiated variable. The equality function here is also * used to implement equality of type functions. *) - (* explicit region variables are ignored in comparisons (currently!) *) + (* MEMO: explicit region variables are ignored in comparisons (currently!) *) fun eq (([],_,ty1), ([],_,ty2)) = Type.eq(ty1,ty2) - | eq (sigma1 as (tvs1,_,_), sigma2 as (tvs2,_,_)) = - length tvs1 = length tvs2 andalso + | eq (sigma1 as (tvs1,rvs1,_), sigma2 as (tvs2,rvs2,_)) = + length tvs1 = length tvs2 andalso length rvs1 = length rvs2 andalso let fun fresh (tv as ref(NO_TY_LINK tvdesc)) = Type.from_TyVar(TyVar.refresh tv) | fresh _ = die ("eq.fresh: tysch= " ^ string sigma1) val types = map fresh tvs1 - val ty1 = instance_with_types (sigma1, types) - val ty2 = instance_with_types (sigma2, types) + val regvars = map (fn _ => RegVar.mk_Fresh "f") rvs1 + val ty1 = instance_with_types_regvars (sigma1, types, regvars) + val ty2 = instance_with_types_regvars (sigma2, types, regvars) in Type.eq(ty1,ty2) end @@ -1828,87 +1881,121 @@ structure StatObject: STATOBJECT = * bound type variables are maintained explicitly; the length of * this type variable list gives the arity of a type function. *) - datatype TypeFcn = TYPEFCN of {tyvars : TyVar list, tau : Type} + (* For the optional ReML regvars: it is a syntactic restriction that region + * variables appear before effect variables. *) + + datatype TypeFcn = TYPEFCN of {tyvars : TyVar list, regvars: regvar list, tau : Type} structure TypeFcn = struct - fun layout (TYPEFCN {tyvars, tau}) = - let val tau = findType tau - in PP.NODE {start="/\\" ^ TyVar.pr_tyvars tyvars ^ ".", finish="", indent=0, + fun layout (TYPEFCN {tyvars,regvars,tau}) = + let val tau = findType tau + val start = "/\\" ^ TyVar.pr_tyvars tyvars + val start = case regvars of + nil => start + | rvs => start ^ " " ^ String.concatWith "," (map RegVar.pr rvs) + in PP.NODE {start=start ^ ".", finish="", indent=0, childsep=PP.NOSEP, children=[Type.layout tau]} end - fun eq (TYPEFCN {tyvars, tau}, TYPEFCN {tyvars=tyvars', tau=tau'}) = - TypeScheme.eq((tyvars,nil,tau),(tyvars',nil,tau')) + fun eq (TYPEFCN {tyvars, regvars, tau}, TYPEFCN {tyvars=tyvars', regvars=regvars', tau=tau'}) = + TypeScheme.eq((tyvars,regvars,tau),(tyvars',regvars',tau')) + + fun from_TyVars_and_Type (tyvars : TyVar list, regvars: RegVar.regvar list, tau : Type) = + let fun check (effvar:bool) nil = () + | check effvar (r::rs) = + if effvar + then if RegVar.is_effvar r then check effvar rs + else die "from_TyVars_RegVars_and_Type: region variables do not all appear before effect variables" + else check (RegVar.is_effvar r) rs + in check false regvars + ; (Type.generalise {ov=false, imp=true, tau=tau}; + TYPEFCN {tyvars=tyvars, regvars=regvars, tau=tau}) + end - fun from_TyVars_and_Type (tyvars : TyVar list, tau : Type) = - (Type.generalise {ov=false, imp=true, tau=tau}; - TYPEFCN {tyvars=tyvars, tau=tau}) + fun apply (TYPEFCN {tyvars,regvars,tau}, taus : Type list, regvars') : Type = + if length regvars = length regvars' then + TypeScheme.instance_with_types_regvars ((tyvars,regvars,tau),taus,regvars') + else die "TypeFcn.apply.incompatible regvar lists" - fun apply (theta as (TYPEFCN {tyvars, tau}), taus : Type list) : Type = - TypeScheme.instance_with_types ((tyvars,nil,tau),taus) + fun arity (TYPEFCN {tyvars,regvars,tau}) = length tyvars - fun arity (TYPEFCN {tyvars, tau}) = length tyvars + fun arity_reml (TYPEFCN {tyvars,regvars,tau}) = + (length(List.filter (not o RegVar.is_effvar) regvars), + length(List.filter RegVar.is_effvar regvars)) - (* admits_equality: We need only check if the type in an type + (* admits_equality: We need only check if the type in a type * function admits equality because the bound type variables * have already been renamed to admit equality. *) - fun admits_equality (theta as TYPEFCN {tyvars, tau}) : bool = - case Type.make_equality (TypeScheme.instance (tyvars,nil,tau)) - of SOME _ => true - | NONE => false - - fun tynames (TYPEFCN {tyvars, tau}) = Type.tynames tau + fun admits_equality (theta as TYPEFCN {tyvars,regvars,tau}) : bool = + case Type.make_equality (TypeScheme.instance (tyvars,nil,tau)) of + SOME _ => true + | NONE => false - fun grounded (theta : TypeFcn, tynameset : TyName.Set.Set) : bool = - TyName.Set.isEmpty (TyName.Set.difference (tynames theta) tynameset) + fun tynames (TYPEFCN {tyvars,regvars,tau}) = Type.tynames tau fun from_TyName (tyname : TyName) : TypeFcn = - let fun make_list (0,acc) = acc - | make_list (n,acc) = make_list(n-1, TyVar.fresh_normal ()::acc) - val tyvars = make_list (TyName.arity tyname, []) - val _ = Level.push () - val tau = Type.mk_ConsType (map Type.from_TyVar tyvars, tyname, NONE) - val _ = Level.pop () - in from_TyVars_and_Type (tyvars, tau) - end + let val tyvars = List.tabulate(TyName.arity tyname, fn _ => TyVar.fresh_normal ()) + val _ = Level.push () + fun mkFr s = (parseInfoDummy,RegVar.mk_Fresh s) + val regvars = + case TyName.arity_reml tyname of + (0,0) => NONE + | (i,j) => SOME(parseInfoDummy, + List.tabulate(i,fn _ => mkFr "r")@ + List.tabulate(j,fn _ => mkFr "e")) + val tau = Type.mk_ConsType (map Type.from_TyVar tyvars, tyname, regvars) + val _ = Level.pop () + val rvs = case regvars of + NONE => nil + | SOME (_,irvs) => map #2 irvs + in from_TyVars_and_Type (tyvars, rvs, tau) + end - fun to_TyName (TYPEFCN {tyvars, tau}) : TyName option = - case Type.un_ConsType tau - of SOME (taus,t,_) => - let fun check ([],[]) = true - | check (tv::tvs,tau::taus) = - (case Type.to_TyVar tau - of SOME tv' => TyVar.eq (tv,tv') + fun to_TyName (TYPEFCN {tyvars,regvars,tau}) : TyName option = + case Type.un_ConsType tau of + SOME (taus,t,opt) => + let fun check ([],[]) = true + | check (tv::tvs,tau::taus) = + (case Type.to_TyVar tau of + SOME tv' => TyVar.eq (tv,tv') | NONE => false) andalso check(tvs,taus) - | check _ = false - in if check(tyvars,taus) then SOME t - else NONE - end - | _ => NONE + | check _ = false + in if check(tyvars,taus) then + case opt of + SOME (_,ris) => + if ListPair.allEq RegVar.eq (regvars,map #2 ris) + then SOME t + else NONE + | NONE => if List.null regvars then SOME t + else NONE + else NONE + end + | _ => NONE val is_TyName = is_Some o to_TyName - fun pretty_string names (TYPEFCN {tyvars, tau}) = - case tyvars - of [] => {vars="", body=Type.pretty_string names tau} - | [tyvar] => {vars=TyVar.pretty_string names tyvar, - body=Type.pretty_string names tau} - | tyvars => {vars=ListUtils.stringSep "(" ")" ", " (TyVar.pretty_string names) tyvars, - body=Type.pretty_string names tau} - + infix ^^ + fun s ^^ s' = if s = "" then s' else s ^ " " ^ s' + + fun pretty_string names (TYPEFCN {tyvars,regvars,tau}) = + let val body = Type.pretty_string names tau + val vars = + case tyvars of + [] => "" + | [tyvar] => TyVar.pretty_string names tyvar + | tyvars => "(" ^ String.concatWith ", " (map (TyVar.pretty_string names) tyvars) ^ ")" + val vars = case regvars of + nil => vars + | [rv] => vars ^^ "`" ^ RegVar.pr rv + | rvs => vars ^^ "`[" ^ String.concatWith " " (map RegVar.pr rvs) ^ "]" + in {vars=vars,body=body} + end fun pretty_string' names theta = #body (pretty_string names theta) fun match (TYPEFCN{tau,...}, TYPEFCN{tau=tau0,...}) : unit = Type.match(tau,tau0) -(* - val pu = - let fun to (tvs,t) = TYPEFCN {tyvars=tvs,tau=t} - fun from (TYPEFCN {tyvars=tvs,tau=t}) = (tvs,t) - in Pickle.convert (to,from) TypeScheme.pu - end -*) end (*TypeFcn*) @@ -1937,27 +2024,26 @@ structure StatObject: STATOBJECT = * ty. Used by on_Type. *) fun correct_levels_Type ty = - let val ty = findType ty - in if !(#level ty) = Level.GENERIC then () - else - case ty - of {TypeDesc = TYVAR tv, level} => () - | {TypeDesc = ARROW (ty1,_,ty2,_), level} => - level := Int.min (correct_levels_Type ty1, correct_levels_Type ty2) - | {TypeDesc = RECTYPE (r,_), level} => - level := correct_levels_RecType r - | {TypeDesc = CONSTYPE (tys,tyname,_), level} => - level := foldl Int.min Level.NONGENERIC (map correct_levels_Type tys) ; - !(#level ty) - end + let val ty = findType ty + in if !(#level ty) = Level.GENERIC then () + else case ty of + {TypeDesc = TYVAR tv, level} => () + | {TypeDesc = ARROW (ty1,_,ty2,_), level} => + level := Int.min (correct_levels_Type ty1, correct_levels_Type ty2) + | {TypeDesc = RECTYPE (r,_), level} => + level := correct_levels_RecType r + | {TypeDesc = CONSTYPE (tys,tyname,_), level} => + level := foldl Int.min Level.NONGENERIC (map correct_levels_Type tys) ; + !(#level ty) + end and correct_levels_RecType r = - let val r = findRecType r - in case r - of NILrec => Level.NONGENERIC - | VARrec _ => Level.NONGENERIC - | ROWrec (l,ty,r') => Int.min (correct_levels_Type ty, correct_levels_RecType r') - end + let val r = findRecType r + in case r of + NILrec => Level.NONGENERIC + | VARrec _ => Level.NONGENERIC + | ROWrec (l,ty,r') => Int.min (correct_levels_Type ty, correct_levels_RecType r') + end val Id = Realisation_Id @@ -1967,83 +2053,83 @@ structure StatObject: STATOBJECT = fun singleton (t,theta) = Not_Id (TyName.Map.singleton(t,EXPANDED theta)) fun from_T_and_tyname (T, t0) = - if TyName.Set.isEmpty T then Realisation_Id - else Not_Id(TyName.Set.fold (fn t => fn acc => TyName.Map.add(t,TYNAME t0,acc)) TyName.Map.empty T) + if TyName.Set.isEmpty T then Realisation_Id + else Not_Id(TyName.Set.fold (fn t => fn acc => TyName.Map.add(t,TYNAME t0,acc)) TyName.Map.empty T) fun renaming' (T: TyName.Set.Set) : TyName.Set.Set * realisation = - if TyName.Set.isEmpty T then (TyName.Set.empty, Id) - else let val (T', m) : TyName.Set.Set * TypeFcn' TyName.Map.map = - TyName.Set.fold (fn t : TyName => fn (T', m) => - let val t' = TyName.freshTyName {tycon = TyName.tycon t, arity= TyName.arity t, - equality= TyName.equality t} - in (TyName.Set.insert t' T', TyName.Map.add (t, TYNAME t', m)) - end) (TyName.Set.empty, TyName.Map.empty) T - in (T', Not_Id m) - end + if TyName.Set.isEmpty T then (TyName.Set.empty, Id) + else let val (T', m) : TyName.Set.Set * TypeFcn' TyName.Map.map = + TyName.Set.fold (fn t : TyName => fn (T', m) => + let val t' = TyName.freshTyName {tycon = TyName.tycon t, + arity = TyName.arity t, + arity_reml = TyName.arity_reml t, + equality = TyName.equality t} + in (TyName.Set.insert t' T', TyName.Map.add (t, TYNAME t', m)) + end) (TyName.Set.empty, TyName.Map.empty) T + in (T', Not_Id m) + end fun renaming (T: TyName.Set.Set) : realisation = #2 (renaming' T) fun restrict T Realisation_Id = Realisation_Id | restrict T (Not_Id m) = - let val m' = TyName.Set.fold(fn t => fn acc => - case TyName.Map.lookup m t - of SOME theta => TyName.Map.add(t,theta,acc) - | NONE => acc) TyName.Map.empty T - in if TyName.Map.isEmpty m' then Realisation_Id - else Not_Id m' - end + let val m' = TyName.Set.fold(fn t => fn acc => + case TyName.Map.lookup m t of + SOME theta => TyName.Map.add(t,theta,acc) + | NONE => acc) TyName.Map.empty T + in if TyName.Map.isEmpty m' then Realisation_Id + else Not_Id m' + end fun restrict_from T Realisation_Id = Realisation_Id | restrict_from T (Not_Id m) = - let val m' = TyName.Map.Fold(fn ((t, theta), acc) => - if TyName.Set.member t T then acc - else TyName.Map.add(t,theta,acc)) TyName.Map.empty m - in if TyName.Map.isEmpty m' then Realisation_Id - else Not_Id m' - end + let val m' = TyName.Map.Fold(fn ((t, theta), acc) => + if TyName.Set.member t T then acc + else TyName.Map.add(t,theta,acc)) TyName.Map.empty m + in if TyName.Map.isEmpty m' then Realisation_Id + else Not_Id m' + end local exception Inverse in fun inverse Realisation_Id = SOME Realisation_Id | inverse (Not_Id m) = - (SOME(Not_Id(TyName.Map.Fold(fn ((t, theta), acc) => - case theta - of TYNAME t' => - if TyName.Set.member t' (TyName.Set.fromList(TyName.Map.dom acc)) then raise Inverse - else TyName.Map.add(t', TYNAME t, acc) - | EXPANDED theta' => raise Inverse) TyName.Map.empty m)) - handle Inverse => NONE) + (SOME(Not_Id(TyName.Map.Fold(fn ((t, theta), acc) => + case theta of + TYNAME t' => if TyName.Set.member t' (TyName.Set.fromList(TyName.Map.dom acc)) + then raise Inverse + else TyName.Map.add(t', TYNAME t, acc) + | EXPANDED theta' => raise Inverse) TyName.Map.empty m)) + handle Inverse => NONE) end fun on_TyName Realisation_Id t : TypeFcn = TypeFcn.from_TyName t - | on_TyName (Not_Id m) t = (case TyName.Map.lookup m t - of SOME(TYNAME t) => TypeFcn.from_TyName t - | SOME(EXPANDED theta) => theta - | NONE => TypeFcn.from_TyName t) + | on_TyName (Not_Id m) t = (case TyName.Map.lookup m t of + SOME(TYNAME t) => TypeFcn.from_TyName t + | SOME(EXPANDED theta) => theta + | NONE => TypeFcn.from_TyName t) fun on_TyName_set (rea : realisation) (T : TyName.Set.Set) = - if is_Id rea then T else - TyName.Set.fold - (fn t => fn T => - TyName.Set.union (TypeFcn.tynames (on_TyName rea t)) T) - TyName.Set.empty T + if is_Id rea then T else + TyName.Set.fold (fn t => fn T => TyName.Set.union (TypeFcn.tynames (on_TyName rea t)) T) + TyName.Set.empty T fun on_TyName' Realisation_Id t : TypeFcn' = TYNAME t - | on_TyName' (Not_Id m) t = (case TyName.Map.lookup m t - of SOME theta => theta - | NONE => TYNAME t) + | on_TyName' (Not_Id m) t = (case TyName.Map.lookup m t of + SOME theta => theta + | NONE => TYNAME t) fun on_Type Realisation_Id ty = ty | on_Type phi ty = (* NB: keep levels, so that it works for type schemes and type functions as well *) (case findType ty of - {TypeDesc = TYVAR _, level} => ty - | {TypeDesc = RECTYPE (r,rvi), level} => + {TypeDesc = TYVAR _, level} => ty + | {TypeDesc = RECTYPE (r,rvi), level} => {TypeDesc = RECTYPE (Type.RecType.map (on_Type phi) r,rvi), level = ref (!level)} - | {TypeDesc = ARROW(ty1,rvi0,ty2,rvi), level} => + | {TypeDesc = ARROW(ty1,rvi0,ty2,rvi), level} => {TypeDesc = ARROW(on_Type phi ty1, rvi0, on_Type phi ty2, rvi), level = ref (!level)} - | {TypeDesc = CONSTYPE(tylist,t,rvis),level} => + | {TypeDesc = CONSTYPE(tylist,t,rvis),level} => (*definition pg 19. sec. 4.4 Types and Type Functions beta-conversion carried out after substituting in type functions for type names*) @@ -2053,7 +2139,10 @@ structure StatObject: STATOBJECT = {TypeDesc = CONSTYPE (tau_list,t',rvis), level = ref (!level)} | TypeFcn_apply' (EXPANDED theta, tau_list) = (* memo: figure out what to do with rvis - push it down into tau... *) - let val tau = (TypeFcn.apply (theta, tau_list)) + let val rvs = case URef.!! rvis of + SOME (_,rvis) => map #2 rvis + | NONE => nil + val tau = TypeFcn.apply (theta, tau_list, rvs) in correct_levels_Type tau ; tau end @@ -2065,15 +2154,13 @@ structure StatObject: STATOBJECT = fun on_TypeScheme Realisation_Id scheme = scheme | on_TypeScheme phi (sigma as (tyvars,regvars,tau)) = if List.exists TyVar.is_overloaded tyvars then sigma (* type schemes for overloaded identifiers are rigid *) - else let val tau = on_Type phi tau - in (tyvars,regvars,tau) - end + else (tyvars,regvars,on_Type phi tau) fun on_TypeFcn Realisation_Id theta = theta - | on_TypeFcn phi (theta as TYPEFCN {tyvars, tau}) = - TYPEFCN{tyvars=tyvars,tau=on_Type phi tau} (* NOTE: arity of theta should be preserved, which differ - * from the case for type schemes ; mael-2007-11-07 *) - fun on_TypeFcn' Realisation_Id typefcn' = typefcn' + | on_TypeFcn phi (theta as TYPEFCN {tyvars,regvars,tau}) = + TYPEFCN{tyvars=tyvars,regvars=regvars,tau=on_Type phi tau} (* NOTE: arity of theta should be preserved, which differ + * from the case for type schemes ; mael-2007-11-07 *) + fun on_TypeFcn' Realisation_Id theta = theta | on_TypeFcn' phi (TYNAME t) = on_TyName' phi t | on_TypeFcn' phi (EXPANDED theta) = EXPANDED (on_TypeFcn phi theta) @@ -2092,13 +2179,13 @@ structure StatObject: STATOBJECT = fun (Realisation_Id : realisation) oo (phi : realisation) : realisation = phi | phi oo Realisation_Id = phi | (phi1 as Not_Id m1) oo phi2 = - case on_Realisation phi1 phi2 - of Realisation_Id => phi1 - | Not_Id m2 => Not_Id(TyName.Map.plus(m1, m2)) + case on_Realisation phi1 phi2 of + Realisation_Id => phi1 + | Not_Id m2 => Not_Id(TyName.Map.plus(m1, m2)) fun enrich (rea0, (rea,T)) = - TyName.Set.fold (fn t => fn acc => acc andalso - TypeFcn.eq(on_TyName rea0 t, on_TyName rea t)) true T + TyName.Set.fold (fn t => fn acc => acc andalso + TypeFcn.eq(on_TyName rea0 t, on_TyName rea t)) true T fun eq (Realisation_Id, Realisation_Id) = true (* conservative check, thus eq is a bad word for it; * - better now ; mael 2004-04-06 *) @@ -2448,8 +2535,8 @@ structure StatObject: STATOBJECT = end val pu_TypeFcn = - let fun to (tvs,_,t) = TYPEFCN {tyvars=tvs,tau=t} - fun from (TYPEFCN {tyvars=tvs,tau=t}) = (tvs,nil,t) + let fun to (tvs,rvs,t) = TYPEFCN {tyvars=tvs,regvars=rvs,tau=t} + fun from (TYPEFCN {tyvars=tvs,regvars,tau=t}) = (tvs,regvars,t) in Pickle.convert0 (to,from) pu_TypeScheme end diff --git a/src/Common/ElabDec.sml b/src/Common/ElabDec.sml index 6d0785e8c..77c8eb9c2 100644 --- a/src/Common/ElabDec.sml +++ b/src/Common/ElabDec.sml @@ -1156,48 +1156,65 @@ structure ElabDec: ELABDEC = case typbind of (* Type binding *) (*rule 27*) - IG.TYPBIND(i, ExplicitTyVars, tycon, ty, typbind_opt) => + IG.TYPBIND(i, ExplicitTyVars, (ir,regvars), tycon, ty, typbind_opt) => let val _ = Level.push() val (TyVars,C') = C.plus_U'(C, ExplicitTyVars) val tyvarsRepeated = getRepeatedElements (op =) ExplicitTyVars - val tyvarsNotInTyVarList = - List.filter (fn tv => not (ListHacks.member tv ExplicitTyVars)) - (IG.getExplicitTyVarsTy ty) + val regvarsRepeated = getRepeatedElements RegVar.eq regvars + val freeTyvars = + List.filter (fn tv => not (ListHacks.member tv ExplicitTyVars)) + (IG.getExplicitTyVarsTy ty) + val freeRegvars = + List.filter (fn rv => not (List.exists (fn x => RegVar.eq(x,rv)) regvars)) + (IG.getRegVarsTy ty) + + (* region variables must come before effect variables in type bindings *) + fun regVarsOrderInvalid effvar nil = false + | regVarsOrderInvalid effvar (rv::rvs) = + (effvar andalso not (RegVar.is_effvar rv)) + orelse regVarsOrderInvalid (RegVar.is_effvar rv) rvs in case elab_ty(C', ty) of (SOME tau, out_ty) => let val _ = Level.pop() - val typeFcn = TypeFcn.from_TyVars_and_Type (TyVars, tau) + val typeFcn = TypeFcn.from_TyVars_and_Type (TyVars, regvars, tau) val tystr = TyStr.from_theta_and_VE(typeFcn, VE.empty) val (TE, out_typbind_opt) = elab_typbind_opt(C, typbind_opt) in - if not(isEmptyTyVarList(tyvarsNotInTyVarList)) then + if not(isEmptyTyVarList freeTyvars) then (TE, OG.TYPBIND(errorConv(i, ErrorInfo.TYVARS_NOT_IN_TYVARSEQ - (map SyntaxTyVar.pr_tyvar tyvarsNotInTyVarList)), - ExplicitTyVars, tycon, out_ty, out_typbind_opt)) - else - if (EqSet.member tycon (TE.dom TE)) then - (TE.plus (TE.singleton(tycon, tystr), TE), - OG.TYPBIND(repeatedIdsError(i, [ErrorInfo.TYCON_RID tycon]), - ExplicitTyVars, tycon, out_ty, out_typbind_opt)) - else - case tyvarsRepeated - of [] => - (TE.plus (TE.singleton(tycon, tystr), TE), - OG.TYPBIND(okConv i, ExplicitTyVars, tycon, out_ty, out_typbind_opt)) - | _ => - (TE, OG.TYPBIND(repeatedIdsError(i, map ErrorInfo.TYVAR_RID - (map TyVar.from_ExplicitTyVar tyvarsRepeated)), - ExplicitTyVars, tycon, out_ty, out_typbind_opt)) + (map SyntaxTyVar.pr_tyvar freeTyvars)), + ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) + else if not(List.null freeRegvars) then + (TE, OG.TYPBIND(errorConv(i, ErrorInfo.REGVARS_NOT_IN_REGVARSEQ freeRegvars), + ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) + else if (EqSet.member tycon (TE.dom TE)) then + (TE.plus (TE.singleton(tycon, tystr), TE), + OG.TYPBIND(repeatedIdsError(i, [ErrorInfo.TYCON_RID tycon]), + ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) + else if not(List.null tyvarsRepeated) then + (TE, OG.TYPBIND(repeatedIdsError(i, map ErrorInfo.TYVAR_RID + (map TyVar.from_ExplicitTyVar tyvarsRepeated)), + ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) + else if not(List.null regvarsRepeated) then + (TE, OG.TYPBIND(okConv i, ExplicitTyVars, + (repeatedIdsError(ir, map ErrorInfo.REGVAR_RID regvarsRepeated),regvars), + tycon, out_ty, out_typbind_opt)) + else if regVarsOrderInvalid false regvars then + (TE, OG.TYPBIND(errorConv(i, ErrorInfo.REGVARS_INVALID_ORDER regvars), + ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) + else (*ok*) + (TE.plus (TE.singleton(tycon, tystr), TE), + OG.TYPBIND(okConv i, ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) end | (NONE, out_ty) => - let val _ = Level.pop() - val (TE, out_typbind_opt) = elab_typbind_opt(C, typbind_opt) - in (TE, OG.TYPBIND(okConv i, ExplicitTyVars, tycon, out_ty, out_typbind_opt)) - end + let val _ = Level.pop() + val (TE, out_typbind_opt) = elab_typbind_opt(C, typbind_opt) + in (TE, OG.TYPBIND(okConv i, ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) + end end and elab_typbind_opt (C : Context, typbind_opt : IG.typbind option) @@ -1820,36 +1837,44 @@ structure ElabDec: ELABDEC = (* Constructed type *) (*rule 46*) - | IG.CONty(i, ty_list, longtycon) => - let - val res_list = map (fn ty => elab_ty (C, ty)) ty_list + | IG.CONty(i, ty_list, regvars, longtycon) => + let val res_list = map (fn ty => elab_ty (C, ty)) ty_list val tau_opt_list = map #1 res_list val out_ty_list = map #2 res_list fun unopt_list ([],a) = SOME (rev a) | unopt_list (NONE::rest,a) = NONE | unopt_list (SOME tau::rest, a) = unopt_list (rest, tau::a) + val regvars' = map (fn (i,r) => (okConv i,r)) regvars in - case unopt_list (tau_opt_list, []) - of SOME tau_list => + case unopt_list (tau_opt_list, []) of + SOME tau_list => (case C.lookup_longtycon C longtycon of - SOME tystr => - let - val (typeFcn, _) = TyStr.to_theta_and_VE tystr - val expectedArity = TypeFcn.arity typeFcn - val actualArity = length tau_list - in - if expectedArity = actualArity then - (SOME(TypeFcn.apply (typeFcn, tau_list)), - OG.CONty (okConv i, out_ty_list, longtycon)) - else - (NONE, - OG.CONty (errorConv (i, ErrorInfo.WRONG_ARITY - {expected=expectedArity, - actual=actualArity}), - out_ty_list, longtycon)) + SOME tystr => + let val (typeFcn, _) = TyStr.to_theta_and_VE tystr + val expectedArity = TypeFcn.arity typeFcn + val actualArity = length tau_list + val expectedArityReml = TypeFcn.arity_reml typeFcn + val actualArityReml = + (length (List.filter (not o RegVar.is_effvar o #2) regvars), + length (List.filter (RegVar.is_effvar o #2) regvars)) + fun err ei = (NONE, OG.CONty (errorConv (i, ei), out_ty_list, regvars', longtycon)) + in if expectedArity <> actualArity then + err (ErrorInfo.WRONG_ARITY {expected=expectedArity, + actual=actualArity}) + else if #1 expectedArityReml <> #1 actualArityReml then (* ReML: later allow for *) + err (ErrorInfo.REGVARS_WRONG_ARITY_R (* actuals to have 0 arity *) + {expected= #1 expectedArityReml, + actual= #1 actualArityReml}) + else if #2 expectedArityReml <> #2 actualArityReml then + err (ErrorInfo.REGVARS_WRONG_ARITY_E + {expected= #2 expectedArityReml, + actual= #2 actualArityReml}) + else + (SOME(TypeFcn.apply (typeFcn, tau_list, map #2 regvars')), + OG.CONty (okConv i, out_ty_list, regvars', longtycon)) end - | NONE => (NONE, OG.CONty(lookupTyConError(i, longtycon), out_ty_list, longtycon))) - | NONE => (NONE, OG.CONty(okConv i, out_ty_list, longtycon)) + | NONE => (NONE, OG.CONty(lookupTyConError(i, longtycon), out_ty_list, regvars', longtycon))) + | NONE => (NONE, OG.CONty(okConv i, out_ty_list, regvars', longtycon)) end (* Function type *) (*rule 47*) diff --git a/src/Common/ErrorInfo.sml b/src/Common/ErrorInfo.sml index 356162b9e..4ca3a4d99 100644 --- a/src/Common/ErrorInfo.sml +++ b/src/Common/ErrorInfo.sml @@ -107,6 +107,10 @@ structure ErrorInfo: ERROR_INFO = | REGVARS_SCOPED_TWICE of regvar list | REGVAR_TY_UNBOXED | REGVAR_TY_ANNOTATE of string + | REGVARS_NOT_IN_REGVARSEQ of regvar list + | REGVARS_INVALID_ORDER of regvar list + | REGVARS_WRONG_ARITY_R of {expected: int, actual: int} + | REGVARS_WRONG_ARITY_E of {expected: int, actual: int} type Report = Report.Report val line = Report.line @@ -115,12 +119,12 @@ structure ErrorInfo: ERROR_INFO = fun prStrIds strids = (case foldr (fn (strid,str) => - (case str of - "" => StrId.pr_StrId strid - | _ => StrId.pr_StrId strid ^ "." ^ str)) - "" strids of - "" => "" - | x => x ^ ".") + (case str of + "" => StrId.pr_StrId strid + | _ => StrId.pr_StrId strid ^ "." ^ str)) + "" strids of + "" => "" + | x => x ^ ".") (* A lot of the module unification errors carry the same argument types: *) @@ -139,242 +143,242 @@ structure ErrorInfo: ERROR_INFO = fun longtycon_and_tyname_as_string longtycon t = let val s1 = TyCon.pr_LongTyCon longtycon - val s2 = TyName.pr_TyName t - in - s1 ^ (if s1 = s2 then "" else " (=" ^ s2 ^ ")") - end + val s2 = TyName.pr_TyName t + in + s1 ^ (if s1 = s2 then "" else " (=" ^ s2 ^ ")") + end fun report (UNIFICATION (ty1, ty2)) = let - val names = StatObject.newTVNames () - val pr = Type.pretty_string names - in - line "Type mismatch," - // line (" expecting: " ^ pr ty1) - // line (" found: " ^ pr ty2) - end + val names = StatObject.newTVNames () + val pr = Type.pretty_string names + in + line "Type mismatch," + // line (" expecting: " ^ pr ty1) + // line (" found: " ^ pr ty2) + end | report (UNIFICATION_TEXT(text1, ty1, text2, ty2)) = - let - val names = StatObject.newTVNames () - val pr1 = Type.pretty_string names - val pr2 = Type.pretty_string_as_ty names - fun pad n = if n<=0 then [] else " " :: pad (n-1) - fun max(i:int, j:int) = if i>j then i else j - val n = max(size text1, size text2) - in - line "Type clash," - // line(" " ^ text1 ^ ": " ^ concat(pad(n-size text1)) ^ pr1 ty1) - // line(" " ^ text2 ^ ": " ^ concat(pad(n-size text2)) ^ pr2 (ty2,ty1)) - end + let + val names = StatObject.newTVNames () + val pr1 = Type.pretty_string names + val pr2 = Type.pretty_string_as_ty names + fun pad n = if n<=0 then [] else " " :: pad (n-1) + fun max(i:int, j:int) = if i>j then i else j + val n = max(size text1, size text2) + in + line "Type clash," + // line(" " ^ text1 ^ ": " ^ concat(pad(n-size text1)) ^ pr1 ty1) + // line(" " ^ text2 ^ ": " ^ concat(pad(n-size text2)) ^ pr2 (ty2,ty1)) + end | report (UNIFICATION_RANK(ty1,ty2,tv,tn)) = let - val names = StatObject.newTVNames () - val pr = Type.pretty_string names - val pr_tv = TyVar.pretty_string names - in - line ("Type rank error,") - // line (" expecting: " ^ pr ty1) - // line (" found: " ^ pr ty2) - // line ("The generative type " ^ TyName.pr_TyName tn ^ - " is newer than the free type variable " ^ pr_tv tv ^ ".") - end + val names = StatObject.newTVNames () + val pr = Type.pretty_string names + val pr_tv = TyVar.pretty_string names + in + line ("Type rank error,") + // line (" expecting: " ^ pr ty1) + // line (" found: " ^ pr ty2) + // line ("The generative type " ^ TyName.pr_TyName tn ^ + " is newer than the free type variable " ^ pr_tv tv ^ ".") + end | report (LOOKUP_LONGID longid) = - line ("unbound identifier " ^ Ident.pr_longid longid ^ ".") + line ("unbound identifier " ^ Ident.pr_longid longid ^ ".") | report (LOOKUP_LONGTYCON longtycon) = - line ("unbound type constructor " ^ TyCon.pr_LongTyCon longtycon ^ ".") + line ("unbound type constructor " ^ TyCon.pr_LongTyCon longtycon ^ ".") | report (NOTCONSTYPE ty) = - line (Type.string ty ^ "is not a constructed type.") + line (Type.string ty ^ "is not a constructed type.") | report (QUALIFIED_ID longid) = - line ("qualified identifier not allowed.") + line ("qualified identifier not allowed.") | report (UNGUARDED_TYVARS tyvars) = - line ("unguarded type variable" ^ maybe_plural_s tyvars - ^ pp_list TyVar.string tyvars - ^ " in topdec.") + line ("unguarded type variable" ^ maybe_plural_s tyvars + ^ pp_list TyVar.string tyvars + ^ " in topdec.") | report (UNGENERALISABLE_TYVARS ids) = - line ("Provide a type annotation for " - ^ pp_list Ident.pr_id ids ^ ".") + line ("Provide a type annotation for " + ^ pp_list Ident.pr_id ids ^ ".") | report (WRONG_ARITY{expected, actual}) = - line ("Wrong arity (expected " ^ Int.toString expected - ^ ", actual " ^ Int.toString actual ^ ").") + line ("Wrong arity (expected " ^ Int.toString expected + ^ ", actual " ^ Int.toString actual ^ ").") | report (REALSCON_ATPAT) = - line "Real constants are not allowed in patterns." + line "Real constants are not allowed in patterns." | report (FLEX_REC_NOT_RESOLVED) = - line "Overloading not resolved in record containing the\ - \ record wildcard (...)." + line "Overloading not resolved in record containing the\ + \ record wildcard (...)." | report (REPEATED_IDS ids) = - line ("Repeated identifier" ^ maybe_plural_s ids - ^ pp_list pr_repeatedId ids ^ ".") + line ("Repeated identifier" ^ maybe_plural_s ids + ^ pp_list pr_repeatedId ids ^ ".") | report (TYVARS_NOT_IN_TYVARSEQ tyvars) = - line("unbound type variable" ^ maybe_plural_s tyvars - ^ pp_list (fn a => a) tyvars ^ ".") + line("unbound type variable" ^ maybe_plural_s tyvars + ^ pp_list (fn a => a) tyvars ^ ".") | report (DATATYPES_ESCAPE_SCOPE tynames) = - line ("The datatype" ^ maybe_plural_s tynames - ^ pp_list TyName.pr_TyName tynames - ^ (case tynames of - [tyname] => " escapes its scope." - | tynames => " escape their scope.")) + line ("The datatype" ^ maybe_plural_s tynames + ^ pp_list TyName.pr_TyName tynames + ^ (case tynames of + [tyname] => " escapes its scope." + | tynames => " escape their scope.")) | report (TYVARS_SCOPED_TWICE tyvars) = - line ("The scope of the type variable" - ^ maybe_plural_s tyvars - ^ pp_list TyVar.string tyvars - ^ " is bigger than this val declaration.") + line ("The scope of the type variable" + ^ maybe_plural_s tyvars + ^ pp_list TyVar.string tyvars + ^ " is bigger than this val declaration.") | report (REBINDING_TRUE_NIL_ETC ids) = - line ("You may not rebind `true', `false', `nil', `::', or `ref'.") + line ("You may not rebind `true', `false', `nil', `::', or `ref'.") | report REBINDING_IT = - line ("You may not rebind `it' as a constructor.") + line ("You may not rebind `it' as a constructor.") | report (SPECIFYING_TRUE_NIL_ETC ids) = - line ("You may not specify `true', `false', `nil', `::', or `ref'.") + line ("You may not specify `true', `false', `nil', `::', or `ref'.") | report SPECIFYING_IT = - line ("You may not specify `it' as a constructor.") + line ("You may not specify `it' as a constructor.") | report (LOOKUP_SIGID sigid) = - line ("unbound signature identifier " ^ SigId.pr_SigId sigid ^ ".") + line ("unbound signature identifier " ^ SigId.pr_SigId sigid ^ ".") | report (LOOKUP_LONGSTRID longstrid) = - line ("unbound structure identifier " - ^ StrId.pr_LongStrId longstrid ^ ".") + line ("unbound structure identifier " + ^ StrId.pr_LongStrId longstrid ^ ".") | report (LOOKUP_FUNID funid) = - line ("unbound functor identifier " ^ FunId.pr_FunId funid ^ ".") + line ("unbound functor identifier " ^ FunId.pr_FunId funid ^ ".") | report (EXDESC_SIDECONDITION) = - line "Type variables not allowed in type expression in exception description" + line "Type variables not allowed in type expression in exception description" | report (SHARING_TYPE_NOT_TYNAME (longtycon, theta)) = - line (TyCon.pr_LongTyCon longtycon - ^ " is " - ^ TypeFcn.pretty_string' (StatObject.newTVNames ()) theta - ^ ", so you cannot share it with anything.") + line (TyCon.pr_LongTyCon longtycon + ^ " is " + ^ TypeFcn.pretty_string' (StatObject.newTVNames ()) theta + ^ ", so you cannot share it with anything.") | report (SHARING_TYPE_RIGID (longtycon, t)) = - line (longtycon_and_tyname_as_string longtycon t - ^ " is defined before the preceding specification,") - // line "so you cannot share it here." + line (longtycon_and_tyname_as_string longtycon t + ^ " is defined before the preceding specification,") + // line "so you cannot share it here." | report (SHARING_TYPE_ARITY tynames) = - line ("You cannot share " - ^ pp_list (quote o TyName.pr_TyName) tynames - ^ " because their arities are different.") + line ("You cannot share " + ^ pp_list (quote o TyName.pr_TyName) tynames + ^ " because their arities are different.") | report (WHERE_TYPE_NOT_WELLFORMED (longtycon, t, tau)) = - line (longtycon_and_tyname_as_string longtycon t - ^ " is bound to a datatype; it cannot also be " - ^ Type.pretty_string (StatObject.newTVNames ()) tau ^ ".") + line (longtycon_and_tyname_as_string longtycon t + ^ " is bound to a datatype; it cannot also be " + ^ Type.pretty_string (StatObject.newTVNames ()) tau ^ ".") | report (WHERE_TYPE_EQTYPE (longtycon, t, tau)) = - line (longtycon_and_tyname_as_string longtycon t - ^ " must be an eqtype, but " - ^ Type.pretty_string (StatObject.newTVNames ()) tau - ^ " does not admit equality.") + line (longtycon_and_tyname_as_string longtycon t + ^ " must be an eqtype, but " + ^ Type.pretty_string (StatObject.newTVNames ()) tau + ^ " does not admit equality.") | report (WHERE_TYPE_RIGID (longtycon, t)) = - line (longtycon_and_tyname_as_string longtycon t - ^ " is also specified outside this signature,") - // line "so you cannot define it here." + line (longtycon_and_tyname_as_string longtycon t + ^ " is also specified outside this signature,") + // line "so you cannot define it here." | report (WHERE_TYPE_NOT_TYNAME (longtycon, theta, tau)) = - let val TVNames = StatObject.newTVNames () in - line (TyCon.pr_LongTyCon longtycon - ^ " is " - ^ TypeFcn.pretty_string' TVNames theta - ^ ", so it cannot be " - ^ Type.pretty_string TVNames tau ^ ".") - end + let val TVNames = StatObject.newTVNames () in + line (TyCon.pr_LongTyCon longtycon + ^ " is " + ^ TypeFcn.pretty_string' TVNames theta + ^ ", so it cannot be " + ^ Type.pretty_string TVNames tau ^ ".") + end | report (WHERE_TYPE_ARITY (tyvars, (longtycon, tyname))) = - line ("Does " ^ longtycon_and_tyname_as_string longtycon tyname - ^ " have " ^ Int.toString (TyName.arity tyname) - ^ " or " ^ Int.toString (length tyvars) - ^ " arguments?") + line ("Does " ^ longtycon_and_tyname_as_string longtycon tyname + ^ " have " ^ Int.toString (TyName.arity tyname) + ^ " or " ^ Int.toString (length tyvars) + ^ " arguments?") (* Signature Matching Errors *) | report (SIGMATCH_ERROR sigmatcherror) = - let open ModuleStatObject - in case sigmatcherror - of MISSINGSTR longstrid => line ("Missing structure: " ^ StrId.pr_LongStrId longstrid ^ ".") - - | MISSINGTYPE longtycon => line ("Missing type: " ^ TyCon.pr_LongTyCon longtycon ^ ".") - - | S_CONFLICTINGARITY(longtycon, _) => line ("S/Conflicting arity: " ^ TyCon.pr_LongTyCon longtycon ^ ".") - - | CONFLICTINGEQUALITY(longtycon, _) => line ("Conflicting equality attributes: " - ^ TyCon.pr_LongTyCon longtycon ^ ".") - - | MISSINGVAR (strids, id) => line ("Missing variable: " ^ prStrIds strids - ^ Ident.pr_id id ^ ".") - - | MISSINGEXC(strids, id) => line ("Error in signature matching: the exception `" ^ prStrIds strids - ^ Ident.pr_id id ^ "' is specified,") - // line("but absent from the structure.") - - | S_RIGIDTYCLASH longtycon => line ("Rigid type clash for: " ^ TyCon.pr_LongTyCon longtycon ^ ".") - - | S_CONFLICTING_DOMCE longtycon => - line ("Error in signature matching involving datatype `" - ^ TyCon.pr_LongTyCon longtycon ^ "'") - // line ("(The value environment specified in the signature") - // line (" clashes with the value environment in the structure.)") - - | NOTYENRICHMENT{qualid=(strids, id),str_sigma,str_vce,sig_sigma,sig_vce} => - line ("Error in signature matching:") - // line ("the type specified in the signature does not enrich") - // line ("the type inferred in the structure;") - // line ("Structure declares:") - // line (str_vce ^ " " ^ prStrIds strids ^ Ident.pr_id id ^ " :") - // line (" " ^ StringTree_to_string(StatObject.TypeScheme.layout str_sigma)) - // line ("Signature specifies:") - // line (sig_vce ^ " " ^ prStrIds strids ^ Ident.pr_id id ^ " :") - // line (" " ^ StringTree_to_string(StatObject.TypeScheme.layout sig_sigma) ^ ".") - - | EXCNOTEQUAL(strids, id, (ty1, ty2)) => - line("Error in signature matching:") - // line("specified and declared type for exception `" - ^ prStrIds strids ^ Ident.pr_id id ^"' differ;") - // line(" declared type: " ^ Type.string ty1) - // line(" specified type: " ^ Type.string ty2) - end + let open ModuleStatObject + in case sigmatcherror + of MISSINGSTR longstrid => line ("Missing structure: " ^ StrId.pr_LongStrId longstrid ^ ".") + + | MISSINGTYPE longtycon => line ("Missing type: " ^ TyCon.pr_LongTyCon longtycon ^ ".") + + | S_CONFLICTINGARITY(longtycon, _) => line ("S/Conflicting arity: " ^ TyCon.pr_LongTyCon longtycon ^ ".") + + | CONFLICTINGEQUALITY(longtycon, _) => line ("Conflicting equality attributes: " + ^ TyCon.pr_LongTyCon longtycon ^ ".") + + | MISSINGVAR (strids, id) => line ("Missing variable: " ^ prStrIds strids + ^ Ident.pr_id id ^ ".") + + | MISSINGEXC(strids, id) => line ("Error in signature matching: the exception `" ^ prStrIds strids + ^ Ident.pr_id id ^ "' is specified,") + // line("but absent from the structure.") + + | S_RIGIDTYCLASH longtycon => line ("Rigid type clash for: " ^ TyCon.pr_LongTyCon longtycon ^ ".") + + | S_CONFLICTING_DOMCE longtycon => + line ("Error in signature matching involving datatype `" + ^ TyCon.pr_LongTyCon longtycon ^ "'") + // line ("(The value environment specified in the signature") + // line (" clashes with the value environment in the structure.)") + + | NOTYENRICHMENT{qualid=(strids, id),str_sigma,str_vce,sig_sigma,sig_vce} => + line ("Error in signature matching:") + // line ("the type specified in the signature does not enrich") + // line ("the type inferred in the structure;") + // line ("Structure declares:") + // line (str_vce ^ " " ^ prStrIds strids ^ Ident.pr_id id ^ " :") + // line (" " ^ StringTree_to_string(StatObject.TypeScheme.layout str_sigma)) + // line ("Signature specifies:") + // line (sig_vce ^ " " ^ prStrIds strids ^ Ident.pr_id id ^ " :") + // line (" " ^ StringTree_to_string(StatObject.TypeScheme.layout sig_sigma) ^ ".") + + | EXCNOTEQUAL(strids, id, (ty1, ty2)) => + line("Error in signature matching:") + // line("specified and declared type for exception `" + ^ prStrIds strids ^ Ident.pr_id id ^"' differ;") + // line(" declared type: " ^ Type.string ty1) + // line(" specified type: " ^ Type.string ty2) + end | report (CYCLE longstrid) = - line ("Cyclic sharing specification; cyclic structure path: " - ^ StrId.pr_LongStrId longstrid ^ ".") + line ("Cyclic sharing specification; cyclic structure path: " + ^ StrId.pr_LongStrId longstrid ^ ".") | report (U_RIGIDTYCLASH args) = - line ("Rigid type clash: " ^ pr_UnifyArgs args) + line ("Rigid type clash: " ^ pr_UnifyArgs args) | report (TYPESTRILLFORMEDNESS args) = - line ("Ill-formed type structure: " ^ pr_UnifyArgs args) + line ("Ill-formed type structure: " ^ pr_UnifyArgs args) | report (U_CONFLICTING_DOMCE args) = - line ("Conflicting CE domains: " ^ pr_UnifyArgs args) + line ("Conflicting CE domains: " ^ pr_UnifyArgs args) | report (U_CONFLICTINGARITY args) = - line ("U/Conflicting arity: " ^ pr_UnifyArgs args) + line ("U/Conflicting arity: " ^ pr_UnifyArgs args) | report (RIGIDTYFUNEQERROR args) = - line ("Equality attribute differs: " ^ pr_UnifyArgs args) + line ("Equality attribute differs: " ^ pr_UnifyArgs args) | report REGVARS_IDONLY = line "Only functions can be parameterised over regions" @@ -388,74 +392,94 @@ structure ErrorInfo: ERROR_INFO = | report (REGVAR_TY_ANNOTATE msg) = line ("Type " ^ msg ^ " cannot be annotated with regions") + | report (REGVARS_NOT_IN_REGVARSEQ regvars) = + line("Unbound explicit region or effect variable" ^ maybe_plural_s regvars + ^ pp_list RegVar.pr regvars ^ ".") + + | report (REGVARS_INVALID_ORDER regvars) = + line("Region variables must occur before effect variables in type parameters: " + ^ pp_list RegVar.pr regvars ^ ".") + + | report (REGVARS_WRONG_ARITY_R{expected, actual}) = + line ("Wrong region variable arity (expected " ^ Int.toString expected + ^ ", actual " ^ Int.toString actual ^ ").") + + | report (REGVARS_WRONG_ARITY_E{expected, actual}) = + line ("Wrong effect variable arity (expected " ^ Int.toString expected + ^ ", actual " ^ Int.toString actual ^ ").") + structure ErrorCode = struct - type ErrorCode = string and ErrorInfo = ErrorInfo - - fun from_ErrorInfo (ei: ErrorInfo) : ErrorCode = - case ei - of UNIFICATION _ => "UNIFICATION" - | UNIFICATION_TEXT _ => "UNIFICATION_TEXT" - | UNIFICATION_RANK _ => "UNIFICATION_RANK" - | LOOKUP_LONGID _ => "LOOKUP_LONGID" - | LOOKUP_LONGTYCON _ => "LOOKUP_LONGTYCON" - | NOTCONSTYPE _ => "NOTCONSTYPE" - | QUALIFIED_ID _ => "QUALIFIED_ID" - | UNGUARDED_TYVARS _ => "UNGUARDED_TYVARS" - | UNGENERALISABLE_TYVARS _ => "UNGENERALISABLE_TYVARS" - | REALSCON_ATPAT => "REALSCON_ATPAT" - | WRONG_ARITY _ => "WRONG_ARITY" - | FLEX_REC_NOT_RESOLVED => "FLEX_REC_NOT_RESOLVED" - | REPEATED_IDS _ => "REPEATED_IDS" - | TYVARS_NOT_IN_TYVARSEQ _ => "TYVARS_NOT_IN_TYVARSEQ" - | DATATYPES_ESCAPE_SCOPE _ => "DATATYPES_ESCAPE_SCOPE" - | TYVARS_SCOPED_TWICE _ => "TYVARS_SCOPED_TWICE" - | REBINDING_TRUE_NIL_ETC _ => "REBINDING_TRUE_NIL_ETC" - | REBINDING_IT => "REBINDING_IT" - | SPECIFYING_TRUE_NIL_ETC _ => "SPECIFYING_TRUE_NIL_ETC" - | SPECIFYING_IT => "SPECIFYING_IT" - | LOOKUP_SIGID _ => "LOOKUP_SIGID" - | LOOKUP_LONGSTRID _ => "LOOKUP_LONGSTRID" - | LOOKUP_FUNID _ => "LOOKUP_FUNID" - | EXDESC_SIDECONDITION => "EXDESC_SIDECONDITION" - | SHARING_TYPE_NOT_TYNAME _ => "SHARING_TYPE_NOT_TYNAME" - | SHARING_TYPE_RIGID _ => "SHARING_TYPE_RIGID" - | SHARING_TYPE_ARITY _ => "SHARING_TYPE_ARITY" - | WHERE_TYPE_NOT_WELLFORMED _ => "WHERE_TYPE_NOT_WELLFORMED" - | WHERE_TYPE_EQTYPE _ => "WHERE_TYPE_EQTYPE" - | WHERE_TYPE_RIGID _ => "WHERE_TYPE_RIGID" - | WHERE_TYPE_NOT_TYNAME _ => "WHERE_TYPE_NOT_TYNAME" - | WHERE_TYPE_ARITY _ => "WHERE_TYPE_ARITY" - | SIGMATCH_ERROR sigmatcherror => - let open ModuleStatObject - in case sigmatcherror - of MISSINGSTR _ => "MISSINGSTR" - | MISSINGTYPE _ => "MISSINGTYPE" - | S_CONFLICTINGARITY _ => "S_CONFLICTINGARITY" - | CONFLICTINGEQUALITY _ => "CONFLICTINGEQUALITY" - | MISSINGVAR _ => "MISSINGVAR" - | MISSINGEXC _ => "MISSINGEXC" - | S_RIGIDTYCLASH _ => "S_RIGIDTYCLASH" - | S_CONFLICTING_DOMCE _ => "S_CONFLICTING_DOMCE" - | NOTYENRICHMENT _ => "NOTYENRICHMENT" - | EXCNOTEQUAL _ => "EXCNOTEQUAL" - end - | CYCLE _ => "CYCLE" - | U_RIGIDTYCLASH _ => "U_RIGIDTYCLASH" - | TYPESTRILLFORMEDNESS _ => "TYPESTRILLFORMEDNESS" - | U_CONFLICTING_DOMCE _ => "U_CONFLICTING_DOMCE" - | U_CONFLICTINGARITY _ => "U_CONFLICTINGARITY" - | RIGIDTYFUNEQERROR _ => "RIGIDTYFUNEQERROR" + type ErrorCode = string and ErrorInfo = ErrorInfo + + fun from_ErrorInfo (ei: ErrorInfo) : ErrorCode = + case ei + of UNIFICATION _ => "UNIFICATION" + | UNIFICATION_TEXT _ => "UNIFICATION_TEXT" + | UNIFICATION_RANK _ => "UNIFICATION_RANK" + | LOOKUP_LONGID _ => "LOOKUP_LONGID" + | LOOKUP_LONGTYCON _ => "LOOKUP_LONGTYCON" + | NOTCONSTYPE _ => "NOTCONSTYPE" + | QUALIFIED_ID _ => "QUALIFIED_ID" + | UNGUARDED_TYVARS _ => "UNGUARDED_TYVARS" + | UNGENERALISABLE_TYVARS _ => "UNGENERALISABLE_TYVARS" + | REALSCON_ATPAT => "REALSCON_ATPAT" + | WRONG_ARITY _ => "WRONG_ARITY" + | FLEX_REC_NOT_RESOLVED => "FLEX_REC_NOT_RESOLVED" + | REPEATED_IDS _ => "REPEATED_IDS" + | TYVARS_NOT_IN_TYVARSEQ _ => "TYVARS_NOT_IN_TYVARSEQ" + | DATATYPES_ESCAPE_SCOPE _ => "DATATYPES_ESCAPE_SCOPE" + | TYVARS_SCOPED_TWICE _ => "TYVARS_SCOPED_TWICE" + | REBINDING_TRUE_NIL_ETC _ => "REBINDING_TRUE_NIL_ETC" + | REBINDING_IT => "REBINDING_IT" + | SPECIFYING_TRUE_NIL_ETC _ => "SPECIFYING_TRUE_NIL_ETC" + | SPECIFYING_IT => "SPECIFYING_IT" + | LOOKUP_SIGID _ => "LOOKUP_SIGID" + | LOOKUP_LONGSTRID _ => "LOOKUP_LONGSTRID" + | LOOKUP_FUNID _ => "LOOKUP_FUNID" + | EXDESC_SIDECONDITION => "EXDESC_SIDECONDITION" + | SHARING_TYPE_NOT_TYNAME _ => "SHARING_TYPE_NOT_TYNAME" + | SHARING_TYPE_RIGID _ => "SHARING_TYPE_RIGID" + | SHARING_TYPE_ARITY _ => "SHARING_TYPE_ARITY" + | WHERE_TYPE_NOT_WELLFORMED _ => "WHERE_TYPE_NOT_WELLFORMED" + | WHERE_TYPE_EQTYPE _ => "WHERE_TYPE_EQTYPE" + | WHERE_TYPE_RIGID _ => "WHERE_TYPE_RIGID" + | WHERE_TYPE_NOT_TYNAME _ => "WHERE_TYPE_NOT_TYNAME" + | WHERE_TYPE_ARITY _ => "WHERE_TYPE_ARITY" + | SIGMATCH_ERROR sigmatcherror => + let open ModuleStatObject + in case sigmatcherror + of MISSINGSTR _ => "MISSINGSTR" + | MISSINGTYPE _ => "MISSINGTYPE" + | S_CONFLICTINGARITY _ => "S_CONFLICTINGARITY" + | CONFLICTINGEQUALITY _ => "CONFLICTINGEQUALITY" + | MISSINGVAR _ => "MISSINGVAR" + | MISSINGEXC _ => "MISSINGEXC" + | S_RIGIDTYCLASH _ => "S_RIGIDTYCLASH" + | S_CONFLICTING_DOMCE _ => "S_CONFLICTING_DOMCE" + | NOTYENRICHMENT _ => "NOTYENRICHMENT" + | EXCNOTEQUAL _ => "EXCNOTEQUAL" + end + | CYCLE _ => "CYCLE" + | U_RIGIDTYCLASH _ => "U_RIGIDTYCLASH" + | TYPESTRILLFORMEDNESS _ => "TYPESTRILLFORMEDNESS" + | U_CONFLICTING_DOMCE _ => "U_CONFLICTING_DOMCE" + | U_CONFLICTINGARITY _ => "U_CONFLICTINGARITY" + | RIGIDTYFUNEQERROR _ => "RIGIDTYFUNEQERROR" | REGVARS_IDONLY => "REGVARS_IDONLY" | REGVARS_SCOPED_TWICE _ => "REGVARS_SCOPED_TWICE" | REGVAR_TY_UNBOXED => "REGVAR_TY_UNBOXED" | REGVAR_TY_ANNOTATE _ => "REGVAR_TY_ANNOTATE" + | REGVARS_NOT_IN_REGVARSEQ _ => "REGVARS_NOT_IN_REGVARSEQ" + | REGVARS_INVALID_ORDER _ => "REGVARS_INVALID_ORDER" + | REGVARS_WRONG_ARITY_R _ => "REGVARS_WRONG_ARITY_R" + | REGVARS_WRONG_ARITY_E _ => "REGVARS_WRONG_ARITY_E" - val error_code_parse = "PARSE" + val error_code_parse = "PARSE" val error_code_eof = "EOF" - fun eq (ec1 : ErrorCode, ec2: ErrorCode): bool = ec1=ec2 - fun pr (ec: ErrorCode) :string = ("ERR#" ^ ec) + fun eq (ec1 : ErrorCode, ec2: ErrorCode): bool = ec1=ec2 + fun pr (ec: ErrorCode) :string = ("ERR#" ^ ec) end - end; + end diff --git a/src/Common/ErrorTraverse.sml b/src/Common/ErrorTraverse.sml index 703fb9ce4..ae25666c0 100644 --- a/src/Common/ErrorTraverse.sml +++ b/src/Common/ErrorTraverse.sml @@ -252,8 +252,8 @@ structure ErrorTraverse : ERROR_TRAVERSE = and walk_Typbind typbind = case typbind - of TYPBIND(i, _, _, ty, typbind_opt) => - check i // walk_Ty ty // walk_opt walk_Typbind typbind_opt + of TYPBIND(i, _, (ir,_), _, ty, typbind_opt) => + check i // check ir // walk_Ty ty // walk_opt walk_Typbind typbind_opt and walk_Datbind datbind = case datbind @@ -379,8 +379,9 @@ structure ErrorTraverse : ERROR_TRAVERSE = | RECORDty(i, tyrow_opt, SOME(i2,_)) => check i // walk_opt walk_Tyrow tyrow_opt // check i2 - | CONty(i, tys, _) => - check i // List.foldr (fn (a,b) => walk_Ty a // b) ok tys + | CONty(i, tys, regvars, _) => + check i // List.foldr (fn (a,b) => walk_Ty a // b) ok tys // + walk_rvs regvars | FNty(i, ty1, rvopt, ty2) => check i // walk_Ty ty1 // walk_Ty ty2 // walk_rvopt rvopt @@ -395,13 +396,15 @@ structure ErrorTraverse : ERROR_TRAVERSE = | walk_rvopt (SOME(i,_)) = check i and walk_rvopts NONE = Report.null - | walk_rvopts (SOME(i,xs)) = List.foldl (fn ((i,_),acc) => check i // acc) (check i) xs + | walk_rvopts (SOME(i,xs)) = check i // walk_rvs xs - and walk_Tyrow tyrow = - case tyrow - of TYROW(i, _, ty, tyrow_opt) => - check i // walk_Ty ty // walk_opt walk_Tyrow tyrow_opt + and walk_rvs rvs = + List.foldl (fn ((i,_),a) => check i // a) ok rvs + and walk_Tyrow tyrow = + case tyrow of + TYROW(i, _, ty, tyrow_opt) => + check i // walk_Ty ty // walk_opt walk_Tyrow tyrow_opt type Report = Report.Report diff --git a/src/Common/STATOBJECT.sml b/src/Common/STATOBJECT.sml index ec599644b..acfb56ff6 100644 --- a/src/Common/STATOBJECT.sml +++ b/src/Common/STATOBJECT.sml @@ -236,11 +236,11 @@ signature STATOBJECT = structure TypeFcn : sig val eq : TypeFcn * TypeFcn -> bool - val from_TyVars_and_Type : TyVar list * Type -> TypeFcn - val apply : TypeFcn * Type list -> Type + val from_TyVars_and_Type : TyVar list * RegVar.regvar list * Type -> TypeFcn + val apply : TypeFcn * Type list * RegVar.regvar list -> Type val arity : TypeFcn -> int + val arity_reml : TypeFcn -> int * int val admits_equality : TypeFcn -> bool - val grounded : TypeFcn * TyName.Set.Set -> bool val from_TyName : TyName -> TypeFcn val to_TyName : TypeFcn -> TyName option val is_TyName : TypeFcn -> bool diff --git a/src/Common/TYNAME.sig b/src/Common/TYNAME.sig index af4196fe6..32c819002 100644 --- a/src/Common/TYNAME.sig +++ b/src/Common/TYNAME.sig @@ -30,7 +30,7 @@ signature TYNAME = type TyName type tycon = TyCon.tycon - val freshTyName : {tycon : tycon, arity : int, equality : bool} -> TyName + val freshTyName : {tycon : tycon, arity : int, arity_reml : int*int, equality : bool} -> TyName val pr_TyName : TyName -> string val pr_TyName' : TyName -> string val pr_TyName_repl : TyName -> string (* for type-index value printing in the REPL, @@ -38,9 +38,10 @@ signature TYNAME = * their internal id... *) val eq : TyName * TyName -> bool val arity : TyName -> int + val arity_reml : TyName -> int*int (* region vars, effect vars *) val equality : TyName -> bool val tycon : TyName -> tycon - val id : TyName -> int * string (* the string is the base (i.e., the defining program unit) *) + val id : TyName -> int * string (* the string is the base (i.e., the defining program unit) *) (* Names *) type name = Name.name diff --git a/src/Common/TyName.sml b/src/Common/TyName.sml index 790ff57be..0e5de492f 100644 --- a/src/Common/TyName.sml +++ b/src/Common/TyName.sml @@ -29,6 +29,7 @@ structure TyName :> TYNAME = type TyName = {tycon: tycon, name: name, arity: int, + arity_reml: int*int, rank: rank ref, equality: bool, boxity: boxity ref} @@ -61,18 +62,20 @@ structure TyName :> TYNAME = end end - fun fresh boxity {tycon: tycon, arity: int, equality: bool} = + fun fresh boxity {tycon: tycon, arity: int, arity_reml: int*int, equality: bool} = let val name = Name.new() - in (* if tycon = TyCon.tycon_EXN then print ("generating fresh type name exn(" ^ - Int.toString(Name.key name) ^ ")\n") else (); *) - {tycon=tycon, name=name, rank=Rank.new(), arity=arity, - equality=equality, boxity=ref boxity} - end + in (* if tycon = TyCon.tycon_EXN then print ("generating fresh type name exn(" ^ + Int.toString(Name.key name) ^ ")\n") else (); *) + {tycon=tycon, name=name, rank=Rank.new(), arity=arity, arity_reml=arity_reml, + equality=equality, boxity=ref boxity} + end fun freshTyName r = fresh BOXED r fun arity ({arity, ...} : TyName) : int = arity + fun arity_reml ({arity_reml, ...} : TyName) : int*int = arity_reml + fun equality ({equality, ...} : TyName) : bool = equality fun tycon ({tycon, ...} : TyName) : tycon = tycon @@ -95,8 +98,8 @@ structure TyName :> TYNAME = local val bucket = ref nil - fun predef b r = - let val tn = fresh b r + fun predef b {tycon,arity,equality} = + let val tn = fresh b {tycon=tycon,arity=arity,arity_reml=(0,0),equality=equality} in bucket := tn :: !bucket ; tn end @@ -220,14 +223,14 @@ structure TyName :> TYNAME = val pu = Pickle.hashConsEq eq (Pickle.register "TyName" tynamesPredefined - let fun to ((t,n,a),r,e,b) : TyName = - {tycon=t, name=n, arity=a, rank=r, + let fun to ((t,n,a,ar),r,e,b) : TyName = + {tycon=t, name=n, arity=a, arity_reml=ar, rank=r, equality=e, boxity=b} - fun from ({tycon=t, name=n, arity=a, rank=r, - equality=e, boxity=b} : TyName) = ((t,n,a),r,e,b) + fun from ({tycon=t, name=n, arity=a, arity_reml=ar, rank=r, + equality=e, boxity=b} : TyName) = ((t,n,a,ar),r,e,b) in Pickle.newHash (#1 o Name.key o name) (Pickle.convert (to,from) - (Pickle.tup4Gen0(Pickle.tup3Gen0(TyCon.pu,Name.pu,Pickle.int), + (Pickle.tup4Gen0(Pickle.tup4Gen0(TyCon.pu,Name.pu,Pickle.int,Pickle.pairGen(Pickle.int,Pickle.int)), Pickle.refOneGen Pickle.int,Pickle.bool,Pickle.refOneGen pu_boxity))) end) diff --git a/src/Compiler/Lambda/CompileDec.sml b/src/Compiler/Lambda/CompileDec.sml index b60b99fa8..725623050 100644 --- a/src/Compiler/Lambda/CompileDec.sml +++ b/src/Compiler/Lambda/CompileDec.sml @@ -1657,7 +1657,7 @@ in TYVARty _ => nil | RECORDty (_, SOME tr, _) => constraintsTyRow lvopt tr | RECORDty (_, NONE, _) => nil - | CONty (_, ts, _) => List.concat (map (constraintsTy lvopt) ts) + | CONty (_, ts, _, _) => List.concat (map (constraintsTy lvopt) ts) | FNty (_,t1,_,t2) => constraintsTy lvopt t1 @ constraintsTy lvopt t2 | PARty (_, t, _) => constraintsTy lvopt t | WITHty (_, t, c) => compileConstraint lvopt c :: constraintsTy lvopt t diff --git a/src/Manager/FreeIds.sml b/src/Manager/FreeIds.sml index ff81db108..332389c9c 100644 --- a/src/Manager/FreeIds.sml +++ b/src/Manager/FreeIds.sml @@ -253,7 +253,7 @@ structure FreeIds: FREE_IDS = and free_valbind_opt' I NONE = () | free_valbind_opt' I (SOME valbind) = free_valbind' I valbind - and free_typbind I (TYPBIND(_,_,tycon,ty,typbind_opt)) : ids = + and free_typbind I (TYPBIND(_,_,_,tycon,ty,typbind_opt)) : ids = (free_ty I ty; add_tycon(tycon,empty_ids) ++ free_typbind_opt I typbind_opt) and free_typbind_opt I NONE = empty_ids | free_typbind_opt I (SOME typbind) = free_typbind I typbind @@ -312,7 +312,7 @@ structure FreeIds: FREE_IDS = and free_ty I = fn TYVARty _ => () | RECORDty(_,tyrow_opt,_) => free_tyrow_opt I tyrow_opt - | CONty(_,tys,longtycon) => (List.app (free_ty I) tys; use_longtycon(I,longtycon)) + | CONty(_,tys,_,longtycon) => (List.app (free_ty I) tys; use_longtycon(I,longtycon)) | FNty(_,ty1,_,ty2) => (free_ty I ty1; free_ty I ty2) | PARty(_,ty,_) => free_ty I ty | WITHty(_,ty,_) => free_ty I ty diff --git a/src/Manager/OpacityElim.sml b/src/Manager/OpacityElim.sml index 5d882a930..9c4b94dc1 100644 --- a/src/Manager/OpacityElim.sml +++ b/src/Manager/OpacityElim.sml @@ -213,8 +213,9 @@ structure OpacityElim: OPACITY_ELIM = val arity = TypeFcn.arity theta val tyvars = [] val longtycon = TyCon.implode_LongTyCon([],tycon) - val ty = CONty(dummyinfo,[],longtycon) - val typbind = TYPBIND(dummyinfo,tyvars,tycon,ty,typbindopt) + val ty = CONty(dummyinfo,[],[],longtycon) + val typbind = TYPBIND(dummyinfo,tyvars,(dummyinfo,nil), + tycon,ty,typbindopt) in (TE.plus(TE.singleton(tycon,tystr'), TE), SOME(typbind)) end) (TE.empty,NONE) TE val typbind = case typbindopt diff --git a/src/Parsing/GrammarUtils.sml b/src/Parsing/GrammarUtils.sml index 388c58284..78f2e208f 100644 --- a/src/Parsing/GrammarUtils.sml +++ b/src/Parsing/GrammarUtils.sml @@ -281,8 +281,8 @@ structure GrammarUtils : GRAMMAR_UTILS = ty | RECORDty(i, SOME tyrow, rvopt) => RECORDty(i, SOME (replaceTyrow tyvarseq tyseq tyrow), rvopt) - | CONty(i, tylist, tycon) => - CONty(i, map (replaceTy tyvarseq tyseq) tylist, tycon) + | CONty(i, tylist, regvars, tycon) => + CONty(i, map (replaceTy tyvarseq tyseq) tylist, regvars, tycon) | FNty(i, ty1, rvopt, ty2) => FNty(i, replaceTy tyvarseq tyseq ty1, rvopt, replaceTy tyvarseq tyseq ty2) @@ -302,10 +302,10 @@ structure GrammarUtils : GRAMMAR_UTILS = exception Lookup_tycon fun lookup_tycon tycon typbind = case typbind of - TYPBIND(_, tyvarseq, tycon', ty, NONE) => + TYPBIND(_, tyvarseq, _, tycon', ty, NONE) => if tycon' = tycon then (tyvarseq, ty) else raise Lookup_tycon - | TYPBIND(_, tyvarseq, tycon', ty, SOME typbind) => + | TYPBIND(_, tyvarseq, _, tycon', ty, SOME typbind) => if tycon' = tycon then (tyvarseq, ty) else lookup_tycon tycon typbind @@ -317,7 +317,7 @@ structure GrammarUtils : GRAMMAR_UTILS = ty | RECORDty(i, SOME tyrow, regvar) => RECORDty(i, SOME (rewriteTyrow tyrow), regvar) - | CONty(i, tyseq', longtycon') => + | CONty(i, tyseq', regvars, longtycon') => let val (strid_list, tycon') = TyCon.explode_LongTyCon longtycon' in @@ -335,13 +335,13 @@ structure GrammarUtils : GRAMMAR_UTILS = handle Lookup_tycon => (* keep type constructor, but traverse its arguments*) - CONty(i, map rewriteTy tyseq', longtycon') + CONty(i, map rewriteTy tyseq', regvars, longtycon') else (* Was: ty ; ME 2001-03-05 - bug reported by Stephen * Weeks, Mon, 7 Aug 2000. *) (* keep type constructor, but traverse its arguments*) - CONty(i, map rewriteTy tyseq', longtycon') + CONty(i, map rewriteTy tyseq', regvars, longtycon') end | FNty(i, ty1, rvopt, ty2) => FNty(i, rewriteTy ty1, rvopt, rewriteTy ty2) diff --git a/src/Parsing/Topdec.grm b/src/Parsing/Topdec.grm index b81129814..6dae1a381 100644 --- a/src/Parsing/Topdec.grm +++ b/src/Parsing/Topdec.grm @@ -251,6 +251,10 @@ type arg = unit | AtExp of atexp | FClause of FClause +(* ReML *) + | RegVarSeq of RegVar.regvar list + | RegVarSeq1 of RegVar.regvar list + (* Optional phrases and so on: *) | CommaExpRow_opt of exprow option | AndValBind_opt of valbind option @@ -1209,11 +1213,11 @@ AndFnValBind_opt: | (* -none- *) ( NONE ) TypBind: - TyVarSeq TypeIdent EQUALS Ty AndTypBind_opt + TyVarSeq RegVarSeq TypeIdent EQUALS Ty AndTypBind_opt ( TYPBIND (PP TyVarSeqleft (rightmost get_info_ty Ty get_info_typbind AndTypBind_opt), - TyVarSeq, mk_TyCon TypeIdent, Ty, AndTypBind_opt) ) + TyVarSeq, (PP RegVarSeqleft RegVarSeqright, RegVarSeq), mk_TyCon TypeIdent, Ty, AndTypBind_opt) ) AndTypBind_opt: AND TypBind ( SOME TypBind ) | (* -none- *) ( NONE ) @@ -1472,7 +1476,7 @@ TupleTy: Ty_sans_STAR ( [Ty_sans_STAR] ) Ty_sans_STAR: LPAREN TyComma_seq2 RPAREN LongTypeIdent BACKQUOTE EqIdent ( let val ty = CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, mk_LongTyCon LongTypeIdent) + TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft EqIdentright, ty, SOME (PP BACKQUOTEleft EqIdentright, @@ -1481,7 +1485,7 @@ Ty_sans_STAR: end ) | LPAREN TyComma_seq2 RPAREN LongTypeIdent BACKQUOTE LBRACKET EqIdent_seq1 RBRACKET ( let val ty = CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, mk_LongTyCon LongTypeIdent) + TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft RBRACKETright, ty, SOME (PP LBRACKETleft RBRACKETright, @@ -1491,13 +1495,13 @@ Ty_sans_STAR: | LPAREN TyComma_seq2 RPAREN LongTypeIdent ( CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, mk_LongTyCon LongTypeIdent) ) + TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) ) | Ty_sans_STAR LongTypeIdent ( CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], mk_LongTyCon LongTypeIdent) ) + [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) ) | Ty_sans_STAR LongTypeIdent BACKQUOTE EqIdent ( let val ty = CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], mk_LongTyCon LongTypeIdent) + [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft EqIdentright, ty, SOME (PP BACKQUOTEleft EqIdentright, @@ -1506,7 +1510,7 @@ Ty_sans_STAR: end ) | Ty_sans_STAR LongTypeIdent BACKQUOTE LBRACKET EqIdent_seq1 RBRACKET ( let val ty = CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], mk_LongTyCon LongTypeIdent) + [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft RBRACKETright, ty, SOME (PP LBRACKETleft RBRACKETright, @@ -1580,16 +1584,23 @@ TyComma_seq2: AtomicTy: LongTypeIdent BACKQUOTE EqIdent ( let val ty = CONty (PP LongTypeIdentleft LongTypeIdentright, - [], mk_LongTyCon LongTypeIdent) + [], nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft EqIdentright, ty, SOME (PP BACKQUOTEleft EqIdentright, [(PP EqIdentleft EqIdentright, RegVar.mk_Named EqIdent)])) end) + | BACKQUOTE EqIdent LongTypeIdent + ( CONty (PP BACKQUOTEleft LongTypeIdentright, + [], + [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)], + mk_LongTyCon LongTypeIdent) ) + | LongTypeIdent BACKQUOTE LBRACKET EqIdent_seq1 RBRACKET ( let val ty = CONty (PP LongTypeIdentleft LongTypeIdentright, - [], mk_LongTyCon LongTypeIdent) + [], nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft RBRACKETright, ty, SOME (PP LBRACKETleft RBRACKETright, @@ -1597,23 +1608,23 @@ AtomicTy: RegVar.mk_Named r)) EqIdent_seq1)) end) | LongTypeIdent ( CONty (PP LongTypeIdentleft LongTypeIdentright, - [], mk_LongTyCon LongTypeIdent) ) + [], nil, mk_LongTyCon LongTypeIdent) ) | TYVAR ( TYVARty(PP TYVARleft TYVARright, mk_TyVar TYVAR) ) | LBRACE TyRow_opt RBRACE BACKQUOTE EqIdent - ( RECORDty (PP LBRACEleft RBRACEright, + ( RECORDty (PP LBRACEleft EqIdentright, TyRow_opt, SOME (PP BACKQUOTEleft EqIdentright, RegVar.mk_Named EqIdent)) ) | LBRACE TyRow_opt RBRACE ( RECORDty (PP LBRACEleft RBRACEright, TyRow_opt, NONE) ) | LPAREN Ty RPAREN BACKQUOTE EqIdent - ( PARty (PP LPARENleft RPARENright, + ( PARty (PP LPARENleft EqIdentright, Ty, SOME (PP BACKQUOTEleft EqIdentright, [(PP EqIdentleft EqIdentright, RegVar.mk_Named EqIdent)])) ) | LPAREN Ty RPAREN BACKQUOTE LBRACKET EqIdent_seq1 RBRACKET - ( PARty (PP LPARENleft RPARENright, + ( PARty (PP LPARENleft RBRACKETright, Ty, SOME (PP BACKQUOTEleft RBRACKETright, map (fn s => (PP EqIdent_seq1left EqIdent_seq1right, @@ -1667,3 +1678,13 @@ TyVarComma_seq1: TYVAR COMMA TyVarComma_seq1 ( mk_TyVar TYVAR :: TyVarComma_seq1 ) | TYVAR ( [mk_TyVar TYVAR] ) + +RegVarSeq: + RegVarSeq1 ( RegVarSeq1 ) + | (* -none- *) ( [] ) + +RegVarSeq1: + BACKQUOTE EqIdent + ( [RegVar.mk_Named EqIdent] ) + | BACKQUOTE LBRACKET EqIdent_seq1 RBRACKET + ( map RegVar.mk_Named EqIdent_seq1 ) diff --git a/src/Parsing/Topdec.grm.sml b/src/Parsing/Topdec.grm.sml index 2d57e748d..c6dee5b64 100644 --- a/src/Parsing/Topdec.grm.sml +++ b/src/Parsing/Topdec.grm.sml @@ -113,14 +113,14 @@ structure Token = Token local open LrTable in val table=let val actionRows = "\ -\\001\000\001\000\133\001\003\000\132\001\004\000\131\001\008\000\130\001\ -\\019\000\129\001\021\000\177\001\022\000\128\001\040\000\127\001\ -\\041\000\126\001\053\000\124\001\000\000\ -\\001\000\001\000\133\001\003\000\132\001\004\000\131\001\008\000\130\001\ -\\019\000\129\001\022\000\128\001\040\000\127\001\041\000\126\001\ -\\046\000\125\001\053\000\124\001\000\000\ -\\001\000\005\000\063\001\061\000\029\000\074\000\019\000\000\000\ -\\001\000\007\000\117\001\009\000\055\000\010\000\054\000\030\000\116\001\ +\\001\000\001\000\141\001\003\000\140\001\004\000\139\001\008\000\138\001\ +\\019\000\137\001\021\000\185\001\022\000\136\001\040\000\135\001\ +\\041\000\134\001\053\000\132\001\000\000\ +\\001\000\001\000\141\001\003\000\140\001\004\000\139\001\008\000\138\001\ +\\019\000\137\001\022\000\136\001\040\000\135\001\041\000\134\001\ +\\046\000\133\001\053\000\132\001\000\000\ +\\001\000\005\000\069\001\061\000\029\000\074\000\019\000\000\000\ +\\001\000\007\000\125\001\009\000\055\000\010\000\054\000\030\000\124\001\ \\061\000\029\000\074\000\019\000\000\000\ \\001\000\009\000\055\000\010\000\054\000\017\000\052\000\023\000\049\000\ \\026\000\047\000\030\000\044\000\034\000\041\000\037\000\039\000\ @@ -153,7 +153,7 @@ val table=let val actionRows = \\059\000\103\000\061\000\029\000\063\000\028\000\064\000\027\000\ \\065\000\026\000\066\000\025\000\067\000\024\000\068\000\023\000\ \\069\000\022\000\074\000\019\000\000\000\ -\\001\000\009\000\055\000\010\000\054\000\034\000\109\000\038\000\213\000\ +\\001\000\009\000\055\000\010\000\054\000\034\000\109\000\038\000\214\000\ \\045\000\144\000\047\000\106\000\049\000\105\000\055\000\104\000\ \\059\000\103\000\061\000\029\000\063\000\028\000\064\000\027\000\ \\065\000\026\000\066\000\025\000\067\000\024\000\068\000\023\000\ @@ -164,180 +164,183 @@ val table=let val actionRows = \\066\000\025\000\067\000\024\000\068\000\023\000\069\000\022\000\ \\074\000\019\000\075\000\102\000\000\000\ \\001\000\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ -\\046\000\210\000\047\000\106\000\049\000\105\000\055\000\104\000\ +\\046\000\211\000\047\000\106\000\049\000\105\000\055\000\104\000\ \\059\000\103\000\061\000\029\000\063\000\028\000\064\000\027\000\ \\065\000\026\000\066\000\025\000\067\000\024\000\068\000\023\000\ \\069\000\022\000\074\000\019\000\000\000\ \\001\000\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ -\\046\000\210\000\047\000\106\000\049\000\105\000\055\000\104\000\ +\\046\000\211\000\047\000\106\000\049\000\105\000\055\000\104\000\ \\059\000\103\000\061\000\029\000\063\000\028\000\064\000\027\000\ \\065\000\026\000\066\000\025\000\067\000\024\000\068\000\023\000\ -\\069\000\022\000\074\000\019\000\075\000\209\000\000\000\ +\\069\000\022\000\074\000\019\000\075\000\210\000\000\000\ \\001\000\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ \\047\000\106\000\049\000\105\000\055\000\104\000\059\000\103\000\ \\061\000\029\000\063\000\028\000\064\000\027\000\065\000\026\000\ \\066\000\025\000\067\000\024\000\068\000\023\000\069\000\022\000\ \\074\000\019\000\000\000\ -\\001\000\009\000\055\000\010\000\054\000\040\000\197\001\061\000\029\000\ +\\001\000\009\000\055\000\010\000\054\000\040\000\205\001\061\000\029\000\ \\074\000\019\000\000\000\ \\001\000\009\000\055\000\010\000\054\000\060\000\118\000\061\000\029\000\ \\074\000\019\000\000\000\ -\\001\000\009\000\055\000\010\000\054\000\060\000\214\000\061\000\029\000\ +\\001\000\009\000\055\000\010\000\054\000\060\000\215\000\061\000\029\000\ \\074\000\019\000\000\000\ \\001\000\009\000\055\000\010\000\054\000\061\000\029\000\074\000\019\000\000\000\ -\\001\000\009\000\174\000\045\000\173\000\049\000\172\000\074\000\153\000\ -\\075\000\171\000\000\000\ -\\001\000\009\000\174\000\074\000\153\000\000\000\ -\\001\000\011\000\118\001\046\000\229\001\000\000\ -\\001\000\012\000\249\000\021\000\021\002\052\000\248\000\000\000\ -\\001\000\012\000\249\000\046\000\251\001\052\000\248\000\000\000\ -\\001\000\012\000\138\001\059\000\137\001\061\000\029\000\062\000\136\001\ +\\001\000\009\000\175\000\045\000\174\000\049\000\173\000\074\000\153\000\ +\\075\000\172\000\076\000\171\000\000\000\ +\\001\000\009\000\175\000\074\000\153\000\000\000\ +\\001\000\011\000\126\001\046\000\238\001\000\000\ +\\001\000\012\000\252\000\021\000\031\002\052\000\251\000\000\000\ +\\001\000\012\000\252\000\046\000\005\002\052\000\251\000\000\000\ +\\001\000\012\000\146\001\059\000\145\001\061\000\029\000\062\000\144\001\ \\074\000\019\000\000\000\ -\\001\000\015\000\064\000\018\000\190\000\025\000\063\000\036\000\062\000\ +\\001\000\015\000\064\000\018\000\191\000\025\000\063\000\036\000\062\000\ \\052\000\061\000\000\000\ -\\001\000\015\000\064\000\020\000\101\001\025\000\063\000\036\000\062\000\ +\\001\000\015\000\064\000\020\000\109\001\025\000\063\000\036\000\062\000\ \\052\000\061\000\000\000\ -\\001\000\015\000\064\000\021\000\099\001\025\000\063\000\036\000\062\000\ -\\052\000\061\000\053\000\187\000\000\000\ -\\001\000\015\000\064\000\025\000\063\000\033\000\242\000\036\000\062\000\ +\\001\000\015\000\064\000\021\000\107\001\025\000\063\000\036\000\062\000\ +\\052\000\061\000\053\000\188\000\000\000\ +\\001\000\015\000\064\000\025\000\063\000\033\000\245\000\036\000\062\000\ \\052\000\061\000\000\000\ -\\001\000\015\000\064\000\025\000\063\000\036\000\062\000\039\000\224\000\ +\\001\000\015\000\064\000\025\000\063\000\036\000\062\000\039\000\227\000\ \\052\000\061\000\000\000\ -\\001\000\015\000\064\000\025\000\063\000\036\000\062\000\046\000\189\000\ -\\051\000\188\000\052\000\061\000\053\000\187\000\000\000\ -\\001\000\016\000\039\003\050\000\039\003\051\000\039\003\052\000\227\000\ -\\060\000\087\002\000\000\ -\\001\000\016\000\197\000\046\000\030\001\051\000\029\001\052\000\196\000\000\000\ -\\001\000\016\000\197\000\052\000\196\000\057\000\233\000\000\000\ -\\001\000\016\000\197\000\052\000\196\000\060\000\195\000\000\000\ -\\001\000\016\000\197\000\052\000\196\000\060\000\032\001\000\000\ -\\001\000\019\000\052\001\034\000\148\000\061\000\029\000\074\000\019\000\000\000\ -\\001\000\019\000\011\002\034\000\148\000\061\000\029\000\074\000\019\000\000\000\ -\\001\000\021\000\097\001\000\000\ -\\001\000\021\000\098\001\000\000\ -\\001\000\021\000\111\001\000\000\ -\\001\000\021\000\159\001\000\000\ -\\001\000\021\000\222\001\000\000\ -\\001\000\021\000\227\001\000\000\ -\\001\000\023\000\095\001\045\000\094\001\000\000\ -\\001\000\023\000\155\001\000\000\ -\\001\000\027\000\218\000\000\000\ -\\001\000\027\000\220\000\000\000\ -\\001\000\027\000\038\001\000\000\ -\\001\000\027\000\226\001\000\000\ +\\001\000\015\000\064\000\025\000\063\000\036\000\062\000\046\000\190\000\ +\\051\000\189\000\052\000\061\000\053\000\188\000\000\000\ +\\001\000\016\000\049\003\050\000\049\003\051\000\049\003\052\000\230\000\ +\\060\000\097\002\000\000\ +\\001\000\016\000\198\000\046\000\034\001\051\000\033\001\052\000\197\000\000\000\ +\\001\000\016\000\198\000\052\000\197\000\057\000\236\000\000\000\ +\\001\000\016\000\198\000\052\000\197\000\060\000\196\000\000\000\ +\\001\000\016\000\198\000\052\000\197\000\060\000\036\001\000\000\ +\\001\000\019\000\058\001\034\000\148\000\061\000\029\000\074\000\019\000\000\000\ +\\001\000\019\000\021\002\034\000\148\000\061\000\029\000\074\000\019\000\000\000\ +\\001\000\021\000\105\001\000\000\ +\\001\000\021\000\106\001\000\000\ +\\001\000\021\000\119\001\000\000\ +\\001\000\021\000\167\001\000\000\ +\\001\000\021\000\231\001\000\000\ +\\001\000\021\000\236\001\000\000\ +\\001\000\023\000\102\001\045\000\101\001\000\000\ +\\001\000\023\000\163\001\000\000\ +\\001\000\027\000\221\000\000\000\ +\\001\000\027\000\223\000\000\000\ +\\001\000\027\000\044\001\000\000\ +\\001\000\027\000\235\001\000\000\ \\001\000\034\000\148\000\061\000\029\000\074\000\019\000\000\000\ -\\001\000\040\000\176\001\000\000\ -\\001\000\042\000\244\000\043\000\243\000\000\000\ -\\001\000\042\000\110\001\000\000\ +\\001\000\040\000\184\001\000\000\ +\\001\000\042\000\247\000\043\000\246\000\000\000\ +\\001\000\042\000\118\001\000\000\ \\001\000\045\000\113\000\074\000\153\000\075\000\102\000\000\000\ -\\001\000\045\000\251\000\000\000\ -\\001\000\046\000\185\000\000\000\ +\\001\000\045\000\254\000\000\000\ \\001\000\046\000\186\000\000\000\ -\\001\000\046\000\027\001\000\000\ -\\001\000\046\000\028\001\000\000\ -\\001\000\046\000\078\001\000\000\ -\\001\000\046\000\080\001\051\000\079\001\000\000\ -\\001\000\046\000\249\001\000\000\ -\\001\000\046\000\252\001\000\000\ +\\001\000\046\000\187\000\000\000\ +\\001\000\046\000\031\001\000\000\ +\\001\000\046\000\032\001\000\000\ +\\001\000\046\000\085\001\000\000\ +\\001\000\046\000\087\001\051\000\086\001\000\000\ +\\001\000\046\000\002\002\000\000\ +\\001\000\046\000\006\002\000\000\ \\001\000\047\000\164\000\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\018\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\022\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\070\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\040\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\140\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\076\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\214\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\148\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\247\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\222\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\048\000\183\000\000\000\ -\\001\000\048\000\025\001\000\000\ -\\001\000\048\000\068\001\000\000\ -\\001\000\048\000\149\001\000\000\ -\\001\000\048\000\203\001\000\000\ -\\001\000\048\000\244\001\000\000\ -\\001\000\048\000\018\002\000\000\ -\\001\000\048\000\041\002\000\000\ -\\001\000\050\000\182\000\000\000\ -\\001\000\050\000\024\001\000\000\ -\\001\000\050\000\077\001\000\000\ -\\001\000\052\000\076\001\000\000\ -\\001\000\052\000\122\001\000\000\ -\\001\000\052\000\231\001\000\000\ -\\001\000\052\000\237\001\000\000\ -\\001\000\052\000\020\002\000\000\ +\\001\000\047\000\000\002\060\000\094\000\061\000\029\000\062\000\093\000\ +\\074\000\019\000\000\000\ +\\001\000\048\000\184\000\000\000\ +\\001\000\048\000\029\001\000\000\ +\\001\000\048\000\074\001\000\000\ +\\001\000\048\000\157\001\000\000\ +\\001\000\048\000\166\001\000\000\ +\\001\000\048\000\211\001\000\000\ +\\001\000\048\000\253\001\000\000\ +\\001\000\048\000\028\002\000\000\ +\\001\000\048\000\051\002\000\000\ +\\001\000\050\000\183\000\000\000\ +\\001\000\050\000\028\001\000\000\ +\\001\000\050\000\084\001\000\000\ +\\001\000\052\000\083\001\000\000\ +\\001\000\052\000\130\001\000\000\ +\\001\000\052\000\240\001\000\000\ +\\001\000\052\000\246\001\000\000\ +\\001\000\052\000\030\002\000\000\ \\001\000\053\000\000\000\077\000\000\000\000\000\ -\\001\000\054\000\202\000\061\000\029\000\063\000\078\000\066\000\077\000\ +\\001\000\054\000\203\000\061\000\029\000\063\000\078\000\066\000\077\000\ \\074\000\019\000\000\000\ -\\001\000\058\000\141\001\000\000\ +\\001\000\058\000\149\001\000\000\ \\001\000\060\000\094\000\061\000\029\000\062\000\093\000\074\000\019\000\000\000\ -\\001\000\060\000\181\000\000\000\ -\\001\000\060\000\238\000\000\000\ -\\001\000\060\000\250\000\000\000\ -\\001\000\060\000\022\001\000\000\ -\\001\000\060\000\034\001\000\000\ -\\001\000\060\000\040\001\000\000\ -\\001\000\060\000\053\001\000\000\ +\\001\000\060\000\182\000\000\000\ +\\001\000\060\000\241\000\000\000\ +\\001\000\060\000\253\000\000\000\ +\\001\000\060\000\026\001\000\000\ +\\001\000\060\000\046\001\000\000\ \\001\000\060\000\059\001\000\000\ -\\001\000\060\000\060\001\000\000\ -\\001\000\060\000\230\001\000\000\ -\\001\000\060\000\235\001\000\000\ -\\001\000\060\000\238\001\000\000\ -\\001\000\060\000\003\002\000\000\ -\\001\000\060\000\012\002\000\000\ -\\001\000\060\000\016\002\000\000\ +\\001\000\060\000\065\001\000\000\ +\\001\000\060\000\066\001\000\000\ +\\001\000\060\000\103\001\000\000\ +\\001\000\060\000\239\001\000\000\ +\\001\000\060\000\244\001\000\000\ +\\001\000\060\000\247\001\000\000\ +\\001\000\060\000\013\002\000\000\ \\001\000\060\000\022\002\000\000\ -\\001\000\060\000\023\002\000\000\ -\\001\000\060\000\061\002\000\000\ +\\001\000\060\000\026\002\000\000\ +\\001\000\060\000\032\002\000\000\ +\\001\000\060\000\033\002\000\000\ +\\001\000\060\000\071\002\000\000\ \\001\000\061\000\029\000\063\000\078\000\066\000\077\000\069\000\076\000\ \\074\000\019\000\000\000\ \\001\000\061\000\029\000\063\000\078\000\066\000\077\000\074\000\019\000\000\000\ \\001\000\061\000\029\000\074\000\019\000\000\000\ \\001\000\069\000\076\000\000\000\ \\001\000\071\000\072\000\072\000\071\000\000\000\ -\\001\000\071\000\179\000\000\000\ +\\001\000\071\000\180\000\000\000\ \\001\000\074\000\153\000\000\000\ -\\001\000\075\000\209\000\000\000\ -\\065\002\000\000\ -\\066\002\000\000\ -\\067\002\000\000\ -\\068\002\000\000\ -\\069\002\000\000\ -\\070\002\000\000\ -\\071\002\000\000\ -\\072\002\000\000\ -\\073\002\000\000\ -\\074\002\000\000\ +\\001\000\075\000\210\000\000\000\ \\075\002\000\000\ -\\075\002\045\000\169\001\000\000\ \\076\002\000\000\ \\077\002\000\000\ \\078\002\000\000\ \\079\002\000\000\ \\080\002\000\000\ -\\080\002\076\000\059\000\000\000\ \\081\002\000\000\ \\082\002\000\000\ \\083\002\000\000\ -\\084\002\066\000\133\000\000\000\ +\\084\002\000\000\ \\085\002\000\000\ +\\085\002\045\000\177\001\000\000\ \\086\002\000\000\ \\087\002\000\000\ \\088\002\000\000\ \\089\002\000\000\ -\\090\002\061\000\029\000\074\000\019\000\000\000\ +\\090\002\000\000\ +\\090\002\076\000\059\000\000\000\ \\091\002\000\000\ -\\092\002\060\000\094\000\061\000\029\000\062\000\093\000\074\000\019\000\000\000\ +\\092\002\000\000\ \\093\002\000\000\ -\\094\002\009\000\055\000\010\000\054\000\061\000\029\000\074\000\019\000\000\000\ +\\094\002\066\000\133\000\000\000\ \\095\002\000\000\ -\\096\002\060\000\238\001\000\000\ +\\096\002\000\000\ \\097\002\000\000\ -\\098\002\060\000\016\002\000\000\ +\\098\002\000\000\ \\099\002\000\000\ -\\100\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ -\\101\002\002\000\058\000\006\000\057\000\008\000\056\000\009\000\055\000\ +\\100\002\061\000\029\000\074\000\019\000\000\000\ +\\101\002\000\000\ +\\102\002\060\000\094\000\061\000\029\000\062\000\093\000\074\000\019\000\000\000\ +\\103\002\000\000\ +\\104\002\009\000\055\000\010\000\054\000\061\000\029\000\074\000\019\000\000\000\ +\\105\002\000\000\ +\\106\002\060\000\247\001\000\000\ +\\107\002\000\000\ +\\108\002\060\000\026\002\000\000\ +\\109\002\000\000\ +\\110\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ +\\111\002\002\000\058\000\006\000\057\000\008\000\056\000\009\000\055\000\ \\010\000\054\000\013\000\053\000\017\000\052\000\019\000\051\000\ \\022\000\050\000\023\000\049\000\024\000\048\000\026\000\047\000\ \\028\000\046\000\029\000\045\000\030\000\044\000\031\000\043\000\ @@ -347,182 +350,172 @@ val table=let val actionRows = \\060\000\030\000\061\000\029\000\063\000\028\000\064\000\027\000\ \\065\000\026\000\066\000\025\000\067\000\024\000\068\000\023\000\ \\069\000\022\000\070\000\021\000\073\000\020\000\074\000\019\000\000\000\ -\\102\002\000\000\ -\\103\002\000\000\ -\\104\002\000\000\ -\\105\002\000\000\ -\\106\002\002\000\058\000\006\000\057\000\008\000\056\000\013\000\053\000\ +\\112\002\000\000\ +\\113\002\000\000\ +\\114\002\000\000\ +\\115\002\000\000\ +\\116\002\002\000\058\000\006\000\057\000\008\000\056\000\013\000\053\000\ \\019\000\051\000\022\000\050\000\024\000\048\000\028\000\046\000\ \\029\000\045\000\031\000\043\000\032\000\042\000\035\000\040\000\ \\040\000\038\000\041\000\037\000\042\000\036\000\000\000\ -\\107\002\000\000\ -\\108\002\000\000\ -\\109\002\000\000\ -\\110\002\012\000\249\000\052\000\248\000\000\000\ -\\111\002\011\000\118\001\000\000\ -\\112\002\011\000\118\001\000\000\ -\\113\002\000\000\ -\\114\002\012\000\249\000\014\000\025\002\052\000\248\000\000\000\ -\\115\002\000\000\ -\\116\002\000\000\ \\117\002\000\000\ -\\118\002\011\000\118\001\014\000\038\002\000\000\ +\\118\002\000\000\ \\119\002\000\000\ -\\120\002\000\000\ -\\121\002\014\000\008\002\000\000\ -\\122\002\000\000\ +\\120\002\012\000\252\000\052\000\251\000\000\000\ +\\121\002\011\000\126\001\000\000\ +\\122\002\011\000\126\001\000\000\ \\123\002\000\000\ -\\124\002\056\000\049\002\000\000\ +\\124\002\012\000\252\000\014\000\035\002\052\000\251\000\000\000\ \\125\002\000\000\ \\126\002\000\000\ \\127\002\000\000\ -\\128\002\000\000\ -\\129\002\014\000\034\002\000\000\ +\\128\002\011\000\126\001\014\000\048\002\000\000\ +\\129\002\000\000\ \\130\002\000\000\ -\\131\002\000\000\ -\\132\002\014\000\004\002\000\000\ -\\132\002\014\000\004\002\060\000\003\002\000\000\ +\\131\002\014\000\018\002\000\000\ +\\132\002\000\000\ \\133\002\000\000\ -\\134\002\014\000\233\001\000\000\ +\\134\002\056\000\059\002\000\000\ \\135\002\000\000\ \\136\002\000\000\ \\137\002\000\000\ -\\138\002\014\000\027\002\000\000\ -\\139\002\000\000\ +\\138\002\000\000\ +\\139\002\014\000\044\002\000\000\ \\140\002\000\000\ \\141\002\000\000\ -\\142\002\000\000\ +\\142\002\014\000\014\002\000\000\ +\\142\002\014\000\014\002\060\000\013\002\000\000\ \\143\002\000\000\ -\\144\002\000\000\ +\\144\002\014\000\242\001\000\000\ \\145\002\000\000\ \\146\002\000\000\ -\\147\002\011\000\118\001\000\000\ -\\148\002\000\000\ +\\147\002\000\000\ +\\148\002\014\000\037\002\000\000\ \\149\002\000\000\ \\150\002\000\000\ \\151\002\000\000\ \\152\002\000\000\ \\153\002\000\000\ \\154\002\000\000\ -\\154\002\061\000\029\000\074\000\019\000\000\000\ \\155\002\000\000\ \\156\002\000\000\ -\\157\002\000\000\ +\\157\002\011\000\126\001\000\000\ \\158\002\000\000\ \\159\002\000\000\ \\160\002\000\000\ \\161\002\000\000\ \\162\002\000\000\ -\\163\002\008\000\056\000\013\000\053\000\019\000\051\000\022\000\050\000\ +\\163\002\000\000\ +\\164\002\000\000\ +\\164\002\061\000\029\000\074\000\019\000\000\000\ +\\165\002\000\000\ +\\166\002\000\000\ +\\167\002\000\000\ +\\168\002\000\000\ +\\169\002\000\000\ +\\170\002\000\000\ +\\171\002\000\000\ +\\172\002\000\000\ +\\173\002\008\000\056\000\013\000\053\000\019\000\051\000\022\000\050\000\ \\024\000\048\000\028\000\046\000\029\000\045\000\031\000\043\000\ \\032\000\042\000\035\000\040\000\040\000\038\000\041\000\037\000\ \\042\000\036\000\053\000\124\000\000\000\ -\\164\002\007\000\117\001\008\000\056\000\009\000\055\000\010\000\054\000\ +\\174\002\007\000\125\001\008\000\056\000\009\000\055\000\010\000\054\000\ \\013\000\053\000\019\000\051\000\022\000\050\000\024\000\048\000\ -\\028\000\046\000\029\000\045\000\030\000\116\001\031\000\043\000\ +\\028\000\046\000\029\000\045\000\030\000\124\001\031\000\043\000\ \\032\000\042\000\035\000\040\000\040\000\038\000\041\000\037\000\ \\042\000\036\000\053\000\124\000\061\000\029\000\074\000\019\000\000\000\ -\\164\002\008\000\056\000\013\000\053\000\019\000\051\000\022\000\050\000\ +\\174\002\008\000\056\000\013\000\053\000\019\000\051\000\022\000\050\000\ \\024\000\048\000\028\000\046\000\029\000\045\000\031\000\043\000\ \\032\000\042\000\035\000\040\000\040\000\038\000\041\000\037\000\ \\042\000\036\000\053\000\124\000\000\000\ -\\165\002\000\000\ -\\166\002\000\000\ -\\167\002\000\000\ -\\168\002\000\000\ -\\169\002\000\000\ -\\170\002\000\000\ -\\171\002\000\000\ -\\172\002\012\000\249\000\014\000\172\001\052\000\248\000\000\000\ -\\173\002\000\000\ -\\174\002\000\000\ -\\174\002\061\000\029\000\074\000\019\000\000\000\ \\175\002\000\000\ \\176\002\000\000\ \\177\002\000\000\ -\\178\002\014\000\056\002\000\000\ +\\178\002\000\000\ \\179\002\000\000\ \\180\002\000\000\ \\181\002\000\000\ -\\182\002\011\000\118\001\014\000\121\001\000\000\ -\\183\002\076\000\065\000\000\000\ +\\182\002\012\000\252\000\014\000\180\001\052\000\251\000\000\000\ +\\183\002\000\000\ \\184\002\000\000\ +\\184\002\061\000\029\000\074\000\019\000\000\000\ \\185\002\000\000\ \\186\002\000\000\ \\187\002\000\000\ -\\188\002\076\000\010\001\000\000\ +\\188\002\014\000\066\002\000\000\ \\189\002\000\000\ \\190\002\000\000\ \\191\002\000\000\ -\\192\002\000\000\ -\\193\002\076\000\012\001\000\000\ +\\192\002\011\000\126\001\014\000\129\001\000\000\ +\\193\002\076\000\065\000\000\000\ \\194\002\000\000\ \\195\002\000\000\ \\196\002\000\000\ \\197\002\000\000\ -\\198\002\000\000\ +\\198\002\076\000\014\001\000\000\ \\199\002\000\000\ \\200\002\000\000\ \\201\002\000\000\ \\202\002\000\000\ -\\203\002\072\000\071\000\000\000\ +\\203\002\076\000\016\001\000\000\ \\204\002\000\000\ \\205\002\000\000\ -\\206\002\009\000\055\000\010\000\054\000\030\000\044\000\034\000\041\000\ +\\206\002\000\000\ +\\207\002\000\000\ +\\208\002\000\000\ +\\209\002\000\000\ +\\210\002\000\000\ +\\211\002\000\000\ +\\212\002\000\000\ +\\213\002\072\000\071\000\000\000\ +\\214\002\000\000\ +\\215\002\000\000\ +\\216\002\009\000\055\000\010\000\054\000\030\000\044\000\034\000\041\000\ \\045\000\034\000\047\000\033\000\049\000\032\000\059\000\031\000\ \\060\000\030\000\061\000\029\000\063\000\028\000\064\000\027\000\ \\065\000\026\000\066\000\025\000\067\000\024\000\068\000\023\000\ \\069\000\022\000\070\000\021\000\073\000\020\000\074\000\019\000\000\000\ -\\207\002\000\000\ -\\208\002\000\000\ -\\209\002\061\000\029\000\063\000\078\000\066\000\077\000\074\000\019\000\000\000\ -\\210\002\000\000\ -\\211\002\015\000\064\000\025\000\063\000\036\000\062\000\051\000\082\001\ +\\217\002\000\000\ +\\218\002\000\000\ +\\219\002\061\000\029\000\063\000\078\000\066\000\077\000\074\000\019\000\000\000\ +\\220\002\000\000\ +\\221\002\015\000\064\000\025\000\063\000\036\000\062\000\051\000\089\001\ \\052\000\061\000\000\000\ -\\212\002\000\000\ -\\213\002\009\000\055\000\010\000\054\000\017\000\052\000\023\000\049\000\ +\\222\002\000\000\ +\\223\002\009\000\055\000\010\000\054\000\017\000\052\000\023\000\049\000\ \\026\000\047\000\030\000\044\000\034\000\041\000\037\000\039\000\ \\044\000\035\000\045\000\034\000\047\000\033\000\049\000\032\000\ \\059\000\031\000\060\000\030\000\061\000\029\000\063\000\028\000\ \\064\000\027\000\065\000\026\000\066\000\025\000\067\000\024\000\ \\068\000\023\000\069\000\022\000\070\000\021\000\073\000\020\000\ \\074\000\019\000\000\000\ -\\214\002\000\000\ -\\215\002\015\000\064\000\025\000\063\000\036\000\062\000\051\000\184\000\ -\\052\000\061\000\000\000\ -\\216\002\000\000\ -\\217\002\000\000\ -\\218\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\ -\\053\000\187\000\000\000\ -\\219\002\000\000\ -\\220\002\000\000\ -\\221\002\000\000\ -\\222\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ -\\223\002\000\000\ \\224\002\000\000\ -\\225\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ -\\226\002\015\000\064\000\036\000\062\000\052\000\061\000\000\000\ -\\227\002\015\000\064\000\052\000\061\000\000\000\ -\\228\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ +\\225\002\015\000\064\000\025\000\063\000\036\000\062\000\051\000\185\000\ +\\052\000\061\000\000\000\ +\\226\002\000\000\ +\\227\002\000\000\ +\\228\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\ +\\053\000\188\000\000\000\ \\229\002\000\000\ \\230\002\000\000\ -\\231\002\056\000\232\000\000\000\ +\\231\002\000\000\ \\232\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ \\233\002\000\000\ \\234\002\000\000\ -\\235\002\000\000\ -\\236\002\043\000\241\000\000\000\ -\\237\002\043\000\240\000\000\000\ -\\238\002\000\000\ +\\235\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ +\\236\002\015\000\064\000\036\000\062\000\052\000\061\000\000\000\ +\\237\002\015\000\064\000\052\000\061\000\000\000\ +\\238\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ \\239\002\000\000\ \\240\002\000\000\ -\\241\002\000\000\ -\\242\002\000\000\ +\\241\002\056\000\235\000\000\000\ +\\242\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ \\243\002\000\000\ \\244\002\000\000\ \\245\002\000\000\ -\\246\002\000\000\ -\\247\002\000\000\ +\\246\002\043\000\244\000\000\000\ +\\247\002\043\000\243\000\000\000\ \\248\002\000\000\ \\249\002\000\000\ \\250\002\000\000\ @@ -532,300 +525,318 @@ val table=let val actionRows = \\254\002\000\000\ \\255\002\000\000\ \\000\003\000\000\ -\\001\003\013\000\053\000\019\000\051\000\022\000\050\000\024\000\048\000\ -\\028\000\046\000\029\000\045\000\031\000\131\000\032\000\042\000\ -\\035\000\040\000\040\000\038\000\041\000\037\000\042\000\036\000\ -\\053\000\130\000\000\000\ -\\002\003\013\000\053\000\019\000\051\000\022\000\050\000\024\000\048\000\ -\\028\000\046\000\029\000\045\000\031\000\131\000\032\000\042\000\ -\\035\000\040\000\040\000\038\000\041\000\037\000\042\000\036\000\ -\\053\000\130\000\000\000\ +\\001\003\000\000\ +\\002\003\000\000\ \\003\003\000\000\ \\004\003\000\000\ \\005\003\000\000\ -\\006\003\014\000\087\001\015\000\064\000\025\000\063\000\036\000\062\000\ -\\052\000\061\000\000\000\ +\\006\003\000\000\ \\007\003\000\000\ \\008\003\000\000\ \\009\003\000\000\ \\010\003\000\000\ -\\011\003\052\000\020\002\000\000\ -\\012\003\000\000\ -\\013\003\014\000\218\001\000\000\ +\\011\003\013\000\053\000\019\000\051\000\022\000\050\000\024\000\048\000\ +\\028\000\046\000\029\000\045\000\031\000\131\000\032\000\042\000\ +\\035\000\040\000\040\000\038\000\041\000\037\000\042\000\036\000\ +\\053\000\130\000\000\000\ +\\012\003\013\000\053\000\019\000\051\000\022\000\050\000\024\000\048\000\ +\\028\000\046\000\029\000\045\000\031\000\131\000\032\000\042\000\ +\\035\000\040\000\040\000\038\000\041\000\037\000\042\000\036\000\ +\\053\000\130\000\000\000\ +\\013\003\000\000\ \\014\003\000\000\ \\015\003\000\000\ -\\016\003\014\000\158\001\000\000\ +\\016\003\014\000\094\001\015\000\064\000\025\000\063\000\036\000\062\000\ +\\052\000\061\000\000\000\ \\017\003\000\000\ \\018\003\000\000\ \\019\003\000\000\ \\020\003\000\000\ -\\021\003\014\000\107\001\000\000\ +\\021\003\052\000\030\002\000\000\ \\022\003\000\000\ -\\023\003\000\000\ -\\024\003\056\000\164\001\000\000\ +\\023\003\014\000\226\001\000\000\ +\\024\003\000\000\ \\025\003\000\000\ -\\026\003\000\000\ +\\026\003\014\000\228\001\000\000\ \\027\003\000\000\ -\\028\003\014\000\046\001\000\000\ +\\028\003\000\000\ \\029\003\000\000\ \\030\003\000\000\ -\\031\003\014\000\229\000\000\000\ +\\031\003\014\000\115\001\000\000\ \\032\003\000\000\ \\033\003\000\000\ -\\034\003\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\ -\\056\000\162\001\000\000\ +\\034\003\056\000\172\001\000\000\ \\035\003\000\000\ \\036\003\000\000\ -\\037\003\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ -\\047\000\106\000\049\000\105\000\055\000\104\000\059\000\103\000\ -\\061\000\029\000\063\000\028\000\064\000\027\000\065\000\026\000\ -\\066\000\025\000\067\000\024\000\068\000\023\000\069\000\022\000\ -\\074\000\019\000\000\000\ -\\038\003\000\000\ -\\039\003\052\000\227\000\000\000\ +\\037\003\000\000\ +\\038\003\014\000\052\001\000\000\ +\\039\003\000\000\ \\040\003\000\000\ -\\041\003\033\000\236\000\000\000\ -\\041\003\033\000\236\000\060\000\235\000\000\000\ +\\041\003\014\000\232\000\000\000\ \\042\003\000\000\ \\043\003\000\000\ -\\044\003\000\000\ +\\044\003\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\ +\\056\000\170\001\000\000\ \\045\003\000\000\ -\\046\003\076\000\192\000\000\000\ -\\047\003\000\000\ +\\046\003\000\000\ +\\047\003\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ +\\047\000\106\000\049\000\105\000\055\000\104\000\059\000\103\000\ +\\061\000\029\000\063\000\028\000\064\000\027\000\065\000\026\000\ +\\066\000\025\000\067\000\024\000\068\000\023\000\069\000\022\000\ +\\074\000\019\000\000\000\ \\048\003\000\000\ -\\049\003\000\000\ +\\049\003\052\000\230\000\000\000\ \\050\003\000\000\ -\\051\003\000\000\ +\\051\003\033\000\239\000\000\000\ +\\051\003\033\000\239\000\060\000\238\000\000\000\ \\052\003\000\000\ \\053\003\000\000\ -\\054\003\054\000\202\000\061\000\029\000\063\000\078\000\066\000\077\000\ -\\074\000\019\000\000\000\ +\\054\003\000\000\ \\055\003\000\000\ -\\056\003\000\000\ +\\056\003\076\000\193\000\000\000\ \\057\003\000\000\ -\\058\003\016\000\197\000\052\000\196\000\000\000\ -\\059\003\016\000\090\001\000\000\ +\\058\003\000\000\ +\\059\003\000\000\ \\060\003\000\000\ -\\061\003\016\000\197\000\051\000\152\001\052\000\196\000\000\000\ -\\061\003\051\000\152\001\000\000\ +\\061\003\000\000\ \\062\003\000\000\ -\\063\003\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ +\\063\003\000\000\ +\\064\003\054\000\203\000\061\000\029\000\063\000\078\000\066\000\077\000\ +\\074\000\019\000\000\000\ +\\065\003\000\000\ +\\066\003\000\000\ +\\067\003\000\000\ +\\068\003\016\000\198\000\052\000\197\000\000\000\ +\\069\003\016\000\097\001\000\000\ +\\070\003\000\000\ +\\071\003\016\000\198\000\051\000\160\001\052\000\197\000\000\000\ +\\071\003\051\000\160\001\000\000\ +\\072\003\000\000\ +\\073\003\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ \\047\000\106\000\049\000\105\000\055\000\104\000\059\000\103\000\ \\061\000\029\000\063\000\028\000\064\000\027\000\065\000\026\000\ \\066\000\025\000\067\000\024\000\068\000\023\000\069\000\022\000\ \\074\000\019\000\000\000\ -\\064\003\000\000\ -\\065\003\016\000\197\000\051\000\026\001\052\000\196\000\000\000\ -\\066\003\000\000\ -\\067\003\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ +\\074\003\000\000\ +\\075\003\016\000\198\000\051\000\030\001\052\000\197\000\000\000\ +\\076\003\000\000\ +\\077\003\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ \\047\000\106\000\049\000\105\000\055\000\104\000\059\000\103\000\ \\061\000\029\000\063\000\028\000\064\000\027\000\065\000\026\000\ \\066\000\025\000\067\000\024\000\068\000\023\000\069\000\022\000\ \\074\000\019\000\000\000\ -\\068\003\000\000\ -\\069\003\000\000\ -\\070\003\016\000\197\000\052\000\196\000\000\000\ -\\071\003\000\000\ -\\072\003\000\000\ -\\073\003\058\000\002\001\059\000\001\001\000\000\ -\\074\003\009\000\174\000\061\000\000\001\074\000\153\000\000\000\ -\\075\003\000\000\ -\\076\003\000\000\ -\\077\003\000\000\ -\\078\003\076\000\212\001\000\000\ -\\079\003\076\000\072\001\000\000\ -\\080\003\000\000\ +\\078\003\000\000\ +\\079\003\000\000\ +\\080\003\016\000\198\000\052\000\197\000\000\000\ \\081\003\000\000\ -\\082\003\044\000\254\000\000\000\ -\\083\003\000\000\ -\\084\003\000\000\ +\\082\003\000\000\ +\\083\003\058\000\005\001\059\000\004\001\000\000\ +\\084\003\009\000\175\000\061\000\003\001\074\000\153\000\000\000\ \\085\003\000\000\ \\086\003\000\000\ \\087\003\000\000\ -\\088\003\051\000\079\001\000\000\ -\\089\003\000\000\ +\\088\003\076\000\220\001\000\000\ +\\089\003\076\000\078\001\000\000\ \\090\003\000\000\ -\\091\003\076\000\253\000\000\000\ -\\092\003\000\000\ +\\091\003\000\000\ +\\092\003\044\000\001\001\000\000\ \\093\003\000\000\ -\\094\003\076\000\143\001\000\000\ +\\094\003\000\000\ \\095\003\000\000\ \\096\003\000\000\ -\\097\003\076\000\147\001\000\000\ -\\098\003\000\000\ -\\099\003\061\000\029\000\063\000\078\000\066\000\077\000\074\000\019\000\000\000\ +\\097\003\000\000\ +\\098\003\051\000\086\001\000\000\ +\\099\003\000\000\ \\100\003\000\000\ \\101\003\000\000\ -\\102\003\051\000\210\001\000\000\ +\\102\003\076\000\000\001\000\000\ \\103\003\000\000\ \\104\003\000\000\ -\\105\003\000\000\ +\\105\003\076\000\151\001\000\000\ \\106\003\000\000\ \\107\003\000\000\ -\\108\003\000\000\ +\\108\003\076\000\155\001\000\000\ \\109\003\000\000\ -\\110\003\000\000\ +\\110\003\061\000\029\000\063\000\078\000\066\000\077\000\074\000\019\000\000\000\ \\111\003\000\000\ \\112\003\000\000\ -\\113\003\000\000\ -\\114\003\045\000\113\000\075\000\102\000\000\000\ +\\113\003\051\000\218\001\000\000\ +\\114\003\000\000\ \\115\003\000\000\ \\116\003\000\000\ \\117\003\000\000\ -\\118\003\051\000\031\001\000\000\ +\\118\003\000\000\ +\\119\003\000\000\ +\\120\003\000\000\ +\\121\003\000\000\ +\\122\003\000\000\ +\\123\003\000\000\ +\\124\003\000\000\ +\\125\003\045\000\113\000\075\000\102\000\000\000\ +\\126\003\000\000\ +\\127\003\000\000\ +\\128\003\000\000\ +\\129\003\051\000\035\001\000\000\ +\\130\003\000\000\ +\\131\003\076\000\218\000\000\000\ +\\132\003\000\000\ +\\133\003\000\000\ \" val actionRowNumbers = -"\154\000\170\001\167\001\244\000\ -\\133\000\130\000\126\000\223\000\ -\\020\001\001\001\007\001\153\000\ -\\240\000\159\000\159\000\159\000\ -\\152\000\116\000\000\001\112\000\ -\\169\001\171\001\168\001\165\001\ -\\164\001\163\001\162\001\117\000\ -\\134\000\108\000\010\001\014\001\ -\\004\000\005\000\089\000\008\000\ -\\173\001\005\000\018\000\016\000\ -\\089\000\220\000\059\001\137\000\ -\\137\000\005\000\011\000\014\000\ -\\050\000\054\000\005\000\173\001\ -\\129\000\128\000\110\000\110\000\ -\\110\000\064\000\006\001\019\000\ -\\005\000\014\000\005\000\089\000\ -\\155\000\158\000\157\000\156\000\ -\\113\000\006\000\002\001\141\000\ -\\252\000\140\000\166\001\139\000\ -\\138\000\090\000\078\000\009\001\ -\\013\001\070\000\016\001\056\000\ -\\057\000\030\000\249\000\025\000\ -\\145\000\120\000\051\001\122\000\ -\\121\000\104\001\009\000\127\001\ -\\034\001\126\001\034\000\101\001\ -\\174\001\111\000\100\001\112\001\ -\\122\001\013\000\010\000\017\000\ -\\172\001\036\001\114\000\115\000\ -\\023\001\147\000\042\001\131\000\ -\\135\000\045\001\218\000\217\000\ -\\046\000\221\000\222\000\053\001\ -\\054\001\058\001\057\001\047\000\ -\\055\001\059\001\089\000\136\000\ -\\089\000\029\000\014\000\096\001\ -\\088\001\049\001\094\001\024\001\ -\\032\001\033\000\012\000\099\001\ -\\118\000\041\001\110\000\091\000\ -\\114\000\038\001\037\001\123\000\ -\\028\000\052\000\114\000\163\000\ -\\224\000\092\000\236\000\055\000\ -\\168\000\243\000\089\000\150\001\ -\\124\000\141\001\133\001\132\001\ -\\021\001\151\001\158\001\019\000\ -\\125\000\027\001\022\001\028\001\ -\\241\000\003\001\004\001\005\000\ -\\245\000\255\000\005\000\253\000\ -\\250\000\005\000\005\000\248\000\ -\\005\000\144\000\065\000\035\001\ -\\092\001\005\000\019\000\014\000\ -\\093\000\031\000\079\000\111\001\ -\\113\001\121\001\071\000\124\001\ -\\058\000\059\000\032\000\177\001\ -\\108\001\061\001\035\000\010\000\ -\\105\001\094\000\146\000\216\000\ -\\220\000\056\001\005\000\048\000\ -\\044\001\043\001\005\000\050\001\ -\\095\000\019\000\086\001\014\000\ -\\093\001\030\001\014\000\005\000\ -\\085\001\007\000\019\000\119\000\ -\\036\000\096\000\173\001\173\001\ -\\014\000\173\001\059\001\097\000\ -\\098\000\162\000\002\000\002\000\ -\\002\000\209\000\072\000\066\000\ -\\110\000\138\001\019\000\110\000\ -\\019\000\081\000\080\000\157\001\ -\\060\000\061\000\005\001\012\001\ -\\089\000\015\001\089\000\018\001\ -\\019\001\017\001\029\001\103\001\ -\\089\000\063\001\128\001\129\001\ -\\014\000\117\001\106\001\110\001\ -\\014\000\175\001\109\001\014\000\ -\\107\001\115\000\044\000\066\001\ -\\019\000\038\000\039\000\027\000\ -\\059\001\026\000\005\000\095\001\ -\\087\001\031\001\033\001\082\001\ -\\050\000\085\001\132\000\097\001\ -\\098\001\078\001\020\000\050\000\ -\\047\001\046\001\025\001\053\000\ -\\040\000\050\000\003\000\230\000\ -\\164\000\208\000\165\000\239\000\ -\\082\000\001\000\242\000\148\001\ -\\089\000\024\000\067\000\134\001\ -\\088\000\130\001\019\000\153\001\ -\\020\000\019\000\156\001\008\001\ -\\109\000\246\000\251\000\073\000\ -\\060\001\009\000\119\001\120\001\ -\\014\000\123\001\125\001\176\001\ -\\045\000\014\000\073\001\225\000\ -\\254\000\247\000\041\000\005\000\ -\\091\001\084\001\083\001\081\001\ -\\075\001\173\001\039\001\078\001\ -\\059\001\040\001\078\001\211\000\ -\\127\000\228\000\220\000\220\000\ -\\051\000\000\000\237\000\110\000\ -\\002\000\204\000\207\000\163\000\ -\\089\000\173\001\110\000\054\000\ -\\110\000\015\000\002\000\173\001\ -\\074\000\143\001\110\000\110\000\ -\\110\000\139\001\089\000\019\000\ -\\161\001\089\000\137\001\146\001\ -\\147\001\068\000\011\001\102\001\ -\\062\001\114\001\087\000\115\001\ -\\116\001\014\000\070\001\071\001\ -\\173\001\052\001\026\001\089\001\ -\\014\000\079\001\050\000\077\001\ -\\076\001\042\000\074\001\219\000\ -\\226\000\212\000\110\000\049\000\ -\\043\000\232\000\173\001\229\000\ -\\238\000\021\000\099\000\083\000\ -\\193\000\114\000\202\000\188\000\ -\\194\000\098\001\199\000\100\000\ -\\114\000\197\000\196\000\084\000\ -\\200\000\101\000\206\000\020\000\ -\\231\000\203\000\201\000\114\000\ -\\195\000\149\001\145\001\144\001\ -\\142\001\075\000\131\001\159\001\ -\\109\000\152\001\069\000\154\001\ -\\089\000\118\001\062\000\064\001\ -\\010\000\072\001\090\001\080\001\ -\\048\001\023\000\063\000\227\000\ -\\003\000\210\000\020\000\163\000\ -\\003\000\019\000\186\000\173\001\ -\\174\000\037\000\103\000\002\000\ -\\018\000\104\000\205\000\143\000\ -\\142\000\185\000\140\001\160\001\ -\\135\001\089\000\076\000\085\000\ -\\069\001\213\000\215\000\022\000\ -\\105\000\106\000\167\000\192\000\ -\\183\000\019\000\173\001\114\000\ -\\187\000\172\000\110\000\098\001\ -\\182\000\020\000\050\000\171\000\ -\\149\000\148\000\020\000\077\000\ -\\155\001\070\001\019\000\214\000\ -\\019\000\003\000\161\000\110\000\ -\\190\000\089\000\189\000\184\000\ -\\102\000\173\000\177\000\179\000\ -\\173\001\198\000\182\000\169\000\ -\\110\000\151\000\150\000\136\001\ -\\065\001\068\001\235\000\167\000\ -\\166\000\191\000\175\000\050\000\ -\\114\000\181\000\180\000\170\000\ -\\067\001\233\000\051\000\160\000\ -\\176\000\107\000\234\000\050\000\ -\\182\000\178\000\086\000" +"\156\000\173\001\170\001\246\000\ +\\135\000\132\000\128\000\225\000\ +\\022\001\003\001\009\001\155\000\ +\\242\000\161\000\161\000\161\000\ +\\154\000\118\000\002\001\114\000\ +\\172\001\174\001\171\001\168\001\ +\\167\001\166\001\165\001\119\000\ +\\136\000\110\000\012\001\016\001\ +\\004\000\005\000\091\000\008\000\ +\\176\001\005\000\018\000\016\000\ +\\091\000\222\000\061\001\139\000\ +\\139\000\005\000\011\000\014\000\ +\\050\000\054\000\005\000\176\001\ +\\131\000\130\000\112\000\112\000\ +\\112\000\064\000\008\001\019\000\ +\\005\000\014\000\005\000\091\000\ +\\157\000\160\000\159\000\158\000\ +\\115\000\006\000\004\001\143\000\ +\\254\000\142\000\169\001\141\000\ +\\140\000\092\000\080\000\011\001\ +\\015\001\071\000\018\001\056\000\ +\\057\000\030\000\251\000\025\000\ +\\147\000\122\000\053\001\124\000\ +\\123\000\106\001\009\000\129\001\ +\\036\001\128\001\034\000\103\001\ +\\177\001\113\000\102\001\114\001\ +\\124\001\013\000\010\000\017\000\ +\\175\001\038\001\182\001\117\000\ +\\025\001\149\000\044\001\133\000\ +\\137\000\047\001\220\000\219\000\ +\\046\000\223\000\224\000\055\001\ +\\056\001\060\001\059\001\047\000\ +\\057\001\061\001\091\000\138\000\ +\\091\000\029\000\014\000\098\001\ +\\090\001\051\001\096\001\026\001\ +\\034\001\033\000\012\000\101\001\ +\\120\000\043\001\112\000\093\000\ +\\116\000\040\001\039\001\125\000\ +\\028\000\052\000\116\000\165\000\ +\\226\000\094\000\238\000\055\000\ +\\170\000\245\000\091\000\153\001\ +\\126\000\143\001\135\001\134\001\ +\\023\001\091\000\154\001\161\001\ +\\019\000\127\000\029\001\024\001\ +\\030\001\243\000\005\001\006\001\ +\\005\000\247\000\001\001\005\000\ +\\255\000\252\000\005\000\005\000\ +\\250\000\005\000\146\000\065\000\ +\\037\001\094\001\005\000\019\000\ +\\014\000\095\000\031\000\081\000\ +\\113\001\115\001\123\001\072\000\ +\\126\001\058\000\059\000\032\000\ +\\180\001\110\001\063\001\035\000\ +\\010\000\107\001\181\001\116\000\ +\\066\000\148\000\218\000\222\000\ +\\058\001\005\000\048\000\046\001\ +\\045\001\005\000\052\001\096\000\ +\\019\000\088\001\014\000\095\001\ +\\032\001\014\000\005\000\087\001\ +\\007\000\019\000\121\000\036\000\ +\\097\000\176\001\176\001\014\000\ +\\176\001\061\001\098\000\099\000\ +\\164\000\002\000\002\000\002\000\ +\\211\000\073\000\067\000\112\000\ +\\140\001\019\000\112\000\019\000\ +\\020\000\083\000\082\000\160\001\ +\\060\000\061\000\007\001\014\001\ +\\091\000\017\001\091\000\020\001\ +\\021\001\019\001\031\001\105\001\ +\\091\000\065\001\130\001\131\001\ +\\014\000\119\001\108\001\112\001\ +\\014\000\178\001\111\001\014\000\ +\\109\001\117\000\044\000\068\001\ +\\100\000\183\001\091\000\038\000\ +\\039\000\027\000\061\001\026\000\ +\\005\000\097\001\089\001\033\001\ +\\035\001\084\001\050\000\087\001\ +\\134\000\099\001\100\001\080\001\ +\\020\000\050\000\049\001\048\001\ +\\027\001\053\000\040\000\050\000\ +\\003\000\232\000\166\000\210\000\ +\\167\000\241\000\084\000\001\000\ +\\244\000\150\001\091\000\024\000\ +\\068\000\136\001\090\000\132\001\ +\\151\001\019\000\156\001\020\000\ +\\019\000\159\001\010\001\111\000\ +\\248\000\253\000\074\000\062\001\ +\\009\000\121\001\122\001\014\000\ +\\125\001\127\001\179\001\045\000\ +\\014\000\019\000\075\000\227\000\ +\\000\001\249\000\041\000\005\000\ +\\093\001\086\001\085\001\083\001\ +\\077\001\176\001\041\001\080\001\ +\\061\001\042\001\080\001\213\000\ +\\129\000\230\000\222\000\222\000\ +\\051\000\000\000\239\000\112\000\ +\\002\000\206\000\209\000\165\000\ +\\091\000\176\001\112\000\054\000\ +\\112\000\015\000\002\000\176\001\ +\\076\000\145\001\112\000\112\000\ +\\112\000\141\001\091\000\019\000\ +\\164\001\091\000\139\001\148\001\ +\\149\001\069\000\013\001\104\001\ +\\064\001\116\001\089\000\117\001\ +\\118\001\014\000\072\001\075\001\ +\\184\001\054\001\028\001\091\001\ +\\014\000\081\001\050\000\079\001\ +\\078\001\042\000\076\001\221\000\ +\\228\000\214\000\112\000\049\000\ +\\043\000\234\000\176\001\231\000\ +\\240\000\021\000\101\000\085\000\ +\\195\000\116\000\204\000\190\000\ +\\196\000\100\001\201\000\102\000\ +\\116\000\199\000\198\000\086\000\ +\\202\000\103\000\208\000\020\000\ +\\233\000\205\000\203\000\116\000\ +\\197\000\152\001\147\001\146\001\ +\\144\001\077\000\133\001\162\001\ +\\111\000\155\001\070\000\157\001\ +\\091\000\120\001\062\000\066\001\ +\\010\000\073\001\176\001\092\001\ +\\082\001\050\001\023\000\063\000\ +\\229\000\003\000\212\000\020\000\ +\\165\000\003\000\019\000\188\000\ +\\176\001\176\000\037\000\105\000\ +\\002\000\018\000\106\000\207\000\ +\\145\000\144\000\187\000\142\001\ +\\163\001\137\001\091\000\078\000\ +\\087\000\071\001\074\001\215\000\ +\\217\000\022\000\107\000\108\000\ +\\169\000\194\000\185\000\019\000\ +\\176\001\116\000\189\000\174\000\ +\\112\000\100\001\184\000\020\000\ +\\050\000\173\000\151\000\150\000\ +\\020\000\079\000\158\001\072\001\ +\\019\000\216\000\019\000\003\000\ +\\163\000\112\000\192\000\091\000\ +\\191\000\186\000\104\000\175\000\ +\\179\000\181\000\176\001\200\000\ +\\184\000\171\000\112\000\153\000\ +\\152\000\138\001\067\001\070\001\ +\\237\000\169\000\168\000\193\000\ +\\177\000\050\000\116\000\183\000\ +\\182\000\172\000\069\001\235\000\ +\\051\000\162\000\178\000\109\000\ +\\236\000\050\000\184\000\180\000\ +\\088\000" val gotoT = "\ -\\001\000\062\002\002\000\016\000\004\000\015\000\006\000\014\000\ +\\001\000\072\002\002\000\016\000\004\000\015\000\006\000\014\000\ \\007\000\013\000\052\000\012\000\067\000\011\000\070\000\010\000\ -\\094\000\009\000\099\000\008\000\115\000\007\000\116\000\006\000\ -\\121\000\005\000\122\000\004\000\123\000\003\000\126\000\002\000\ -\\127\000\001\000\000\000\ +\\096\000\009\000\101\000\008\000\117\000\007\000\118\000\006\000\ +\\123\000\005\000\124\000\004\000\125\000\003\000\128\000\002\000\ +\\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ @@ -835,21 +846,21 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\070\000\010\000\094\000\009\000\099\000\058\000\ -\\116\000\006\000\121\000\005\000\122\000\004\000\123\000\003\000\ -\\126\000\002\000\127\000\001\000\000\000\ +\\052\000\012\000\070\000\010\000\096\000\009\000\101\000\058\000\ +\\118\000\006\000\123\000\005\000\124\000\004\000\125\000\003\000\ +\\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\002\000\065\000\003\000\064\000\004\000\015\000\006\000\014\000\ -\\007\000\013\000\115\000\007\000\000\000\ +\\007\000\013\000\117\000\007\000\000\000\ \\002\000\065\000\003\000\066\000\004\000\015\000\006\000\014\000\ -\\007\000\013\000\115\000\007\000\000\000\ +\\007\000\013\000\117\000\007\000\000\000\ \\002\000\065\000\003\000\067\000\004\000\015\000\006\000\014\000\ -\\007\000\013\000\115\000\007\000\000\000\ +\\007\000\013\000\117\000\007\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\095\000\068\000\000\000\ +\\097\000\068\000\000\000\ \\000\000\ \\000\000\ \\000\000\ @@ -859,79 +870,79 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ -\\116\000\073\000\124\000\072\000\125\000\071\000\000\000\ -\\069\000\079\000\082\000\078\000\116\000\073\000\124\000\077\000\ -\\125\000\071\000\000\000\ -\\052\000\012\000\067\000\082\000\070\000\010\000\091\000\081\000\ -\\092\000\080\000\094\000\009\000\099\000\008\000\116\000\006\000\ -\\121\000\005\000\122\000\004\000\123\000\003\000\126\000\002\000\ -\\127\000\001\000\000\000\ -\\052\000\012\000\067\000\085\000\070\000\010\000\093\000\084\000\ -\\094\000\009\000\099\000\008\000\102\000\083\000\116\000\006\000\ -\\121\000\005\000\122\000\004\000\123\000\003\000\126\000\002\000\ -\\127\000\001\000\000\000\ -\\052\000\012\000\067\000\087\000\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ -\\109\000\090\000\116\000\089\000\118\000\088\000\000\000\ +\\118\000\073\000\126\000\072\000\127\000\071\000\000\000\ +\\069\000\079\000\084\000\078\000\118\000\073\000\126\000\077\000\ +\\127\000\071\000\000\000\ +\\052\000\012\000\067\000\082\000\070\000\010\000\093\000\081\000\ +\\094\000\080\000\096\000\009\000\101\000\008\000\118\000\006\000\ +\\123\000\005\000\124\000\004\000\125\000\003\000\128\000\002\000\ +\\129\000\001\000\000\000\ +\\052\000\012\000\067\000\085\000\070\000\010\000\095\000\084\000\ +\\096\000\009\000\101\000\008\000\104\000\083\000\118\000\006\000\ +\\123\000\005\000\124\000\004\000\125\000\003\000\128\000\002\000\ +\\129\000\001\000\000\000\ +\\052\000\012\000\067\000\087\000\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ +\\111\000\090\000\118\000\089\000\120\000\088\000\000\000\ \\052\000\099\000\053\000\098\000\055\000\097\000\062\000\096\000\ -\\100\000\095\000\103\000\094\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ -\\051\000\110\000\061\000\109\000\103\000\108\000\000\000\ -\\052\000\012\000\067\000\112\000\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ -\\110\000\114\000\116\000\006\000\121\000\113\000\000\000\ -\\116\000\006\000\121\000\115\000\000\000\ -\\109\000\117\000\116\000\089\000\118\000\088\000\000\000\ +\\102\000\095\000\105\000\094\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ +\\051\000\110\000\061\000\109\000\105\000\108\000\000\000\ +\\052\000\012\000\067\000\112\000\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ +\\112\000\114\000\118\000\006\000\123\000\113\000\000\000\ +\\118\000\006\000\123\000\115\000\000\000\ +\\111\000\117\000\118\000\089\000\120\000\088\000\000\000\ \\007\000\121\000\023\000\120\000\042\000\119\000\043\000\118\000\ -\\115\000\007\000\000\000\ -\\065\000\127\000\106\000\126\000\107\000\125\000\114\000\124\000\ -\\115\000\123\000\000\000\ -\\113\000\130\000\000\000\ -\\113\000\132\000\000\000\ -\\052\000\012\000\067\000\133\000\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ +\\117\000\007\000\000\000\ +\\065\000\127\000\108\000\126\000\109\000\125\000\116\000\124\000\ +\\117\000\123\000\000\000\ +\\115\000\130\000\000\000\ +\\115\000\132\000\000\000\ +\\052\000\012\000\067\000\133\000\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\052\000\099\000\055\000\138\000\064\000\137\000\071\000\136\000\ -\\101\000\135\000\103\000\134\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ +\\103\000\135\000\105\000\134\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\139\000\100\000\095\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ -\\056\000\145\000\116\000\144\000\117\000\143\000\000\000\ -\\059\000\150\000\060\000\149\000\103\000\148\000\119\000\147\000\000\000\ -\\052\000\012\000\067\000\152\000\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ -\\051\000\154\000\058\000\153\000\103\000\108\000\000\000\ +\\068\000\139\000\102\000\095\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ +\\056\000\145\000\118\000\144\000\119\000\143\000\000\000\ +\\059\000\150\000\060\000\149\000\105\000\148\000\121\000\147\000\000\000\ +\\052\000\012\000\067\000\152\000\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ +\\051\000\154\000\058\000\153\000\105\000\108\000\000\000\ \\000\000\ \\000\000\ -\\022\000\156\000\116\000\155\000\000\000\ -\\020\000\158\000\116\000\157\000\000\000\ -\\008\000\160\000\116\000\159\000\000\000\ -\\116\000\089\000\118\000\161\000\000\000\ +\\022\000\156\000\118\000\155\000\000\000\ +\\020\000\158\000\118\000\157\000\000\000\ +\\008\000\160\000\118\000\159\000\000\000\ +\\118\000\089\000\120\000\161\000\000\000\ \\000\000\ \\047\000\168\000\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ -\\052\000\012\000\067\000\173\000\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ +\\121\000\164\000\122\000\163\000\000\000\ +\\052\000\012\000\067\000\174\000\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\174\000\100\000\095\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ -\\052\000\012\000\067\000\175\000\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ -\\116\000\089\000\118\000\176\000\000\000\ +\\068\000\175\000\102\000\095\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ +\\052\000\012\000\067\000\176\000\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ +\\118\000\089\000\120\000\177\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\070\000\178\000\094\000\009\000\116\000\006\000\ -\\121\000\005\000\122\000\004\000\123\000\003\000\126\000\002\000\ -\\127\000\001\000\000\000\ +\\052\000\012\000\070\000\179\000\096\000\009\000\118\000\006\000\ +\\123\000\005\000\124\000\004\000\125\000\003\000\128\000\002\000\ +\\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ @@ -950,149 +961,150 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ -\\109\000\189\000\116\000\089\000\118\000\088\000\000\000\ +\\111\000\190\000\118\000\089\000\120\000\088\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\098\000\055\000\097\000\062\000\191\000\ -\\100\000\095\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ +\\052\000\099\000\053\000\098\000\055\000\097\000\062\000\192\000\ +\\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\055\000\138\000\101\000\192\000\116\000\006\000\ -\\121\000\005\000\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ +\\052\000\099\000\055\000\138\000\103\000\193\000\118\000\006\000\ +\\123\000\005\000\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\054\000\199\000\083\000\198\000\116\000\197\000\124\000\196\000\ -\\125\000\071\000\000\000\ -\\052\000\099\000\053\000\203\000\055\000\097\000\096\000\202\000\ -\\097\000\201\000\100\000\095\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ -\\052\000\099\000\053\000\206\000\055\000\097\000\098\000\205\000\ -\\100\000\095\000\104\000\204\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ -\\052\000\099\000\053\000\210\000\055\000\097\000\063\000\209\000\ -\\100\000\095\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ -\\116\000\006\000\121\000\115\000\000\000\ +\\054\000\200\000\085\000\199\000\118\000\198\000\126\000\197\000\ +\\127\000\071\000\000\000\ +\\052\000\099\000\053\000\204\000\055\000\097\000\098\000\203\000\ +\\099\000\202\000\102\000\095\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ +\\052\000\099\000\053\000\207\000\055\000\097\000\100\000\206\000\ +\\102\000\095\000\106\000\205\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ +\\052\000\099\000\053\000\211\000\055\000\097\000\063\000\210\000\ +\\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ +\\118\000\006\000\123\000\115\000\000\000\ \\000\000\ \\000\000\ -\\119\000\213\000\000\000\ -\\104\000\204\000\000\000\ +\\072\000\215\000\073\000\214\000\000\000\ +\\106\000\205\000\000\000\ \\000\000\ -\\110\000\214\000\116\000\006\000\121\000\113\000\000\000\ +\\112\000\217\000\118\000\006\000\123\000\113\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\007\000\121\000\042\000\215\000\115\000\007\000\000\000\ +\\007\000\121\000\042\000\218\000\117\000\007\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\106\000\217\000\114\000\124\000\115\000\123\000\000\000\ +\\108\000\220\000\116\000\124\000\117\000\123\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\065\000\219\000\106\000\126\000\107\000\125\000\114\000\124\000\ -\\115\000\123\000\000\000\ -\\109\000\220\000\116\000\089\000\118\000\088\000\000\000\ +\\065\000\222\000\108\000\126\000\109\000\125\000\116\000\124\000\ +\\117\000\123\000\000\000\ +\\111\000\223\000\118\000\089\000\120\000\088\000\000\000\ \\000\000\ -\\109\000\221\000\116\000\089\000\118\000\088\000\000\000\ +\\111\000\224\000\118\000\089\000\120\000\088\000\000\000\ \\000\000\ -\\052\000\099\000\055\000\138\000\064\000\223\000\071\000\136\000\ -\\101\000\135\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ -\\086\000\224\000\000\000\ -\\075\000\226\000\000\000\ +\\052\000\099\000\055\000\138\000\064\000\226\000\071\000\136\000\ +\\103\000\135\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ +\\088\000\227\000\000\000\ +\\077\000\229\000\000\000\ \\000\000\ -\\052\000\099\000\055\000\138\000\101\000\228\000\116\000\006\000\ -\\121\000\005\000\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ +\\052\000\099\000\055\000\138\000\103\000\231\000\118\000\006\000\ +\\123\000\005\000\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ -\\080\000\229\000\000\000\ +\\082\000\232\000\000\000\ \\000\000\ -\\052\000\099\000\053\000\206\000\055\000\097\000\098\000\205\000\ -\\100\000\095\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ -\\090\000\232\000\000\000\ +\\052\000\099\000\053\000\207\000\055\000\097\000\100\000\206\000\ +\\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ +\\092\000\235\000\000\000\ \\000\000\ \\000\000\ -\\116\000\235\000\000\000\ +\\118\000\238\000\000\000\ \\000\000\ -\\119\000\237\000\000\000\ +\\121\000\240\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\119\000\243\000\000\000\ -\\025\000\245\000\026\000\244\000\000\000\ +\\121\000\246\000\000\000\ +\\025\000\248\000\026\000\247\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\109\000\250\000\116\000\089\000\118\000\088\000\000\000\ +\\111\000\253\000\118\000\089\000\120\000\088\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\119\000\164\000\120\000\253\000\000\000\ +\\121\000\164\000\122\000\000\001\000\000\ \\000\000\ \\000\000\ +\\118\000\089\000\120\000\004\001\000\000\ \\000\000\ -\\046\000\003\001\088\000\002\001\116\000\073\000\124\000\001\001\ -\\125\000\071\000\000\000\ -\\047\000\005\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\105\000\004\001\119\000\164\000\120\000\163\000\000\000\ +\\046\000\007\001\090\000\006\001\118\000\073\000\126\000\005\001\ +\\127\000\071\000\000\000\ +\\047\000\009\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\107\000\008\001\121\000\164\000\122\000\163\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\095\000\006\001\000\000\ -\\052\000\012\000\067\000\007\001\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ +\\097\000\010\001\000\000\ +\\052\000\012\000\067\000\011\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\082\000\070\000\010\000\092\000\009\001\ -\\094\000\009\000\099\000\008\000\116\000\006\000\121\000\005\000\ -\\122\000\004\000\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ +\\052\000\012\000\067\000\082\000\070\000\010\000\094\000\013\001\ +\\096\000\009\000\101\000\008\000\118\000\006\000\123\000\005\000\ +\\124\000\004\000\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\012\001\070\000\010\000\094\000\009\000\ -\\099\000\008\000\102\000\011\001\116\000\006\000\121\000\005\000\ -\\122\000\004\000\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ -\\052\000\012\000\067\000\082\000\070\000\010\000\092\000\013\001\ -\\094\000\009\000\099\000\008\000\116\000\006\000\121\000\005\000\ -\\122\000\004\000\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ +\\052\000\012\000\067\000\016\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\104\000\015\001\118\000\006\000\123\000\005\000\ +\\124\000\004\000\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ +\\052\000\012\000\067\000\082\000\070\000\010\000\094\000\017\001\ +\\096\000\009\000\101\000\008\000\118\000\006\000\123\000\005\000\ +\\124\000\004\000\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ -\\052\000\012\000\067\000\014\001\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ +\\052\000\012\000\067\000\018\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ -\\116\000\089\000\118\000\015\001\000\000\ +\\118\000\089\000\120\000\019\001\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\017\001\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ -\\047\000\018\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ -\\052\000\099\000\053\000\019\001\055\000\097\000\100\000\095\000\ -\\116\000\006\000\121\000\005\000\122\000\093\000\126\000\002\000\ -\\127\000\001\000\000\000\ +\\052\000\012\000\067\000\021\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ +\\047\000\022\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ +\\052\000\099\000\053\000\023\001\055\000\097\000\102\000\095\000\ +\\118\000\006\000\123\000\005\000\124\000\093\000\128\000\002\000\ +\\129\000\001\000\000\000\ \\000\000\ -\\086\000\021\001\000\000\ +\\088\000\025\001\000\000\ \\000\000\ \\000\000\ \\000\000\ @@ -1106,301 +1118,309 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\210\000\055\000\097\000\063\000\031\001\ -\\100\000\095\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ +\\052\000\099\000\053\000\211\000\055\000\097\000\063\000\035\001\ +\\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ +\\121\000\036\001\000\000\ +\\118\000\089\000\120\000\037\001\000\000\ \\000\000\ \\000\000\ -\\007\000\121\000\023\000\033\001\042\000\119\000\043\000\118\000\ -\\115\000\007\000\000\000\ +\\007\000\121\000\023\000\039\001\042\000\119\000\043\000\118\000\ +\\117\000\007\000\000\000\ \\000\000\ -\\052\000\012\000\067\000\035\001\070\000\010\000\094\000\009\000\ -\\099\000\008\000\102\000\034\001\116\000\006\000\121\000\005\000\ -\\122\000\004\000\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ +\\052\000\012\000\067\000\041\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\104\000\040\001\118\000\006\000\123\000\005\000\ +\\124\000\004\000\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\037\001\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ +\\052\000\012\000\067\000\043\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ -\\047\000\039\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ +\\047\000\045\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ \\000\000\ -\\052\000\099\000\055\000\138\000\064\000\040\001\071\000\136\000\ -\\101\000\135\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ +\\052\000\099\000\055\000\138\000\064\000\046\001\071\000\136\000\ +\\103\000\135\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\041\001\100\000\095\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ -\\052\000\012\000\067\000\042\001\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ -\\081\000\043\001\000\000\ -\\116\000\006\000\121\000\005\000\122\000\046\001\123\000\045\001\000\000\ -\\047\000\047\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ -\\000\000\ -\\057\000\049\001\116\000\144\000\117\000\048\001\000\000\ -\\000\000\ -\\051\000\110\000\061\000\052\001\103\000\108\000\000\000\ -\\051\000\110\000\061\000\053\001\103\000\108\000\000\000\ +\\068\000\047\001\102\000\095\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ +\\052\000\012\000\067\000\048\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ +\\083\000\049\001\000\000\ +\\118\000\006\000\123\000\005\000\124\000\052\001\125\000\051\001\000\000\ +\\047\000\053\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ +\\000\000\ +\\057\000\055\001\118\000\144\000\119\000\054\001\000\000\ +\\000\000\ +\\051\000\110\000\061\000\058\001\105\000\108\000\000\000\ +\\051\000\110\000\061\000\059\001\105\000\108\000\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\054\001\100\000\095\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ -\\051\000\110\000\061\000\055\001\103\000\108\000\000\000\ -\\065\000\056\001\106\000\126\000\107\000\125\000\114\000\124\000\ -\\115\000\123\000\000\000\ +\\068\000\060\001\102\000\095\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ +\\051\000\110\000\061\000\061\001\105\000\108\000\000\000\ +\\065\000\062\001\108\000\126\000\109\000\125\000\116\000\124\000\ +\\117\000\123\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\021\000\060\001\116\000\059\001\000\000\ -\\021\000\062\001\116\000\059\001\000\000\ -\\021\000\063\001\116\000\059\001\000\000\ -\\018\000\065\001\116\000\064\001\000\000\ +\\021\000\066\001\118\000\065\001\000\000\ +\\021\000\068\001\118\000\065\001\000\000\ +\\021\000\069\001\118\000\065\001\000\000\ +\\018\000\071\001\118\000\070\001\000\000\ \\000\000\ -\\116\000\089\000\118\000\067\001\000\000\ -\\116\000\069\001\000\000\ +\\118\000\089\000\120\000\073\001\000\000\ +\\118\000\075\001\000\000\ \\000\000\ -\\048\000\071\001\049\000\166\000\050\000\165\000\119\000\164\000\ -\\120\000\163\000\000\000\ -\\116\000\072\001\000\000\ -\\047\000\073\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ +\\048\000\077\001\049\000\166\000\050\000\165\000\121\000\164\000\ +\\122\000\163\000\000\000\ +\\118\000\078\001\000\000\ +\\047\000\079\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ +\\121\000\164\000\122\000\080\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\072\000\079\001\000\000\ -\\116\000\089\000\118\000\081\001\000\000\ +\\074\000\086\001\000\000\ +\\118\000\089\000\120\000\088\001\000\000\ \\000\000\ -\\116\000\089\000\118\000\082\001\000\000\ +\\118\000\089\000\120\000\089\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\109\000\083\001\116\000\089\000\118\000\088\000\000\000\ -\\073\000\084\001\000\000\ +\\111\000\090\001\118\000\089\000\120\000\088\000\000\000\ +\\075\000\091\001\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\086\001\055\000\097\000\100\000\095\000\ -\\116\000\006\000\121\000\005\000\122\000\093\000\126\000\002\000\ -\\127\000\001\000\000\000\ -\\084\000\087\001\000\000\ +\\052\000\099\000\053\000\093\001\055\000\097\000\102\000\095\000\ +\\118\000\006\000\123\000\005\000\124\000\093\000\128\000\002\000\ +\\129\000\001\000\000\000\ +\\086\000\094\001\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\203\000\055\000\097\000\097\000\089\001\ -\\100\000\095\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ +\\052\000\099\000\053\000\204\000\055\000\097\000\099\000\096\001\ +\\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\203\000\055\000\097\000\097\000\090\001\ -\\100\000\095\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ +\\052\000\099\000\053\000\204\000\055\000\097\000\099\000\097\001\ +\\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ \\000\000\ -\\104\000\091\001\000\000\ +\\106\000\098\001\000\000\ \\000\000\ \\000\000\ -\\047\000\094\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ \\000\000\ \\000\000\ +\\111\000\102\001\118\000\089\000\120\000\088\000\000\000\ \\000\000\ -\\065\000\098\001\106\000\126\000\107\000\125\000\114\000\124\000\ -\\115\000\123\000\000\000\ \\000\000\ -\\052\000\012\000\067\000\100\001\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ \\000\000\ +\\065\000\106\001\108\000\126\000\109\000\125\000\116\000\124\000\ +\\117\000\123\000\000\000\ \\000\000\ +\\052\000\012\000\067\000\108\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\056\000\101\001\116\000\144\000\117\000\143\000\000\000\ -\\081\000\102\001\000\000\ \\000\000\ \\000\000\ -\\090\000\103\001\000\000\ -\\078\000\104\001\000\000\ -\\119\000\164\000\120\000\106\001\000\000\ -\\057\000\107\001\116\000\144\000\117\000\048\001\000\000\ +\\056\000\109\001\118\000\144\000\119\000\143\000\000\000\ +\\083\000\110\001\000\000\ \\000\000\ \\000\000\ +\\092\000\111\001\000\000\ +\\080\000\112\001\000\000\ +\\121\000\164\000\122\000\114\001\000\000\ +\\057\000\115\001\118\000\144\000\119\000\054\001\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\057\000\110\001\116\000\144\000\117\000\048\001\000\000\ -\\024\000\113\001\116\000\112\001\121\000\111\001\000\000\ \\000\000\ \\000\000\ -\\018\000\117\001\000\000\ +\\057\000\118\001\118\000\144\000\119\000\054\001\000\000\ +\\024\000\121\001\118\000\120\001\123\000\119\001\000\000\ \\000\000\ -\\029\000\118\001\000\000\ \\000\000\ -\\019\000\121\001\000\000\ +\\018\000\125\001\000\000\ \\000\000\ +\\029\000\126\001\000\000\ \\000\000\ -\\109\000\132\001\116\000\089\000\118\000\088\000\000\000\ -\\116\000\133\001\000\000\ -\\116\000\089\000\118\000\137\001\000\000\ +\\019\000\129\001\000\000\ \\000\000\ \\000\000\ +\\111\000\140\001\118\000\089\000\120\000\088\000\000\000\ +\\118\000\141\001\000\000\ +\\118\000\089\000\120\000\145\001\000\000\ \\000\000\ -\\047\000\140\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ \\000\000\ -\\119\000\164\000\120\000\142\001\000\000\ -\\047\000\144\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\105\000\143\001\119\000\164\000\120\000\163\000\000\000\ \\000\000\ \\000\000\ -\\069\000\146\001\116\000\073\000\124\000\077\000\125\000\071\000\000\000\ +\\047\000\148\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ \\000\000\ +\\121\000\164\000\122\000\150\001\000\000\ +\\047\000\152\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\107\000\151\001\121\000\164\000\122\000\163\000\000\000\ \\000\000\ \\000\000\ +\\069\000\154\001\118\000\073\000\126\000\077\000\127\000\071\000\000\000\ \\000\000\ -\\052\000\099\000\053\000\098\000\055\000\097\000\062\000\148\001\ -\\100\000\095\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ -\\085\000\149\001\000\000\ -\\085\000\151\001\000\000\ -\\052\000\099\000\053\000\152\001\055\000\097\000\100\000\095\000\ -\\116\000\006\000\121\000\005\000\122\000\093\000\126\000\002\000\ -\\127\000\001\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\052\000\099\000\053\000\098\000\055\000\097\000\062\000\156\001\ +\\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ +\\087\000\157\001\000\000\ +\\087\000\159\001\000\000\ +\\052\000\099\000\053\000\160\001\055\000\097\000\102\000\095\000\ +\\118\000\006\000\123\000\005\000\124\000\093\000\128\000\002\000\ +\\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\154\001\100\000\095\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ -\\077\000\155\001\000\000\ +\\068\000\162\001\102\000\095\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ +\\047\000\163\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\158\001\070\000\010\000\094\000\009\000\ -\\099\000\008\000\116\000\006\000\121\000\005\000\122\000\004\000\ -\\123\000\003\000\126\000\002\000\127\000\001\000\000\000\ -\\076\000\159\001\000\000\ \\000\000\ +\\052\000\012\000\067\000\166\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ +\\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ +\\078\000\167\001\000\000\ \\000\000\ -\\079\000\161\001\000\000\ \\000\000\ -\\051\000\154\000\058\000\163\001\103\000\108\000\000\000\ +\\081\000\169\001\000\000\ \\000\000\ -\\078\000\164\001\000\000\ -\\065\000\165\001\106\000\126\000\107\000\125\000\114\000\124\000\ -\\115\000\123\000\000\000\ +\\051\000\154\000\058\000\171\001\105\000\108\000\000\000\ \\000\000\ -\\078\000\166\001\000\000\ +\\080\000\172\001\000\000\ +\\065\000\173\001\108\000\126\000\109\000\125\000\116\000\124\000\ +\\117\000\123\000\000\000\ \\000\000\ +\\080\000\174\001\000\000\ \\000\000\ -\\025\000\169\001\028\000\168\001\000\000\ -\\007\000\121\000\023\000\171\001\042\000\119\000\043\000\118\000\ -\\115\000\007\000\000\000\ -\\007\000\121\000\023\000\172\001\042\000\119\000\043\000\118\000\ -\\115\000\007\000\000\000\ -\\044\000\173\001\000\000\ -\\019\000\121\001\000\000\ \\000\000\ -\\020\000\176\001\116\000\157\000\000\000\ -\\021\000\177\001\116\000\059\001\000\000\ +\\025\000\177\001\028\000\176\001\000\000\ +\\007\000\121\000\023\000\179\001\042\000\119\000\043\000\118\000\ +\\117\000\007\000\000\000\ +\\007\000\121\000\023\000\180\001\042\000\119\000\043\000\118\000\ +\\117\000\007\000\000\000\ +\\044\000\181\001\000\000\ +\\019\000\129\001\000\000\ \\000\000\ +\\020\000\184\001\118\000\157\000\000\000\ +\\021\000\185\001\118\000\065\001\000\000\ \\000\000\ -\\025\000\245\000\026\000\178\001\000\000\ -\\017\000\180\001\116\000\089\000\118\000\179\001\000\000\ -\\015\000\184\001\016\000\183\001\035\000\182\001\051\000\181\001\ -\\103\000\108\000\000\000\ -\\010\000\186\001\116\000\185\001\000\000\ -\\013\000\190\001\014\000\189\001\103\000\188\001\119\000\187\001\000\000\ -\\009\000\192\001\116\000\191\001\000\000\ -\\111\000\194\001\116\000\006\000\121\000\193\001\000\000\ -\\021\000\198\001\108\000\197\001\116\000\196\001\000\000\ -\\015\000\200\001\051\000\199\001\103\000\108\000\000\000\ \\000\000\ +\\025\000\248\000\026\000\186\001\000\000\ +\\017\000\188\001\118\000\089\000\120\000\187\001\000\000\ +\\015\000\192\001\016\000\191\001\035\000\190\001\051\000\189\001\ +\\105\000\108\000\000\000\ +\\010\000\194\001\118\000\193\001\000\000\ +\\013\000\198\001\014\000\197\001\105\000\196\001\121\000\195\001\000\000\ +\\009\000\200\001\118\000\199\001\000\000\ +\\113\000\202\001\118\000\006\000\123\000\201\001\000\000\ +\\021\000\206\001\110\000\205\001\118\000\204\001\000\000\ +\\015\000\208\001\051\000\207\001\105\000\108\000\000\000\ \\000\000\ -\\116\000\202\001\000\000\ -\\116\000\203\001\000\000\ -\\116\000\204\001\000\000\ \\000\000\ -\\109\000\205\001\116\000\089\000\118\000\088\000\000\000\ -\\047\000\206\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ -\\089\000\207\001\000\000\ -\\116\000\089\000\118\000\209\001\000\000\ +\\118\000\210\001\000\000\ +\\118\000\211\001\000\000\ +\\118\000\212\001\000\000\ \\000\000\ +\\111\000\213\001\118\000\089\000\120\000\088\000\000\000\ +\\047\000\214\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ +\\091\000\215\001\000\000\ +\\118\000\089\000\120\000\217\001\000\000\ \\000\000\ \\000\000\ -\\116\000\089\000\118\000\211\001\000\000\ \\000\000\ +\\118\000\089\000\120\000\219\001\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\054\000\213\001\116\000\197\000\124\000\196\000\125\000\071\000\000\000\ +\\000\000\ +\\054\000\221\001\118\000\198\000\126\000\197\000\127\000\071\000\000\000\ \\000\000\ \\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\214\001\100\000\095\000\116\000\006\000\121\000\005\000\ -\\122\000\093\000\126\000\002\000\127\000\001\000\000\000\ -\\074\000\215\001\000\000\ +\\068\000\222\001\102\000\095\000\118\000\006\000\123\000\005\000\ +\\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ +\\076\000\223\001\000\000\ +\\079\000\225\001\000\000\ +\\000\000\ \\000\000\ -\\051\000\110\000\061\000\217\001\103\000\108\000\000\000\ \\000\000\ \\000\000\ +\\052\000\099\000\055\000\138\000\071\000\227\001\103\000\135\000\ +\\118\000\006\000\123\000\005\000\124\000\093\000\128\000\002\000\ +\\129\000\001\000\000\000\ \\000\000\ -\\052\000\099\000\055\000\138\000\071\000\218\001\101\000\135\000\ -\\116\000\006\000\121\000\005\000\122\000\093\000\126\000\002\000\ -\\127\000\001\000\000\000\ +\\057\000\228\001\118\000\144\000\119\000\054\001\000\000\ \\000\000\ -\\057\000\219\001\116\000\144\000\117\000\048\001\000\000\ \\000\000\ \\000\000\ \\000\000\ +\\007\000\121\000\023\000\231\001\024\000\230\001\042\000\119\000\ +\\043\000\118\000\117\000\007\000\118\000\120\001\123\000\119\001\000\000\ \\000\000\ -\\007\000\121\000\023\000\222\001\024\000\221\001\042\000\119\000\ -\\043\000\118\000\115\000\007\000\116\000\112\001\121\000\111\001\000\000\ \\000\000\ +\\022\000\232\001\118\000\155\000\000\000\ \\000\000\ -\\022\000\223\001\116\000\155\000\000\000\ \\000\000\ \\000\000\ +\\051\000\235\001\105\000\108\000\000\000\ \\000\000\ -\\051\000\226\001\103\000\108\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ +\\121\000\239\001\000\000\ \\000\000\ -\\119\000\230\001\000\000\ \\000\000\ \\000\000\ +\\092\000\241\001\000\000\ \\000\000\ -\\090\000\232\001\000\000\ \\000\000\ +\\121\000\243\001\000\000\ \\000\000\ -\\119\000\234\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ +\\114\000\247\001\121\000\164\000\122\000\246\001\000\000\ +\\110\000\249\001\118\000\248\001\000\000\ \\000\000\ -\\112\000\238\001\119\000\164\000\120\000\237\001\000\000\ -\\108\000\240\001\116\000\239\001\000\000\ \\000\000\ +\\121\000\250\001\000\000\ \\000\000\ -\\119\000\241\001\000\000\ \\000\000\ \\000\000\ \\000\000\ @@ -1408,127 +1428,128 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ +\\046\000\252\001\118\000\073\000\126\000\005\001\127\000\071\000\000\000\ \\000\000\ -\\046\000\243\001\116\000\073\000\124\000\001\001\125\000\071\000\000\000\ +\\118\000\089\000\120\000\253\001\000\000\ \\000\000\ -\\116\000\089\000\118\000\244\001\000\000\ +\\111\000\255\001\118\000\089\000\120\000\088\000\000\000\ \\000\000\ -\\109\000\246\001\116\000\089\000\118\000\088\000\000\000\ \\000\000\ \\000\000\ +\\052\000\099\000\053\000\211\000\055\000\097\000\063\000\001\002\ +\\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ +\\128\000\002\000\129\000\001\000\000\000\ \\000\000\ -\\052\000\099\000\053\000\210\000\055\000\097\000\063\000\248\001\ -\\100\000\095\000\116\000\006\000\121\000\005\000\122\000\093\000\ -\\126\000\002\000\127\000\001\000\000\000\ +\\051\000\110\000\061\000\002\002\105\000\108\000\000\000\ \\000\000\ \\000\000\ \\000\000\ +\\025\000\177\001\000\000\ \\000\000\ -\\025\000\169\001\000\000\ \\000\000\ +\\024\000\005\002\118\000\120\001\123\000\119\001\000\000\ \\000\000\ -\\024\000\251\001\116\000\112\001\121\000\111\001\000\000\ +\\121\000\164\000\122\000\006\002\000\000\ +\\025\000\248\000\026\000\007\002\000\000\ +\\024\000\008\002\118\000\120\001\123\000\119\001\000\000\ +\\047\000\009\002\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ +\\034\000\010\002\000\000\ +\\016\000\191\001\035\000\014\002\051\000\013\002\105\000\108\000\000\000\ +\\031\000\015\002\000\000\ +\\011\000\018\002\118\000\144\000\119\000\017\002\000\000\ \\000\000\ -\\119\000\164\000\120\000\252\001\000\000\ -\\025\000\245\000\026\000\253\001\000\000\ -\\024\000\254\001\116\000\112\001\121\000\111\001\000\000\ -\\047\000\255\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ -\\034\000\000\002\000\000\ -\\016\000\183\001\035\000\004\002\051\000\003\002\103\000\108\000\000\000\ -\\031\000\005\002\000\000\ -\\011\000\008\002\116\000\144\000\117\000\007\002\000\000\ +\\021\000\021\002\118\000\065\001\000\000\ +\\113\000\023\002\118\000\006\000\123\000\022\002\000\000\ \\000\000\ -\\021\000\011\002\116\000\059\001\000\000\ -\\111\000\013\002\116\000\006\000\121\000\012\002\000\000\ \\000\000\ +\\110\000\249\001\118\000\248\001\000\000\ \\000\000\ -\\108\000\240\001\116\000\239\001\000\000\ +\\034\000\010\002\000\000\ \\000\000\ -\\034\000\000\002\000\000\ \\000\000\ \\000\000\ +\\111\000\025\002\118\000\089\000\120\000\088\000\000\000\ \\000\000\ -\\109\000\015\002\116\000\089\000\118\000\088\000\000\000\ +\\089\000\027\002\000\000\ \\000\000\ -\\087\000\017\002\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\025\000\169\001\000\000\ +\\025\000\177\001\000\000\ \\000\000\ \\000\000\ -\\025\000\169\001\027\000\022\002\000\000\ -\\036\000\024\002\000\000\ +\\025\000\177\001\027\000\032\002\000\000\ +\\036\000\034\002\000\000\ \\000\000\ -\\047\000\026\002\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ -\\015\000\027\002\051\000\199\001\103\000\108\000\000\000\ -\\119\000\028\002\000\000\ +\\047\000\036\002\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ +\\015\000\037\002\051\000\207\001\105\000\108\000\000\000\ +\\121\000\038\002\000\000\ \\000\000\ \\000\000\ -\\010\000\029\002\116\000\185\001\000\000\ -\\090\000\030\002\000\000\ -\\033\000\031\002\000\000\ -\\119\000\164\000\120\000\033\002\000\000\ -\\011\000\034\002\116\000\144\000\117\000\007\002\000\000\ -\\030\000\035\002\000\000\ +\\010\000\039\002\118\000\193\001\000\000\ +\\092\000\040\002\000\000\ +\\033\000\041\002\000\000\ +\\121\000\164\000\122\000\043\002\000\000\ +\\011\000\044\002\118\000\144\000\119\000\017\002\000\000\ +\\030\000\045\002\000\000\ \\000\000\ \\000\000\ -\\112\000\038\002\119\000\164\000\120\000\037\002\000\000\ +\\114\000\048\002\121\000\164\000\122\000\047\002\000\000\ \\000\000\ \\000\000\ -\\074\000\040\002\000\000\ -\\047\000\041\002\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ +\\076\000\050\002\000\000\ +\\047\000\051\002\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ \\000\000\ -\\047\000\042\002\048\000\167\000\049\000\166\000\050\000\165\000\ -\\119\000\164\000\120\000\163\000\000\000\ -\\024\000\043\002\116\000\112\001\121\000\111\001\000\000\ +\\047\000\052\002\048\000\167\000\049\000\166\000\050\000\165\000\ +\\121\000\164\000\122\000\163\000\000\000\ +\\024\000\053\002\118\000\120\001\123\000\119\001\000\000\ \\000\000\ -\\008\000\044\002\116\000\159\000\000\000\ +\\008\000\054\002\118\000\159\000\000\000\ \\000\000\ -\\017\000\045\002\116\000\089\000\118\000\179\001\000\000\ +\\017\000\055\002\118\000\089\000\120\000\187\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\032\000\046\002\000\000\ +\\032\000\056\002\000\000\ \\000\000\ -\\012\000\049\002\051\000\048\002\103\000\108\000\000\000\ +\\012\000\059\002\051\000\058\002\105\000\108\000\000\000\ \\000\000\ -\\033\000\050\002\000\000\ +\\033\000\060\002\000\000\ \\000\000\ -\\009\000\051\002\116\000\191\001\000\000\ +\\009\000\061\002\118\000\199\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\087\000\052\002\000\000\ -\\045\000\053\002\000\000\ -\\025\000\169\001\027\000\055\002\000\000\ +\\089\000\062\002\000\000\ +\\045\000\063\002\000\000\ +\\025\000\177\001\027\000\065\002\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\011\000\056\002\116\000\144\000\117\000\007\002\000\000\ -\\119\000\057\002\000\000\ +\\011\000\066\002\118\000\144\000\119\000\017\002\000\000\ +\\121\000\067\002\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\044\000\058\002\000\000\ +\\044\000\068\002\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\011\000\060\002\116\000\144\000\117\000\007\002\000\000\ -\\033\000\061\002\000\000\ +\\011\000\070\002\118\000\144\000\119\000\017\002\000\000\ +\\033\000\071\002\000\000\ \\000\000\ \\000\000\ \" -val numstates = 575 -val numrules = 310 +val numstates = 585 +val numrules = 315 val s = ref "" and index = ref 0 val string_to_int = fn () => let val i = !index @@ -1651,6 +1672,8 @@ datatype svalue = VOID | ntVOID of unit -> unit | AndFnValBind_opt of unit -> (valbind option) | AndValBind_opt of unit -> (valbind option) | CommaExpRow_opt of unit -> (exprow option) + | RegVarSeq1 of unit -> (RegVar.regvar list) + | RegVarSeq of unit -> (RegVar.regvar list) | FClause of unit -> (FClause) | AtExp of unit -> (atexp) | ExpRow of unit -> (exprow) | Match_ of unit -> (match) | Exp_ of unit -> (exp) | MRule of unit -> (mrule) @@ -1845,41 +1868,41 @@ of ( 0, ( ( _, ( MlyValue.ID ID1, ID1left, ID1right)) :: rest671)) => () in ( ID ) end) - in ( LrTable.NT 115, ( result, ID1left, ID1right), rest671) + in ( LrTable.NT 117, ( result, ID1left, ID1right), rest671) end | ( 1, ( ( _, ( _, STAR1left, STAR1right)) :: rest671)) => let val result = MlyValue.Ident (fn _ => ( "*" )) - in ( LrTable.NT 115, ( result, STAR1left, STAR1right), rest671) + in ( LrTable.NT 117, ( result, STAR1left, STAR1right), rest671) end | ( 2, ( ( _, ( MlyValue.Ident Ident1, Ident1left, Ident1right)) :: rest671)) => let val result = MlyValue.OpIdent (fn _ => let val ( Ident as Ident1) = Ident1 () in ( OP_OPT(Ident, false) ) end) - in ( LrTable.NT 116, ( result, Ident1left, Ident1right), rest671) + in ( LrTable.NT 118, ( result, Ident1left, Ident1right), rest671) end | ( 3, ( ( _, ( MlyValue.Ident Ident1, _, Ident1right)) :: ( _, ( _, OP1left, _)) :: rest671)) => let val result = MlyValue.OpIdent (fn _ => let val (Ident as Ident1) = Ident1 () in ( OP_OPT(Ident, true) ) end) - in ( LrTable.NT 116, ( result, OP1left, Ident1right), rest671) + in ( LrTable.NT 118, ( result, OP1left, Ident1right), rest671) end | ( 4, ( ( _, ( MlyValue.Ident Ident1, Ident1left, Ident1right)) :: rest671)) => let val result = MlyValue.EqIdent (fn _ => let val ( Ident as Ident1) = Ident1 () in ( Ident ) end) - in ( LrTable.NT 117, ( result, Ident1left, Ident1right), rest671) + in ( LrTable.NT 119, ( result, Ident1left, Ident1right), rest671) end | ( 5, ( ( _, ( _, EQUALS1left, EQUALS1right)) :: rest671)) => let val result = MlyValue.EqIdent (fn _ => ( "=" )) - in ( LrTable.NT 117, ( result, EQUALS1left, EQUALS1right), rest671) + in ( LrTable.NT 119, ( result, EQUALS1left, EQUALS1right), rest671) end | ( 6, ( ( _, ( _, HASHHASH1left, HASHHASH1right)) :: rest671)) => let val result = MlyValue.EqIdent (fn _ => ( "##" )) - in ( LrTable.NT 117, ( result, HASHHASH1left, HASHHASH1right), + in ( LrTable.NT 119, ( result, HASHHASH1left, HASHHASH1right), rest671) end | ( 7, ( ( _, ( MlyValue.ID ID1, ID1left, ID1right)) :: rest671)) => @@ -1887,7 +1910,7 @@ end ID1 () in ( ID ) end) - in ( LrTable.NT 118, ( result, ID1left, ID1right), rest671) + in ( LrTable.NT 120, ( result, ID1left, ID1right), rest671) end | ( 8, ( ( _, ( MlyValue.TypeIdent TypeIdent1, TypeIdent1left, TypeIdent1right)) :: rest671)) => let val result = @@ -1895,7 +1918,7 @@ MlyValue.LongTypeIdent (fn _ => let val (TypeIdent as TypeIdent1) = TypeIdent1 () in ( [TypeIdent] ) end) - in ( LrTable.NT 119, ( result, TypeIdent1left, TypeIdent1right), + in ( LrTable.NT 121, ( result, TypeIdent1left, TypeIdent1right), rest671) end | ( 9, ( ( _, ( MlyValue.QUAL_ID QUAL_ID1, QUAL_ID1left, @@ -1904,7 +1927,7 @@ MlyValue.LongTypeIdent (fn _ => let val (QUAL_ID as QUAL_ID1) = QUAL_ID1 () in ( QUAL_ID ) end) - in ( LrTable.NT 119, ( result, QUAL_ID1left, QUAL_ID1right), rest671) + in ( LrTable.NT 121, ( result, QUAL_ID1left, QUAL_ID1right), rest671) end | ( 10, ( ( _, ( MlyValue.Ident Ident1, Ident1left, Ident1right)) :: @@ -1912,14 +1935,14 @@ rest671)) => let val result = MlyValue.LongIdent (fn _ => let val ( Ident as Ident1) = Ident1 () in ( [Ident] ) end) - in ( LrTable.NT 120, ( result, Ident1left, Ident1right), rest671) + in ( LrTable.NT 122, ( result, Ident1left, Ident1right), rest671) end | ( 11, ( ( _, ( MlyValue.QUAL_ID QUAL_ID1, QUAL_ID1left, QUAL_ID1right)) :: rest671)) => let val result = MlyValue.LongIdent (fn _ => let val (QUAL_ID as QUAL_ID1) = QUAL_ID1 () in ( QUAL_ID ) end) - in ( LrTable.NT 120, ( result, QUAL_ID1left, QUAL_ID1right), rest671) + in ( LrTable.NT 122, ( result, QUAL_ID1left, QUAL_ID1right), rest671) end | ( 12, ( ( _, ( MlyValue.QUAL_STAR QUAL_STAR1, QUAL_STAR1left, @@ -1927,7 +1950,7 @@ QUAL_STAR1right)) :: rest671)) => let val result = MlyValue.LongIdent (fn _ => let val (QUAL_STAR as QUAL_STAR1) = QUAL_STAR1 () in ( QUAL_STAR ) end) - in ( LrTable.NT 120, ( result, QUAL_STAR1left, QUAL_STAR1right), + in ( LrTable.NT 122, ( result, QUAL_STAR1left, QUAL_STAR1right), rest671) end | ( 13, ( ( _, ( MlyValue.LongIdent LongIdent1, LongIdent1left, @@ -1936,7 +1959,7 @@ MlyValue.LongOpIdent (fn _ => let val (LongIdent as LongIdent1) = LongIdent1 () in ( OP_OPT(LongIdent, false) ) end) - in ( LrTable.NT 121, ( result, LongIdent1left, LongIdent1right), + in ( LrTable.NT 123, ( result, LongIdent1left, LongIdent1right), rest671) end | ( 14, ( ( _, ( MlyValue.LongIdent LongIdent1, _, LongIdent1right)) @@ -1945,7 +1968,7 @@ MlyValue.LongOpIdent (fn _ => let val (LongIdent as LongIdent1) = LongIdent1 () in ( OP_OPT(LongIdent, true) ) end) - in ( LrTable.NT 121, ( result, OP1left, LongIdent1right), rest671) + in ( LrTable.NT 123, ( result, OP1left, LongIdent1right), rest671) end | ( 15, ( ( _, ( MlyValue.LongOpIdent LongOpIdent1, LongOpIdent1left, @@ -1954,30 +1977,30 @@ MlyValue.LongOpEqIdent (fn _ => let val (LongOpIdent as LongOpIdent1) = LongOpIdent1 () in ( LongOpIdent ) end) - in ( LrTable.NT 122, ( result, LongOpIdent1left, LongOpIdent1right), + in ( LrTable.NT 124, ( result, LongOpIdent1left, LongOpIdent1right), rest671) end | ( 16, ( ( _, ( _, EQUALS1left, EQUALS1right)) :: rest671)) => let val result = MlyValue.LongOpEqIdent (fn _ => ( OP_OPT(["="], false) )) - in ( LrTable.NT 122, ( result, EQUALS1left, EQUALS1right), rest671) + in ( LrTable.NT 124, ( result, EQUALS1left, EQUALS1right), rest671) end | ( 17, ( ( _, ( _, _, EQUALS1right)) :: ( _, ( _, OP1left, _)) :: rest671)) => let val result = MlyValue.LongOpEqIdent (fn _ => ( OP_OPT(["="], true) )) - in ( LrTable.NT 122, ( result, OP1left, EQUALS1right), rest671) + in ( LrTable.NT 124, ( result, OP1left, EQUALS1right), rest671) end | ( 18, ( ( _, ( MlyValue.DIGIT DIGIT1, DIGIT1left, DIGIT1right)) :: rest671)) => let val result = MlyValue.DIGIT_opt (fn _ => let val ( DIGIT as DIGIT1) = DIGIT1 () in ( SOME DIGIT ) end) - in ( LrTable.NT 112, ( result, DIGIT1left, DIGIT1right), rest671) + in ( LrTable.NT 114, ( result, DIGIT1left, DIGIT1right), rest671) end | ( 19, ( rest671)) => let val result = MlyValue.DIGIT_opt (fn _ => ( NONE )) - in ( LrTable.NT 112, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 114, ( result, defaultPos, defaultPos), rest671) end | ( 20, ( ( _, ( MlyValue.DECPOSINTEGER DECPOSINTEGER1, ( DECPOSINTEGERleft as DECPOSINTEGER1left), DECPOSINTEGER1right)) :: @@ -1988,7 +2011,7 @@ rest671)) => let val result = MlyValue.DecPosInteger (fn _ => let DECPOSINTEGERleft DECPOSINTEGER ) end) - in ( LrTable.NT 124, ( result, DECPOSINTEGER1left, + in ( LrTable.NT 126, ( result, DECPOSINTEGER1left, DECPOSINTEGER1right), rest671) end | ( 21, ( ( _, ( MlyValue.DIGIT DIGIT1, DIGIT1left, DIGIT1right)) :: @@ -1996,14 +2019,14 @@ rest671)) => let val result = MlyValue.DecPosInteger (fn _ => let val (DIGIT as DIGIT1) = DIGIT1 () in ( IntInf.fromInt DIGIT ) end) - in ( LrTable.NT 124, ( result, DIGIT1left, DIGIT1right), rest671) + in ( LrTable.NT 126, ( result, DIGIT1left, DIGIT1right), rest671) end | ( 22, ( ( _, ( MlyValue.Ident Ident1, Ident1left, Ident1right)) :: rest671)) => let val result = MlyValue.Label (fn _ => let val (Ident as Ident1) = Ident1 () in ( mk_IdentLab Ident ) end) - in ( LrTable.NT 123, ( result, Ident1left, Ident1right), rest671) + in ( LrTable.NT 125, ( result, Ident1left, Ident1right), rest671) end | ( 23, ( ( _, ( MlyValue.DecPosInteger DecPosInteger1, DecPosInteger1left, DecPosInteger1right)) :: rest671)) => let val @@ -2011,7 +2034,7 @@ result = MlyValue.Label (fn _ => let val (DecPosInteger as DecPosInteger1) = DecPosInteger1 () in ( mk_IntegerLab (IntInf.toInt DecPosInteger) ) end) - in ( LrTable.NT 123, ( result, DecPosInteger1left, + in ( LrTable.NT 125, ( result, DecPosInteger1left, DecPosInteger1right), rest671) end | ( 24, ( ( _, ( MlyValue.Ident_seq2 Ident_seq21, _, Ident_seq21right @@ -2025,7 +2048,7 @@ Identright)) :: rest671)) => let val result = MlyValue.Ident_seq2 (fn ) end) - in ( LrTable.NT 107, ( result, Ident1left, Ident_seq21right), rest671 + in ( LrTable.NT 109, ( result, Ident1left, Ident_seq21right), rest671 ) end | ( 25, ( ( _, ( MlyValue.Ident Ident2, Ident2left, Ident2right)) :: @@ -2038,7 +2061,7 @@ Ident1 () WITH_INFO(PP Ident2left Ident2right, Ident2)] ) end) - in ( LrTable.NT 107, ( result, Ident1left, Ident2right), rest671) + in ( LrTable.NT 109, ( result, Ident1left, Ident2right), rest671) end | ( 26, ( ( _, ( MlyValue.EqIdent_seq1 EqIdent_seq11, _, EqIdent_seq11right)) :: ( _, ( MlyValue.EqIdent EqIdent1, EqIdent1left @@ -2047,7 +2070,7 @@ EqIdent_seq11right)) :: ( _, ( MlyValue.EqIdent EqIdent1, EqIdent1left val (EqIdent_seq1 as EqIdent_seq11) = EqIdent_seq11 () in ( EqIdent :: EqIdent_seq1 ) end) - in ( LrTable.NT 108, ( result, EqIdent1left, EqIdent_seq11right), + in ( LrTable.NT 110, ( result, EqIdent1left, EqIdent_seq11right), rest671) end | ( 27, ( ( _, ( MlyValue.EqIdent EqIdent1, EqIdent1left, @@ -2056,7 +2079,7 @@ MlyValue.EqIdent_seq1 (fn _ => let val (EqIdent as EqIdent1) = EqIdent1 () in ( [EqIdent] ) end) - in ( LrTable.NT 108, ( result, EqIdent1left, EqIdent1right), rest671) + in ( LrTable.NT 110, ( result, EqIdent1left, EqIdent1right), rest671) end | ( 28, ( ( _, ( MlyValue.LongIdent_seq1 LongIdent_seq11, _, @@ -2072,7 +2095,7 @@ LongIdentleft as LongIdent1left), LongIdentright)) :: rest671)) => let ) end) - in ( LrTable.NT 109, ( result, LongIdent1left, LongIdent_seq11right), + in ( LrTable.NT 111, ( result, LongIdent1left, LongIdent_seq11right), rest671) end | ( 29, ( ( _, ( MlyValue.LongIdent LongIdent1, (LongIdentleft as @@ -2087,7 +2110,7 @@ LongIdent as LongIdent1) = LongIdent1 () ) end) - in ( LrTable.NT 109, ( result, LongIdent1left, LongIdent1right), + in ( LrTable.NT 111, ( result, LongIdent1left, LongIdent1right), rest671) end | ( 30, ( ( _, ( MlyValue.LongIdentEq_seq2 LongIdentEq_seq21, _, @@ -2102,7 +2125,7 @@ LongIdent as LongIdent1) = LongIdent1 () ) end) - in ( LrTable.NT 110, ( result, LongIdent1left, LongIdentEq_seq21right + in ( LrTable.NT 112, ( result, LongIdent1left, LongIdentEq_seq21right ), rest671) end | ( 31, ( ( _, ( MlyValue.LongIdent LongIdent2, LongIdent2left, @@ -2121,7 +2144,7 @@ MlyValue.LongIdentEq_seq2 (fn _ => let val LongIdent1 = LongIdent1 () ) end) - in ( LrTable.NT 110, ( result, LongIdent1left, LongIdent2right), + in ( LrTable.NT 112, ( result, LongIdent1left, LongIdent2right), rest671) end | ( 32, ( ( _, ( MlyValue.LongTypeIdentEq_seq2 LongTypeIdentEq_seq21, @@ -2140,7 +2163,7 @@ LongTypeIdentEq_seq21 () ) end) - in ( LrTable.NT 111, ( result, LongTypeIdent1left, + in ( LrTable.NT 113, ( result, LongTypeIdent1left, LongTypeIdentEq_seq21right), rest671) end | ( 33, ( ( _, ( MlyValue.LongTypeIdent LongTypeIdent2, @@ -2161,7 +2184,7 @@ LongTypeIdent1 () ) end) - in ( LrTable.NT 111, ( result, LongTypeIdent1left, + in ( LrTable.NT 113, ( result, LongTypeIdent1left, LongTypeIdent2right), rest671) end | ( 34, ( ( _, ( MlyValue.TopDec_ TopDec_1, TopDec_1left, @@ -3348,7 +3371,7 @@ end ENDQ1 () in ([exp_quote (PP BEGINQleft ENDQright) ENDQ]) end) - in ( LrTable.NT 93, ( result, BEGINQ1left, ENDQ1right), rest671) + in ( LrTable.NT 95, ( result, BEGINQ1left, ENDQ1right), rest671) end | ( 137, ( ( _, ( MlyValue.ENDQ ENDQ1, ENDQleft, (ENDQright as ENDQ1right))) :: ( _, ( MlyValue.OtList OtList1, _, _)) :: ( _, ( _, @@ -3357,7 +3380,7 @@ BEGINQ1left, _)) :: rest671)) => let val result = MlyValue.Quote (fn val (ENDQ as ENDQ1) = ENDQ1 () in (OtList @ [exp_quote (PP ENDQleft ENDQright) ENDQ]) end) - in ( LrTable.NT 93, ( result, BEGINQ1left, ENDQ1right), rest671) + in ( LrTable.NT 95, ( result, BEGINQ1left, ENDQ1right), rest671) end | ( 138, ( ( _, ( MlyValue.AtExp AtExp1, AtExpleft, (AtExpright as AtExp1right))) :: ( _, ( MlyValue.OBJL OBJL1, (OBJLleft as OBJL1left), @@ -3369,7 +3392,7 @@ AtExp1right))) :: ( _, ( MlyValue.OBJL OBJL1, (OBJLleft as OBJL1left), exp_antiquote (PP AtExpleft AtExpright) AtExp] ) end) - in ( LrTable.NT 94, ( result, OBJL1left, AtExp1right), rest671) + in ( LrTable.NT 96, ( result, OBJL1left, AtExp1right), rest671) end | ( 139, ( ( _, ( MlyValue.OtList OtList1, _, OtList1right)) :: ( _, ( MlyValue.AtExp AtExp1, AtExpleft, AtExpright)) :: ( _, ( @@ -3383,7 +3406,7 @@ exp_quote (PP OBJLleft OBJLright) OBJL :: exp_antiquote (PP AtExpleft AtExpright) AtExp :: OtList ) end) - in ( LrTable.NT 94, ( result, OBJL1left, OtList1right), rest671) + in ( LrTable.NT 96, ( result, OBJL1left, OtList1right), rest671) end | ( 140, ( ( _, ( MlyValue.AtExp_seq1 AtExp_seq11, _, AtExp_seq11right)) :: ( _, ( MlyValue.AtExp AtExp1, AtExp1left, _)) :: @@ -3392,15 +3415,15 @@ AtExp_seq11right)) :: ( _, ( MlyValue.AtExp AtExp1, AtExp1left, _)) :: val (AtExp_seq1 as AtExp_seq11) = AtExp_seq11 () in ( AtExp :: AtExp_seq1 ) end) - in ( LrTable.NT 98, ( result, AtExp1left, AtExp_seq11right), rest671) - + in ( LrTable.NT 100, ( result, AtExp1left, AtExp_seq11right), rest671 +) end | ( 141, ( ( _, ( MlyValue.AtExp AtExp1, AtExp1left, AtExp1right)) :: rest671)) => let val result = MlyValue.AtExp_seq1 (fn _ => let val (AtExp as AtExp1) = AtExp1 () in ( [AtExp] ) end) - in ( LrTable.NT 98, ( result, AtExp1left, AtExp1right), rest671) + in ( LrTable.NT 100, ( result, AtExp1left, AtExp1right), rest671) end | ( 142, ( ( _, ( MlyValue.CommaExpRow_opt CommaExpRow_opt1, _, CommaExpRow_opt1right)) :: ( _, ( MlyValue.Exp_ Exp_1, _, _)) :: _ :: @@ -3424,12 +3447,12 @@ end val (ExpRow as ExpRow1) = ExpRow1 () in ( SOME ExpRow ) end) - in ( LrTable.NT 81, ( result, ExpRow1left, ExpRow1right), rest671) + in ( LrTable.NT 83, ( result, ExpRow1left, ExpRow1right), rest671) end | ( 144, ( rest671)) => let val result = MlyValue.ExpRow_opt (fn _ => ( NONE )) - in ( LrTable.NT 81, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 83, ( result, defaultPos, defaultPos), rest671) end | ( 145, ( ( _, ( MlyValue.ExpRow ExpRow1, _, ExpRow1right)) :: ( _, ( _, COMMA1left, _)) :: rest671)) => let val result = @@ -3437,11 +3460,11 @@ MlyValue.CommaExpRow_opt (fn _ => let val (ExpRow as ExpRow1) = ExpRow1 () in ( SOME ExpRow ) end) - in ( LrTable.NT 71, ( result, COMMA1left, ExpRow1right), rest671) + in ( LrTable.NT 73, ( result, COMMA1left, ExpRow1right), rest671) end | ( 146, ( rest671)) => let val result = MlyValue.CommaExpRow_opt (fn _ => ( NONE )) - in ( LrTable.NT 71, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 73, ( result, defaultPos, defaultPos), rest671) end | ( 147, ( ( _, ( MlyValue.ExpComma_seq1 ExpComma_seq11, ExpComma_seq11left, ExpComma_seq11right)) :: rest671)) => let val @@ -3449,12 +3472,12 @@ result = MlyValue.ExpComma_seq0 (fn _ => let val (ExpComma_seq1 as ExpComma_seq11) = ExpComma_seq11 () in ( ExpComma_seq1 ) end) - in ( LrTable.NT 90, ( result, ExpComma_seq11left, ExpComma_seq11right + in ( LrTable.NT 92, ( result, ExpComma_seq11left, ExpComma_seq11right ), rest671) end | ( 148, ( rest671)) => let val result = MlyValue.ExpComma_seq0 (fn _ => ( nil )) - in ( LrTable.NT 90, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 92, ( result, defaultPos, defaultPos), rest671) end | ( 149, ( ( _, ( MlyValue.ExpComma_seq1 ExpComma_seq11, _, ExpComma_seq11right)) :: _ :: ( _, ( MlyValue.Exp_ Exp_1, Exp_1left, _ @@ -3463,7 +3486,7 @@ ExpComma_seq11right)) :: _ :: ( _, ( MlyValue.Exp_ Exp_1, Exp_1left, _ val (ExpComma_seq1 as ExpComma_seq11) = ExpComma_seq11 () in ( Exp_ :: ExpComma_seq1 ) end) - in ( LrTable.NT 91, ( result, Exp_1left, ExpComma_seq11right), + in ( LrTable.NT 93, ( result, Exp_1left, ExpComma_seq11right), rest671) end | ( 150, ( ( _, ( MlyValue.Exp_ Exp_1, Exp_1left, Exp_1right)) :: @@ -3471,7 +3494,7 @@ rest671)) => let val result = MlyValue.ExpComma_seq1 (fn _ => let val (Exp_ as Exp_1) = Exp_1 () in ( [Exp_] ) end) - in ( LrTable.NT 91, ( result, Exp_1left, Exp_1right), rest671) + in ( LrTable.NT 93, ( result, Exp_1left, Exp_1right), rest671) end | ( 151, ( ( _, ( MlyValue.ExpComma_seq1 ExpComma_seq11, _, ExpComma_seq11right)) :: _ :: ( _, ( MlyValue.Exp_ Exp_1, Exp_1left, _ @@ -3480,7 +3503,7 @@ ExpComma_seq11right)) :: _ :: ( _, ( MlyValue.Exp_ Exp_1, Exp_1left, _ val (ExpComma_seq1 as ExpComma_seq11) = ExpComma_seq11 () in ( Exp_ :: ExpComma_seq1 ) end) - in ( LrTable.NT 92, ( result, Exp_1left, ExpComma_seq11right), + in ( LrTable.NT 94, ( result, Exp_1left, ExpComma_seq11right), rest671) end | ( 152, ( ( _, ( MlyValue.ExpSemicolon_seq2 ExpSemicolon_seq21, _, @@ -3492,7 +3515,7 @@ MlyValue.ExpSemicolon_seq2 (fn _ => let val (Exp_ as Exp_1) = Exp_1 () in ( Exp_ :: ExpSemicolon_seq2) end) - in ( LrTable.NT 101, ( result, Exp_1left, ExpSemicolon_seq21right), + in ( LrTable.NT 103, ( result, Exp_1left, ExpSemicolon_seq21right), rest671) end | ( 153, ( ( _, ( MlyValue.Exp_ Exp_2, _, Exp_2right)) :: _ :: ( _, ( @@ -3501,7 +3524,7 @@ end val Exp_2 = Exp_2 () in ( [Exp_1, Exp_2] ) end) - in ( LrTable.NT 101, ( result, Exp_1left, Exp_2right), rest671) + in ( LrTable.NT 103, ( result, Exp_1left, Exp_2right), rest671) end | ( 154, ( ( _, ( MlyValue.AtExp_seq1 AtExp_seq11, (AtExp_seq1left as AtExp_seq11left), (AtExp_seq1right as AtExp_seq11right))) :: @@ -3632,11 +3655,11 @@ MlyValue.BarMatch_opt (fn _ => let val (Match_ as Match_1) = Match_1 () in ( SOME Match_ ) end) - in ( LrTable.NT 79, ( result, BAR1left, Match_1right), rest671) + in ( LrTable.NT 81, ( result, BAR1left, Match_1right), rest671) end | ( 166, ( rest671)) => let val result = MlyValue.BarMatch_opt (fn _ => ( NONE )) - in ( LrTable.NT 79, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 81, ( result, defaultPos, defaultPos), rest671) end | ( 167, ( ( _, ( MlyValue.Exp_ Exp_1, _, Exp_1right)) :: _ :: ( _, ( MlyValue.Pat Pat1, (Patleft as Pat1left), _)) :: rest671)) => let @@ -3656,7 +3679,7 @@ ValBind1 () [], ValBind) ) end) - in ( LrTable.NT 114, ( result, VAL1left, ValBind1right), rest671) + in ( LrTable.NT 116, ( result, VAL1left, ValBind1right), rest671) end | ( 169, ( ( _, ( MlyValue.ValBind ValBind1, _, ValBind1right)) :: ( _, ( MlyValue.TyVarSeq1 TyVarSeq11, _, _)) :: ( _, ( _, (VALleft as @@ -3669,7 +3692,7 @@ MlyValue.OneDec_sans_LOCAL (fn _ => let val (TyVarSeq1 as TyVarSeq11) TyVarSeq1, ValBind) ) end) - in ( LrTable.NT 114, ( result, VAL1left, ValBind1right), rest671) + in ( LrTable.NT 116, ( result, VAL1left, ValBind1right), rest671) end | ( 170, ( ( _, ( MlyValue.TypBind TypBind1, _, TypBind1right)) :: ( _, ( _, (TYPEleft as TYPE1left), _)) :: rest671)) => let val result @@ -3680,7 +3703,7 @@ end TypBind) ) end) - in ( LrTable.NT 114, ( result, TYPE1left, TypBind1right), rest671) + in ( LrTable.NT 116, ( result, TYPE1left, TypBind1right), rest671) end | ( 171, ( ( _, ( MlyValue.DatBind_zero_arity DatBind_zero_arity1, _, @@ -3694,7 +3717,7 @@ DatBind_zero_arity1) = DatBind_zero_arity1 () DatBind_zero_arity) ) end) - in ( LrTable.NT 114, ( result, DATATYPE1left, + in ( LrTable.NT 116, ( result, DATATYPE1left, DatBind_zero_arity1right), rest671) end | ( 172, ( ( _, ( MlyValue.DatBind_nonzero_arity @@ -3708,7 +3731,7 @@ DatBind_nonzero_arity1, _, DatBind_nonzero_arity1right)) :: ( _, ( _, DatBind_nonzero_arity) ) end) - in ( LrTable.NT 114, ( result, DATATYPE1left, + in ( LrTable.NT 116, ( result, DATATYPE1left, DatBind_nonzero_arity1right), rest671) end | ( 173, ( ( _, ( MlyValue.LongTypeIdent LongTypeIdent1, _, ( @@ -3723,7 +3746,7 @@ MlyValue.TypeIdent TypeIdent1, _, _)) :: ( _, ( _, DATATYPE1left, _)) mk_TyCon TypeIdent, mk_LongTyCon LongTypeIdent) ) end) - in ( LrTable.NT 114, ( result, DATATYPE1left, LongTypeIdent1right), + in ( LrTable.NT 116, ( result, DATATYPE1left, LongTypeIdent1right), rest671) end | ( 174, ( ( _, ( _, _, (ENDright as END1right))) :: ( _, ( @@ -3734,7 +3757,7 @@ DatBind as DatBind1) = DatBind1 () val (Dec as Dec1) = Dec1 () in ( ABSTYPEdec (PP ABSTYPEleft ENDright, DatBind, Dec) ) end) - in ( LrTable.NT 114, ( result, ABSTYPE1left, END1right), rest671) + in ( LrTable.NT 116, ( result, ABSTYPE1left, END1right), rest671) end | ( 175, ( ( _, ( MlyValue.ExBind ExBind1, _, ExBind1right)) :: ( _, ( _, (EXCEPTIONleft as EXCEPTION1left), _)) :: rest671)) => let val @@ -3746,7 +3769,7 @@ ExBind1) = ExBind1 () ExBind) ) end) - in ( LrTable.NT 114, ( result, EXCEPTION1left, ExBind1right), rest671 + in ( LrTable.NT 116, ( result, EXCEPTION1left, ExBind1right), rest671 ) end | ( 176, ( ( _, ( MlyValue.LongIdent_seq1 LongIdent_seq11, _, ( @@ -3759,7 +3782,7 @@ LongIdent_seq11) = LongIdent_seq11 () wi_Convert mk_LongStrId LongIdent_seq1) ) end) - in ( LrTable.NT 114, ( result, OPEN1left, LongIdent_seq11right), + in ( LrTable.NT 116, ( result, OPEN1left, LongIdent_seq11right), rest671) end | ( 177, ( ( _, ( MlyValue.EqIdent_seq1 EqIdent_seq11, _, ( @@ -3774,7 +3797,7 @@ MlyValue.OneDec_sans_LOCAL (fn _ => let val (DIGIT_opt as DIGIT_opt1) DIGIT_opt, map mk_Id EqIdent_seq1) ) end) - in ( LrTable.NT 114, ( result, INFIX1left, EqIdent_seq11right), + in ( LrTable.NT 116, ( result, INFIX1left, EqIdent_seq11right), rest671) end | ( 178, ( ( _, ( MlyValue.EqIdent_seq1 EqIdent_seq11, _, ( @@ -3789,7 +3812,7 @@ MlyValue.OneDec_sans_LOCAL (fn _ => let val (DIGIT_opt as DIGIT_opt1) DIGIT_opt, map mk_Id EqIdent_seq1) ) end) - in ( LrTable.NT 114, ( result, INFIXR1left, EqIdent_seq11right), + in ( LrTable.NT 116, ( result, INFIXR1left, EqIdent_seq11right), rest671) end | ( 179, ( ( _, ( MlyValue.EqIdent_seq1 EqIdent_seq11, _, ( @@ -3802,7 +3825,7 @@ EqIdent_seq11) = EqIdent_seq11 () map mk_Id EqIdent_seq1) ) end) - in ( LrTable.NT 114, ( result, NONFIX1left, EqIdent_seq11right), + in ( LrTable.NT 116, ( result, NONFIX1left, EqIdent_seq11right), rest671) end | ( 180, ( ( _, ( MlyValue.TypBind TypBind1, _, TypBind1right)) :: _ @@ -3821,7 +3844,7 @@ DatBind_zero_arity as DatBind_zero_arity1) = DatBind_zero_arity1 () end ) end) - in ( LrTable.NT 114, ( result, DATATYPE1left, TypBind1right), rest671 + in ( LrTable.NT 116, ( result, DATATYPE1left, TypBind1right), rest671 ) end | ( 181, ( ( _, ( MlyValue.TypBind TypBind1, _, TypBind1right)) :: _ @@ -3841,7 +3864,7 @@ DatBind_nonzero_arity1 () end ) end) - in ( LrTable.NT 114, ( result, DATATYPE1left, TypBind1right), rest671 + in ( LrTable.NT 116, ( result, DATATYPE1left, TypBind1right), rest671 ) end | ( 182, ( ( _, ( _, _, (ENDright as END1right))) :: ( _, ( @@ -3863,7 +3886,7 @@ DatBind1) = DatBind1 () end ) end) - in ( LrTable.NT 114, ( result, ABSTYPE1left, END1right), rest671) + in ( LrTable.NT 116, ( result, ABSTYPE1left, END1right), rest671) end | ( 183, ( ( _, ( MlyValue.FValBind FValBind1, _, FValBind1right)) :: ( _, ( _, (FUNleft as FUN1left), _)) :: rest671)) => let val result @@ -3874,7 +3897,7 @@ end [], FValBind) ) end) - in ( LrTable.NT 114, ( result, FUN1left, FValBind1right), rest671) + in ( LrTable.NT 116, ( result, FUN1left, FValBind1right), rest671) end | ( 184, ( ( _, ( MlyValue.FValBind FValBind1, _, FValBind1right)) :: @@ -3888,7 +3911,7 @@ MlyValue.OneDec_sans_LOCAL (fn _ => let val (TyVarSeq1 as TyVarSeq11) TyVarSeq1, FValBind) ) end) - in ( LrTable.NT 114, ( result, FUN1left, FValBind1right), rest671) + in ( LrTable.NT 116, ( result, FUN1left, FValBind1right), rest671) end | ( 185, ( ( _, ( MlyValue.EqIdent_seq1 EqIdent_seq11, @@ -3902,7 +3925,7 @@ EqIdent_seq11) = EqIdent_seq11 () map RegVar.mk_Named EqIdent_seq1)) ) end) - in ( LrTable.NT 114, ( result, WITH1left, EqIdent_seq11right), + in ( LrTable.NT 116, ( result, WITH1left, EqIdent_seq11right), rest671) end | ( 186, ( ( _, ( _, _, (ENDright as END1right))) :: ( _, ( @@ -3912,7 +3935,7 @@ result = MlyValue.OneDec (fn _ => let val Dec1 = Dec1 () val Dec2 = Dec2 () in ( LOCALdec (PP LOCALleft ENDright, Dec1, Dec2) ) end) - in ( LrTable.NT 113, ( result, LOCAL1left, END1right), rest671) + in ( LrTable.NT 115, ( result, LOCAL1left, END1right), rest671) end | ( 187, ( ( _, ( MlyValue.OneDec_sans_LOCAL OneDec_sans_LOCAL1, OneDec_sans_LOCAL1left, OneDec_sans_LOCAL1right)) :: rest671)) => let @@ -3920,7 +3943,7 @@ OneDec_sans_LOCAL1left, OneDec_sans_LOCAL1right)) :: rest671)) => let as OneDec_sans_LOCAL1) = OneDec_sans_LOCAL1 () in ( OneDec_sans_LOCAL ) end) - in ( LrTable.NT 113, ( result, OneDec_sans_LOCAL1left, + in ( LrTable.NT 115, ( result, OneDec_sans_LOCAL1left, OneDec_sans_LOCAL1right), rest671) end | ( 188, ( ( _, ( MlyValue.OneDec OneDec1, OneDec1left, OneDec1right) @@ -3928,12 +3951,12 @@ end => let val (OneDec as OneDec1) = OneDec1 () in ( SOME OneDec ) end) - in ( LrTable.NT 105, ( result, OneDec1left, OneDec1right), rest671) + in ( LrTable.NT 107, ( result, OneDec1left, OneDec1right), rest671) end | ( 189, ( ( _, ( _, SEMICOLON1left, SEMICOLON1right)) :: rest671)) => let val result = MlyValue.OneDec_or_SEMICOLON (fn _ => ( NONE )) - in ( LrTable.NT 105, ( result, SEMICOLON1left, SEMICOLON1right), + in ( LrTable.NT 107, ( result, SEMICOLON1left, SEMICOLON1right), rest671) end | ( 190, ( ( _, ( MlyValue.OneDec_or_SEMICOLON OneDec_or_SEMICOLON1, @@ -3952,7 +3975,7 @@ OneDec_or_SEMICOLON1 () | NONE => NonEmptyDec) ) end) - in ( LrTable.NT 106, ( result, NonEmptyDec1left, + in ( LrTable.NT 108, ( result, NonEmptyDec1left, OneDec_or_SEMICOLON1right), rest671) end | ( 191, ( ( _, ( MlyValue.OneDec_or_SEMICOLON OneDec_or_SEMICOLON1, @@ -3965,7 +3988,7 @@ OneDec_or_SEMICOLON as OneDec_or_SEMICOLON1) = OneDec_or_SEMICOLON1 () | NONE => EMPTYdec (PP defaultPos defaultPos)) ) end) - in ( LrTable.NT 106, ( result, OneDec_or_SEMICOLON1left, + in ( LrTable.NT 108, ( result, OneDec_or_SEMICOLON1left, OneDec_or_SEMICOLON1right), rest671) end | ( 192, ( ( _, ( MlyValue.NonEmptyDec NonEmptyDec1, NonEmptyDec1left @@ -4016,11 +4039,11 @@ MlyValue.AndValBind_opt (fn _ => let val (ValBind as ValBind1) = ValBind1 () in ( SOME ValBind ) end) - in ( LrTable.NT 72, ( result, AND1left, ValBind1right), rest671) + in ( LrTable.NT 74, ( result, AND1left, ValBind1right), rest671) end | ( 197, ( rest671)) => let val result = MlyValue.AndValBind_opt (fn _ => ( NONE )) - in ( LrTable.NT 72, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 74, ( result, defaultPos, defaultPos), rest671) end | ( 198, ( ( _, ( MlyValue.AndFnValBind_opt AndFnValBind_opt1, _, AndFnValBind_opt1right)) :: ( _, ( MlyValue.Match_ Match_1, _, _)) :: @@ -4097,7 +4120,7 @@ MlyValue.ColonTy_seq1 (fn _ => let val (Ty as Ty1) = Ty1 () val (ColonTy_seq1 as ColonTy_seq11) = ColonTy_seq11 () in ( (Ty, Tyright) :: ColonTy_seq1 ) end) - in ( LrTable.NT 86, ( result, COLON1left, ColonTy_seq11right), + in ( LrTable.NT 88, ( result, COLON1left, ColonTy_seq11right), rest671) end | ( 202, ( ( _, ( MlyValue.Ty Ty1, _, (Tyright as Ty1right))) :: ( _, @@ -4105,7 +4128,7 @@ end MlyValue.ColonTy_seq1 (fn _ => let val (Ty as Ty1) = Ty1 () in ( [(Ty, Tyright)] ) end) - in ( LrTable.NT 86, ( result, COLON1left, Ty1right), rest671) + in ( LrTable.NT 88, ( result, COLON1left, Ty1right), rest671) end | ( 203, ( ( _, ( MlyValue.FnValBind FnValBind1, _, FnValBind1right)) :: ( _, ( _, AND1left, _)) :: rest671)) => let val result = @@ -4113,19 +4136,21 @@ MlyValue.AndFnValBind_opt (fn _ => let val (FnValBind as FnValBind1) = FnValBind1 () in ( SOME FnValBind ) end) - in ( LrTable.NT 73, ( result, AND1left, FnValBind1right), rest671) + in ( LrTable.NT 75, ( result, AND1left, FnValBind1right), rest671) end | ( 204, ( rest671)) => let val result = MlyValue.AndFnValBind_opt (fn _ => ( NONE )) - in ( LrTable.NT 73, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 75, ( result, defaultPos, defaultPos), rest671) end | ( 205, ( ( _, ( MlyValue.AndTypBind_opt AndTypBind_opt1, _, AndTypBind_opt1right)) :: ( _, ( MlyValue.Ty Ty1, _, _)) :: _ :: ( _, -( MlyValue.TypeIdent TypeIdent1, _, _)) :: ( _, ( MlyValue.TyVarSeq -TyVarSeq1, (TyVarSeqleft as TyVarSeq1left), _)) :: rest671)) => let - val result = MlyValue.TypBind (fn _ => let val (TyVarSeq as -TyVarSeq1) = TyVarSeq1 () +( MlyValue.TypeIdent TypeIdent1, _, _)) :: ( _, ( MlyValue.RegVarSeq +RegVarSeq1, RegVarSeqleft, RegVarSeqright)) :: ( _, ( +MlyValue.TyVarSeq TyVarSeq1, (TyVarSeqleft as TyVarSeq1left), _)) :: +rest671)) => let val result = MlyValue.TypBind (fn _ => let val ( +TyVarSeq as TyVarSeq1) = TyVarSeq1 () + val (RegVarSeq as RegVarSeq1) = RegVarSeq1 () val (TypeIdent as TypeIdent1) = TypeIdent1 () val (Ty as Ty1) = Ty1 () val (AndTypBind_opt as AndTypBind_opt1) = AndTypBind_opt1 () @@ -4133,7 +4158,7 @@ TyVarSeq1) = TyVarSeq1 () TYPBIND (PP TyVarSeqleft (rightmost get_info_ty Ty get_info_typbind AndTypBind_opt), - TyVarSeq, mk_TyCon TypeIdent, Ty, AndTypBind_opt) + TyVarSeq, (PP RegVarSeqleft RegVarSeqright, RegVarSeq), mk_TyCon TypeIdent, Ty, AndTypBind_opt) ) end) in ( LrTable.NT 60, ( result, TyVarSeq1left, AndTypBind_opt1right), @@ -4145,11 +4170,11 @@ MlyValue.AndTypBind_opt (fn _ => let val (TypBind as TypBind1) = TypBind1 () in ( SOME TypBind ) end) - in ( LrTable.NT 76, ( result, AND1left, TypBind1right), rest671) + in ( LrTable.NT 78, ( result, AND1left, TypBind1right), rest671) end | ( 207, ( rest671)) => let val result = MlyValue.AndTypBind_opt (fn _ => ( NONE )) - in ( LrTable.NT 76, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 78, ( result, defaultPos, defaultPos), rest671) end | ( 208, ( ( _, ( MlyValue.AndDatBind_opt AndDatBind_opt1, _, AndDatBind_opt1right)) :: ( _, ( MlyValue.ConBind ConBind1, _, _)) :: @@ -4216,11 +4241,11 @@ MlyValue.AndDatBind_opt (fn _ => let val (DatBind as DatBind1) = DatBind1 () in ( SOME DatBind ) end) - in ( LrTable.NT 77, ( result, AND1left, DatBind1right), rest671) + in ( LrTable.NT 79, ( result, AND1left, DatBind1right), rest671) end | ( 212, ( rest671)) => let val result = MlyValue.AndDatBind_opt (fn _ => ( NONE )) - in ( LrTable.NT 77, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 79, ( result, defaultPos, defaultPos), rest671) end | ( 213, ( ( _, ( MlyValue.BarConBind_opt BarConBind_opt1, _, BarConBind_opt1right)) :: ( _, ( MlyValue.OfTy_opt OfTy_opt1, _, _)) @@ -4250,11 +4275,11 @@ MlyValue.BarConBind_opt (fn _ => let val (ConBind as ConBind1) = ConBind1 () in ( SOME ConBind ) end) - in ( LrTable.NT 78, ( result, BAR1left, ConBind1right), rest671) + in ( LrTable.NT 80, ( result, BAR1left, ConBind1right), rest671) end | ( 215, ( rest671)) => let val result = MlyValue.BarConBind_opt (fn _ => ( NONE )) - in ( LrTable.NT 78, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 80, ( result, defaultPos, defaultPos), rest671) end | ( 216, ( ( _, ( MlyValue.AndExBind_opt AndExBind_opt1, _, AndExBind_opt1right)) :: ( _, ( MlyValue.OfTy_opt OfTy_opt1, _, _)) :: @@ -4307,11 +4332,11 @@ MlyValue.AndExBind_opt (fn _ => let val (ExBind as ExBind1) = ExBind1 () in ( SOME ExBind ) end) - in ( LrTable.NT 80, ( result, AND1left, ExBind1right), rest671) + in ( LrTable.NT 82, ( result, AND1left, ExBind1right), rest671) end | ( 219, ( rest671)) => let val result = MlyValue.AndExBind_opt (fn _ => ( NONE )) - in ( LrTable.NT 80, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 82, ( result, defaultPos, defaultPos), rest671) end | ( 220, ( ( _, ( MlyValue.AndFValBind_opt AndFValBind_opt1, _, AndFValBind_opt1right)) :: ( _, ( MlyValue.FClause FClause1, ( @@ -4335,11 +4360,11 @@ MlyValue.AndFValBind_opt (fn _ => let val (FValBind as FValBind1) = FValBind1 () in ( SOME FValBind ) end) - in ( LrTable.NT 74, ( result, AND1left, FValBind1right), rest671) + in ( LrTable.NT 76, ( result, AND1left, FValBind1right), rest671) end | ( 222, ( rest671)) => let val result = MlyValue.AndFValBind_opt (fn _ => ( NONE )) - in ( LrTable.NT 74, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 76, ( result, defaultPos, defaultPos), rest671) end | ( 223, ( ( _, ( MlyValue.BarFClause_opt BarFClause_opt1, _, BarFClause_opt1right)) :: ( _, ( MlyValue.Exp_ Exp_1, _, _)) :: _ :: ( @@ -4367,11 +4392,11 @@ MlyValue.BarFClause_opt (fn _ => let val (FClause as FClause1) = FClause1 () in ( SOME FClause ) end) - in ( LrTable.NT 75, ( result, BAR1left, FClause1right), rest671) + in ( LrTable.NT 77, ( result, BAR1left, FClause1right), rest671) end | ( 225, ( rest671)) => let val result = MlyValue.BarFClause_opt (fn _ => ( NONE )) - in ( LrTable.NT 75, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 77, ( result, defaultPos, defaultPos), rest671) end | ( 226, ( ( _, ( MlyValue.AtPat_seq1 AtPat_seq11, _, AtPat_seq11right)) :: ( _, ( MlyValue.AtPat AtPat1, AtPat1left, _)) :: @@ -4380,8 +4405,8 @@ AtPat_seq11right)) :: ( _, ( MlyValue.AtPat AtPat1, AtPat1left, _)) :: val (AtPat_seq1 as AtPat_seq11) = AtPat_seq11 () in ( AtPat :: AtPat_seq1 ) end) - in ( LrTable.NT 99, ( result, AtPat1left, AtPat_seq11right), rest671) - + in ( LrTable.NT 101, ( result, AtPat1left, AtPat_seq11right), rest671 +) end | ( 227, ( ( _, ( MlyValue.AtPat_seq1 AtPat_seq11, _, AtPat_seq11right)) :: ( _, ( MlyValue.AtPat AtPat1, AtPat1left, _)) :: @@ -4390,7 +4415,7 @@ AtPat_seq11right)) :: ( _, ( MlyValue.AtPat AtPat1, AtPat1left, _)) :: val (AtPat_seq1 as AtPat_seq11) = AtPat_seq11 () in ( AtPat :: AtPat_seq1 ) end) - in ( LrTable.NT 100, ( result, AtPat1left, AtPat_seq11right), rest671 + in ( LrTable.NT 102, ( result, AtPat1left, AtPat_seq11right), rest671 ) end | ( 228, ( ( _, ( MlyValue.AtPat AtPat1, AtPat1left, AtPat1right)) :: @@ -4398,29 +4423,29 @@ end (AtPat as AtPat1) = AtPat1 () in ( [AtPat] ) end) - in ( LrTable.NT 100, ( result, AtPat1left, AtPat1right), rest671) + in ( LrTable.NT 102, ( result, AtPat1left, AtPat1right), rest671) end | ( 229, ( ( _, ( MlyValue.Ty Ty1, _, Ty1right)) :: ( _, ( _, COLON1left, _)) :: rest671)) => let val result = MlyValue.ColonTy_opt (fn _ => let val (Ty as Ty1) = Ty1 () in ( SOME Ty ) end) - in ( LrTable.NT 85, ( result, COLON1left, Ty1right), rest671) + in ( LrTable.NT 87, ( result, COLON1left, Ty1right), rest671) end | ( 230, ( rest671)) => let val result = MlyValue.ColonTy_opt (fn _ => ( NONE )) - in ( LrTable.NT 85, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 87, ( result, defaultPos, defaultPos), rest671) end | ( 231, ( ( _, ( MlyValue.Ty Ty1, _, Ty1right)) :: ( _, ( _, OF1left , _)) :: rest671)) => let val result = MlyValue.OfTy_opt (fn _ => let val (Ty as Ty1) = Ty1 () in ( SOME Ty ) end) - in ( LrTable.NT 89, ( result, OF1left, Ty1right), rest671) + in ( LrTable.NT 91, ( result, OF1left, Ty1right), rest671) end | ( 232, ( rest671)) => let val result = MlyValue.OfTy_opt (fn _ => ( NONE )) - in ( LrTable.NT 89, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 91, ( result, defaultPos, defaultPos), rest671) end | ( 233, ( ( _, ( _, (UNDERBARleft as UNDERBAR1left), (UNDERBARright as UNDERBAR1right))) :: rest671)) => let val result = MlyValue.AtPat @@ -4549,12 +4574,12 @@ end val (PatRow as PatRow1) = PatRow1 () in ( SOME PatRow ) end) - in ( LrTable.NT 82, ( result, PatRow1left, PatRow1right), rest671) + in ( LrTable.NT 84, ( result, PatRow1left, PatRow1right), rest671) end | ( 245, ( rest671)) => let val result = MlyValue.PatRow_opt (fn _ => ( NONE )) - in ( LrTable.NT 82, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 84, ( result, defaultPos, defaultPos), rest671) end | ( 246, ( ( _, ( _, (DOTDOTDOTleft as DOTDOTDOT1left), ( DOTDOTDOTright as DOTDOTDOT1right))) :: rest671)) => let val result = @@ -4626,11 +4651,11 @@ AS1left, _)) :: rest671)) => let val result = MlyValue.AsPat_opt (fn _ => let val (Pat as Pat1) = Pat1 () in ( SOME Pat ) end) - in ( LrTable.NT 83, ( result, AS1left, Pat1right), rest671) + in ( LrTable.NT 85, ( result, AS1left, Pat1right), rest671) end | ( 250, ( rest671)) => let val result = MlyValue.AsPat_opt (fn _ => ( NONE )) - in ( LrTable.NT 83, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 85, ( result, defaultPos, defaultPos), rest671) end | ( 251, ( ( _, ( MlyValue.PatRow PatRow1, _, PatRow1right)) :: ( _, ( _, COMMA1left, _)) :: rest671)) => let val result = @@ -4638,11 +4663,11 @@ MlyValue.CommaPatRow_opt (fn _ => let val (PatRow as PatRow1) = PatRow1 () in ( SOME PatRow ) end) - in ( LrTable.NT 84, ( result, COMMA1left, PatRow1right), rest671) + in ( LrTable.NT 86, ( result, COMMA1left, PatRow1right), rest671) end | ( 252, ( rest671)) => let val result = MlyValue.CommaPatRow_opt (fn _ => ( NONE )) - in ( LrTable.NT 84, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 86, ( result, defaultPos, defaultPos), rest671) end | ( 253, ( ( _, ( MlyValue.PatComma_seq1 PatComma_seq11, PatComma_seq11left, PatComma_seq11right)) :: rest671)) => let val @@ -4650,12 +4675,12 @@ result = MlyValue.PatComma_seq0 (fn _ => let val (PatComma_seq1 as PatComma_seq11) = PatComma_seq11 () in ( PatComma_seq1 ) end) - in ( LrTable.NT 95, ( result, PatComma_seq11left, PatComma_seq11right + in ( LrTable.NT 97, ( result, PatComma_seq11left, PatComma_seq11right ), rest671) end | ( 254, ( rest671)) => let val result = MlyValue.PatComma_seq0 (fn _ => ( nil )) - in ( LrTable.NT 95, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 97, ( result, defaultPos, defaultPos), rest671) end | ( 255, ( ( _, ( MlyValue.PatComma_seq1 PatComma_seq11, _, PatComma_seq11right)) :: _ :: ( _, ( MlyValue.Pat Pat1, Pat1left, _)) @@ -4664,7 +4689,7 @@ PatComma_seq11right)) :: _ :: ( _, ( MlyValue.Pat Pat1, Pat1left, _)) val (PatComma_seq1 as PatComma_seq11) = PatComma_seq11 () in ( Pat :: PatComma_seq1 ) end) - in ( LrTable.NT 96, ( result, Pat1left, PatComma_seq11right), rest671 + in ( LrTable.NT 98, ( result, Pat1left, PatComma_seq11right), rest671 ) end | ( 256, ( ( _, ( MlyValue.Pat Pat1, Pat1left, Pat1right)) :: rest671 @@ -4672,7 +4697,7 @@ end as Pat1) = Pat1 () in ( [Pat] ) end) - in ( LrTable.NT 96, ( result, Pat1left, Pat1right), rest671) + in ( LrTable.NT 98, ( result, Pat1left, Pat1right), rest671) end | ( 257, ( ( _, ( MlyValue.PatComma_seq1 PatComma_seq11, _, PatComma_seq11right)) :: _ :: ( _, ( MlyValue.Pat Pat1, Pat1left, _)) @@ -4681,7 +4706,7 @@ PatComma_seq11right)) :: _ :: ( _, ( MlyValue.Pat Pat1, Pat1left, _)) val (PatComma_seq1 as PatComma_seq11) = PatComma_seq11 () in ( Pat :: PatComma_seq1 ) end) - in ( LrTable.NT 97, ( result, Pat1left, PatComma_seq11right), rest671 + in ( LrTable.NT 99, ( result, Pat1left, PatComma_seq11right), rest671 ) end | ( 258, ( ( _, ( MlyValue.AtPat AtPat1, AtPat1left, AtPat1right)) :: @@ -4797,7 +4822,7 @@ TyComma_seq21, _, _)) :: ( _, ( _, (LPARENleft as LPAREN1left), _)) :: val (EqIdent as EqIdent1) = EqIdent1 () in ( let val ty = CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, mk_LongTyCon LongTypeIdent) + TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft EqIdentright, ty, SOME (PP BACKQUOTEleft EqIdentright, @@ -4821,7 +4846,7 @@ TyComma_seq21, _, _)) :: ( _, ( _, (LPARENleft as LPAREN1left), _)) :: val (EqIdent_seq1 as EqIdent_seq11) = EqIdent_seq11 () in ( let val ty = CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, mk_LongTyCon LongTypeIdent) + TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft RBRACKETright, ty, SOME (PP LBRACKETleft RBRACKETright, @@ -4842,7 +4867,7 @@ MlyValue.Ty_sans_STAR (fn _ => let val (TyComma_seq2 as TyComma_seq21 val (LongTypeIdent as LongTypeIdent1) = LongTypeIdent1 () in ( CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, mk_LongTyCon LongTypeIdent) + TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) ) end) in ( LrTable.NT 48, ( result, LPAREN1left, LongTypeIdent1right), @@ -4857,7 +4882,7 @@ MlyValue.Ty_sans_STAR (fn _ => let val (Ty_sans_STAR as Ty_sans_STAR1 val (LongTypeIdent as LongTypeIdent1) = LongTypeIdent1 () in ( CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], mk_LongTyCon LongTypeIdent) + [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) ) end) in ( LrTable.NT 48, ( result, Ty_sans_STAR1left, LongTypeIdent1right) @@ -4874,7 +4899,7 @@ Ty_sans_STAR1) = Ty_sans_STAR1 () val (EqIdent as EqIdent1) = EqIdent1 () in ( let val ty = CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], mk_LongTyCon LongTypeIdent) + [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft EqIdentright, ty, SOME (PP BACKQUOTEleft EqIdentright, @@ -4898,7 +4923,7 @@ Ty_sans_STAR1) = Ty_sans_STAR1 () val (EqIdent_seq1 as EqIdent_seq11) = EqIdent_seq11 () in ( let val ty = CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], mk_LongTyCon LongTypeIdent) + [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft RBRACKETright, ty, SOME (PP LBRACKETleft RBRACKETright, @@ -5027,7 +5052,7 @@ rest671)) => let val result = MlyValue.TyComma_seq2 (fn _ => let val val (TyComma_seq2 as TyComma_seq21) = TyComma_seq21 () in ( Ty :: TyComma_seq2 ) end) - in ( LrTable.NT 104, ( result, Ty1left, TyComma_seq21right), rest671) + in ( LrTable.NT 106, ( result, Ty1left, TyComma_seq21right), rest671) end | ( 279, ( ( _, ( MlyValue.Ty Ty2, _, Ty2right)) :: _ :: ( _, ( @@ -5036,7 +5061,7 @@ MlyValue.TyComma_seq2 (fn _ => let val Ty1 = Ty1 () val Ty2 = Ty2 () in ( [Ty1, Ty2] ) end) - in ( LrTable.NT 104, ( result, Ty1left, Ty2right), rest671) + in ( LrTable.NT 106, ( result, Ty1left, Ty2right), rest671) end | ( 280, ( ( _, ( MlyValue.EqIdent EqIdent1, EqIdentleft, ( EqIdentright as EqIdent1right))) :: ( _, ( _, BACKQUOTEleft, _)) :: ( @@ -5047,7 +5072,7 @@ LongTypeIdent1) = LongTypeIdent1 () val (EqIdent as EqIdent1) = EqIdent1 () in ( let val ty = CONty (PP LongTypeIdentleft LongTypeIdentright, - [], mk_LongTyCon LongTypeIdent) + [], nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft EqIdentright, ty, SOME (PP BACKQUOTEleft EqIdentright, @@ -5059,7 +5084,25 @@ end) in ( LrTable.NT 49, ( result, LongTypeIdent1left, EqIdent1right), rest671) end -| ( 281, ( ( _, ( _, _, (RBRACKETright as RBRACKET1right))) :: ( _, ( +| ( 281, ( ( _, ( MlyValue.LongTypeIdent LongTypeIdent1, _, ( +LongTypeIdentright as LongTypeIdent1right))) :: ( _, ( +MlyValue.EqIdent EqIdent1, EqIdentleft, EqIdentright)) :: ( _, ( _, ( +BACKQUOTEleft as BACKQUOTE1left), _)) :: rest671)) => let val result + = MlyValue.AtomicTy (fn _ => let val (EqIdent as EqIdent1) = +EqIdent1 () + val (LongTypeIdent as LongTypeIdent1) = LongTypeIdent1 () + in ( + CONty (PP BACKQUOTEleft LongTypeIdentright, + [], + [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)], + mk_LongTyCon LongTypeIdent) +) +end) + in ( LrTable.NT 49, ( result, BACKQUOTE1left, LongTypeIdent1right), +rest671) +end +| ( 282, ( ( _, ( _, _, (RBRACKETright as RBRACKET1right))) :: ( _, ( MlyValue.EqIdent_seq1 EqIdent_seq11, EqIdent_seq1left, EqIdent_seq1right)) :: ( _, ( _, LBRACKETleft, _)) :: _ :: ( _, ( MlyValue.LongTypeIdent LongTypeIdent1, (LongTypeIdentleft as @@ -5069,7 +5112,7 @@ LongTypeIdent1) = LongTypeIdent1 () val (EqIdent_seq1 as EqIdent_seq11) = EqIdent_seq11 () in ( let val ty = CONty (PP LongTypeIdentleft LongTypeIdentright, - [], mk_LongTyCon LongTypeIdent) + [], nil, mk_LongTyCon LongTypeIdent) in PARty (PP LongTypeIdentleft RBRACKETright, ty, SOME (PP LBRACKETleft RBRACKETright, @@ -5081,35 +5124,34 @@ end) in ( LrTable.NT 49, ( result, LongTypeIdent1left, RBRACKET1right), rest671) end -| ( 282, ( ( _, ( MlyValue.LongTypeIdent LongTypeIdent1, ( +| ( 283, ( ( _, ( MlyValue.LongTypeIdent LongTypeIdent1, ( LongTypeIdentleft as LongTypeIdent1left), (LongTypeIdentright as LongTypeIdent1right))) :: rest671)) => let val result = MlyValue.AtomicTy (fn _ => let val (LongTypeIdent as LongTypeIdent1) = LongTypeIdent1 () in ( CONty (PP LongTypeIdentleft LongTypeIdentright, - [], mk_LongTyCon LongTypeIdent) + [], nil, mk_LongTyCon LongTypeIdent) ) end) in ( LrTable.NT 49, ( result, LongTypeIdent1left, LongTypeIdent1right ), rest671) end -| ( 283, ( ( _, ( MlyValue.TYVAR TYVAR1, (TYVARleft as TYVAR1left), ( +| ( 284, ( ( _, ( MlyValue.TYVAR TYVAR1, (TYVARleft as TYVAR1left), ( TYVARright as TYVAR1right))) :: rest671)) => let val result = MlyValue.AtomicTy (fn _ => let val (TYVAR as TYVAR1) = TYVAR1 () in ( TYVARty(PP TYVARleft TYVARright, mk_TyVar TYVAR) ) end) in ( LrTable.NT 49, ( result, TYVAR1left, TYVAR1right), rest671) end -| ( 284, ( ( _, ( MlyValue.EqIdent EqIdent1, _, (EqIdentright as -EqIdent1right))) :: ( _, ( _, BACKQUOTEleft, _)) :: ( _, ( _, _, -RBRACEright)) :: ( _, ( MlyValue.TyRow_opt TyRow_opt1, _, _)) :: ( _, -( _, (LBRACEleft as LBRACE1left), _)) :: rest671)) => let val result - = MlyValue.AtomicTy (fn _ => let val (TyRow_opt as TyRow_opt1) = -TyRow_opt1 () +| ( 285, ( ( _, ( MlyValue.EqIdent EqIdent1, _, (EqIdentright as +EqIdent1right))) :: ( _, ( _, BACKQUOTEleft, _)) :: _ :: ( _, ( +MlyValue.TyRow_opt TyRow_opt1, _, _)) :: ( _, ( _, (LBRACEleft as +LBRACE1left), _)) :: rest671)) => let val result = MlyValue.AtomicTy + (fn _ => let val (TyRow_opt as TyRow_opt1) = TyRow_opt1 () val (EqIdent as EqIdent1) = EqIdent1 () in ( - RECORDty (PP LBRACEleft RBRACEright, + RECORDty (PP LBRACEleft EqIdentright, TyRow_opt, SOME (PP BACKQUOTEleft EqIdentright, RegVar.mk_Named EqIdent)) ) @@ -5117,7 +5159,7 @@ end) in ( LrTable.NT 49, ( result, LBRACE1left, EqIdent1right), rest671) end -| ( 285, ( ( _, ( _, _, (RBRACEright as RBRACE1right))) :: ( _, ( +| ( 286, ( ( _, ( _, _, (RBRACEright as RBRACE1right))) :: ( _, ( MlyValue.TyRow_opt TyRow_opt1, _, _)) :: ( _, ( _, (LBRACEleft as LBRACE1left), _)) :: rest671)) => let val result = MlyValue.AtomicTy (fn _ => let val (TyRow_opt as TyRow_opt1) = TyRow_opt1 () @@ -5126,14 +5168,14 @@ end) in ( LrTable.NT 49, ( result, LBRACE1left, RBRACE1right), rest671) end -| ( 286, ( ( _, ( MlyValue.EqIdent EqIdent1, EqIdentleft, ( -EqIdentright as EqIdent1right))) :: ( _, ( _, BACKQUOTEleft, _)) :: ( - _, ( _, _, RPARENright)) :: ( _, ( MlyValue.Ty Ty1, _, _)) :: ( _, ( - _, (LPARENleft as LPAREN1left), _)) :: rest671)) => let val result = - MlyValue.AtomicTy (fn _ => let val (Ty as Ty1) = Ty1 () +| ( 287, ( ( _, ( MlyValue.EqIdent EqIdent1, EqIdentleft, ( +EqIdentright as EqIdent1right))) :: ( _, ( _, BACKQUOTEleft, _)) :: _ + :: ( _, ( MlyValue.Ty Ty1, _, _)) :: ( _, ( _, (LPARENleft as +LPAREN1left), _)) :: rest671)) => let val result = MlyValue.AtomicTy + (fn _ => let val (Ty as Ty1) = Ty1 () val (EqIdent as EqIdent1) = EqIdent1 () in ( - PARty (PP LPARENleft RPARENright, + PARty (PP LPARENleft EqIdentright, Ty, SOME (PP BACKQUOTEleft EqIdentright, [(PP EqIdentleft EqIdentright, @@ -5143,15 +5185,15 @@ end) in ( LrTable.NT 49, ( result, LPAREN1left, EqIdent1right), rest671) end -| ( 287, ( ( _, ( _, _, (RBRACKETright as RBRACKET1right))) :: ( _, ( +| ( 288, ( ( _, ( _, _, (RBRACKETright as RBRACKET1right))) :: ( _, ( MlyValue.EqIdent_seq1 EqIdent_seq11, EqIdent_seq1left, -EqIdent_seq1right)) :: _ :: ( _, ( _, BACKQUOTEleft, _)) :: ( _, ( _, - _, RPARENright)) :: ( _, ( MlyValue.Ty Ty1, _, _)) :: ( _, ( _, ( -LPARENleft as LPAREN1left), _)) :: rest671)) => let val result = -MlyValue.AtomicTy (fn _ => let val (Ty as Ty1) = Ty1 () +EqIdent_seq1right)) :: _ :: ( _, ( _, BACKQUOTEleft, _)) :: _ :: ( _, +( MlyValue.Ty Ty1, _, _)) :: ( _, ( _, (LPARENleft as LPAREN1left), _) +) :: rest671)) => let val result = MlyValue.AtomicTy (fn _ => let + val (Ty as Ty1) = Ty1 () val (EqIdent_seq1 as EqIdent_seq11) = EqIdent_seq11 () in ( - PARty (PP LPARENleft RPARENright, + PARty (PP LPARENleft RBRACKETright, Ty, SOME (PP BACKQUOTEleft RBRACKETright, map (fn s => (PP EqIdent_seq1left EqIdent_seq1right, @@ -5161,7 +5203,7 @@ end) in ( LrTable.NT 49, ( result, LPAREN1left, RBRACKET1right), rest671) end -| ( 288, ( ( _, ( _, _, (RPARENright as RPAREN1right))) :: ( _, ( +| ( 289, ( ( _, ( _, _, (RPARENright as RPAREN1right))) :: ( _, ( MlyValue.Ty Ty1, _, _)) :: ( _, ( _, (LPARENleft as LPAREN1left), _)) :: rest671)) => let val result = MlyValue.AtomicTy (fn _ => let val (Ty as Ty1) = Ty1 () @@ -5170,18 +5212,18 @@ end) in ( LrTable.NT 49, ( result, LPAREN1left, RPAREN1right), rest671) end -| ( 289, ( ( _, ( MlyValue.TyRow TyRow1, TyRow1left, TyRow1right)) :: +| ( 290, ( ( _, ( MlyValue.TyRow TyRow1, TyRow1left, TyRow1right)) :: rest671)) => let val result = MlyValue.TyRow_opt (fn _ => let val ( TyRow as TyRow1) = TyRow1 () in ( SOME TyRow ) end) - in ( LrTable.NT 87, ( result, TyRow1left, TyRow1right), rest671) + in ( LrTable.NT 89, ( result, TyRow1left, TyRow1right), rest671) end -| ( 290, ( rest671)) => let val result = MlyValue.TyRow_opt (fn _ => +| ( 291, ( rest671)) => let val result = MlyValue.TyRow_opt (fn _ => ( NONE )) - in ( LrTable.NT 87, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 89, ( result, defaultPos, defaultPos), rest671) end -| ( 291, ( ( _, ( MlyValue.CommaTyRow_opt CommaTyRow_opt1, _, +| ( 292, ( ( _, ( MlyValue.CommaTyRow_opt CommaTyRow_opt1, _, CommaTyRow_opt1right)) :: ( _, ( MlyValue.Ty Ty1, _, _)) :: _ :: ( _, ( MlyValue.Label Label1, (Labelleft as Label1left), _)) :: rest671)) => let val result = MlyValue.TyRow (fn _ => let val (Label as @@ -5198,19 +5240,19 @@ end) in ( LrTable.NT 45, ( result, Label1left, CommaTyRow_opt1right), rest671) end -| ( 292, ( ( _, ( MlyValue.TyRow TyRow1, _, TyRow1right)) :: ( _, ( _ +| ( 293, ( ( _, ( MlyValue.TyRow TyRow1, _, TyRow1right)) :: ( _, ( _ , COMMA1left, _)) :: rest671)) => let val result = MlyValue.CommaTyRow_opt (fn _ => let val (TyRow as TyRow1) = TyRow1 () in ( SOME TyRow ) end) - in ( LrTable.NT 88, ( result, COMMA1left, TyRow1right), rest671) + in ( LrTable.NT 90, ( result, COMMA1left, TyRow1right), rest671) end -| ( 293, ( rest671)) => let val result = MlyValue.CommaTyRow_opt (fn +| ( 294, ( rest671)) => let val result = MlyValue.CommaTyRow_opt (fn _ => ( NONE )) - in ( LrTable.NT 88, ( result, defaultPos, defaultPos), rest671) + in ( LrTable.NT 90, ( result, defaultPos, defaultPos), rest671) end -| ( 294, ( ( _, ( MlyValue.DECPOSINTEGER DECPOSINTEGER1, ( +| ( 295, ( ( _, ( MlyValue.DECPOSINTEGER DECPOSINTEGER1, ( DECPOSINTEGERleft as DECPOSINTEGER1left), DECPOSINTEGER1right)) :: rest671)) => let val result = MlyValue.Integer (fn _ => let val ( DECPOSINTEGER as DECPOSINTEGER1) = DECPOSINTEGER1 () @@ -5219,10 +5261,10 @@ DECPOSINTEGER as DECPOSINTEGER1) = DECPOSINTEGER1 () DECPOSINTEGERleft DECPOSINTEGER ) end) - in ( LrTable.NT 125, ( result, DECPOSINTEGER1left, + in ( LrTable.NT 127, ( result, DECPOSINTEGER1left, DECPOSINTEGER1right), rest671) end -| ( 295, ( ( _, ( MlyValue.DECNEGINTEGER DECNEGINTEGER1, ( +| ( 296, ( ( _, ( MlyValue.DECNEGINTEGER DECNEGINTEGER1, ( DECNEGINTEGERleft as DECNEGINTEGER1left), DECNEGINTEGER1right)) :: rest671)) => let val result = MlyValue.Integer (fn _ => let val ( DECNEGINTEGER as DECNEGINTEGER1) = DECNEGINTEGER1 () @@ -5231,10 +5273,10 @@ DECNEGINTEGER as DECNEGINTEGER1) = DECNEGINTEGER1 () DECNEGINTEGERleft DECNEGINTEGER ) end) - in ( LrTable.NT 125, ( result, DECNEGINTEGER1left, + in ( LrTable.NT 127, ( result, DECNEGINTEGER1left, DECNEGINTEGER1right), rest671) end -| ( 296, ( ( _, ( MlyValue.HEXINTEGER HEXINTEGER1, (HEXINTEGERleft +| ( 297, ( ( _, ( MlyValue.HEXINTEGER HEXINTEGER1, (HEXINTEGERleft as HEXINTEGER1left), HEXINTEGER1right)) :: rest671)) => let val result = MlyValue.Integer (fn _ => let val (HEXINTEGER as HEXINTEGER1 ) = HEXINTEGER1 () @@ -5242,17 +5284,17 @@ result = MlyValue.Integer (fn _ => let val (HEXINTEGER as HEXINTEGER1 HEXINTEGERleft HEXINTEGER ) end) - in ( LrTable.NT 125, ( result, HEXINTEGER1left, HEXINTEGER1right), + in ( LrTable.NT 127, ( result, HEXINTEGER1left, HEXINTEGER1right), rest671) end -| ( 297, ( ( _, ( MlyValue.DIGIT DIGIT1, DIGIT1left, DIGIT1right)) :: +| ( 298, ( ( _, ( MlyValue.DIGIT DIGIT1, DIGIT1left, DIGIT1right)) :: rest671)) => let val result = MlyValue.Integer (fn _ => let val ( DIGIT as DIGIT1) = DIGIT1 () in ( IntInf.fromInt DIGIT ) end) - in ( LrTable.NT 125, ( result, DIGIT1left, DIGIT1right), rest671) + in ( LrTable.NT 127, ( result, DIGIT1left, DIGIT1right), rest671) end -| ( 298, ( ( _, ( MlyValue.STRING STRING1, STRINGleft, STRING1right)) +| ( 299, ( ( _, ( MlyValue.STRING STRING1, STRINGleft, STRING1right)) :: ( _, ( _, HASH1left, _)) :: rest671)) => let val result = MlyValue.Char (fn _ => let val (STRING as STRING1) = STRING1 () in ( @@ -5261,9 +5303,9 @@ MlyValue.Char (fn _ => let val (STRING as STRING1) = STRING1 () | _ => raise LEXICAL_ERROR (STRINGleft, "string must have length 1") ) end) - in ( LrTable.NT 126, ( result, HASH1left, STRING1right), rest671) + in ( LrTable.NT 128, ( result, HASH1left, STRING1right), rest671) end -| ( 299, ( ( _, ( MlyValue.Integer Integer1, Integer1left, +| ( 300, ( ( _, ( MlyValue.Integer Integer1, Integer1left, Integer1right)) :: rest671)) => let val result = MlyValue.SCon (fn _ => let val (Integer as Integer1) = Integer1 () in ( mk_IntSCon Integer ) @@ -5271,14 +5313,14 @@ end) in ( LrTable.NT 51, ( result, Integer1left, Integer1right), rest671) end -| ( 300, ( ( _, ( MlyValue.WORD WORD1, (WORDleft as WORD1left), +| ( 301, ( ( _, ( MlyValue.WORD WORD1, (WORDleft as WORD1left), WORD1right)) :: rest671)) => let val result = MlyValue.SCon (fn _ => let val (WORD as WORD1) = WORD1 () in ( mk_WordSCon (raise_lexical_error_if_none WORDleft WORD) ) end) in ( LrTable.NT 51, ( result, WORD1left, WORD1right), rest671) end -| ( 301, ( ( _, ( MlyValue.STRING STRING1, STRING1left, STRING1right) +| ( 302, ( ( _, ( MlyValue.STRING STRING1, STRING1left, STRING1right) ) :: rest671)) => let val result = MlyValue.SCon (fn _ => let val ( STRING as STRING1) = STRING1 () in ( mk_StringSCon STRING ) @@ -5286,21 +5328,21 @@ end) in ( LrTable.NT 51, ( result, STRING1left, STRING1right), rest671) end -| ( 302, ( ( _, ( MlyValue.Char Char1, Char1left, Char1right)) :: +| ( 303, ( ( _, ( MlyValue.Char Char1, Char1left, Char1right)) :: rest671)) => let val result = MlyValue.SCon (fn _ => let val (Char as Char1) = Char1 () in ( mk_CharSCon Char ) end) in ( LrTable.NT 51, ( result, Char1left, Char1right), rest671) end -| ( 303, ( ( _, ( MlyValue.REAL REAL1, (REALleft as REAL1left), +| ( 304, ( ( _, ( MlyValue.REAL REAL1, (REALleft as REAL1left), REAL1right)) :: rest671)) => let val result = MlyValue.SCon (fn _ => let val (REAL as REAL1) = REAL1 () in ( mk_RealSCon (raise_lexical_error_if_none REALleft REAL) ) end) in ( LrTable.NT 51, ( result, REAL1left, REAL1right), rest671) end -| ( 304, ( ( _, ( MlyValue.TyVarSeq1 TyVarSeq11, TyVarSeq11left, +| ( 305, ( ( _, ( MlyValue.TyVarSeq1 TyVarSeq11, TyVarSeq11left, TyVarSeq11right)) :: rest671)) => let val result = MlyValue.TyVarSeq (fn _ => let val (TyVarSeq1 as TyVarSeq11) = TyVarSeq11 () in ( TyVarSeq1 ) @@ -5308,28 +5350,28 @@ end) in ( LrTable.NT 50, ( result, TyVarSeq11left, TyVarSeq11right), rest671) end -| ( 305, ( rest671)) => let val result = MlyValue.TyVarSeq (fn _ => +| ( 306, ( rest671)) => let val result = MlyValue.TyVarSeq (fn _ => ( [] )) in ( LrTable.NT 50, ( result, defaultPos, defaultPos), rest671) end -| ( 306, ( ( _, ( MlyValue.TYVAR TYVAR1, TYVAR1left, TYVAR1right)) :: +| ( 307, ( ( _, ( MlyValue.TYVAR TYVAR1, TYVAR1left, TYVAR1right)) :: rest671)) => let val result = MlyValue.TyVarSeq1 (fn _ => let val ( TYVAR as TYVAR1) = TYVAR1 () in ( [mk_TyVar TYVAR] ) end) - in ( LrTable.NT 102, ( result, TYVAR1left, TYVAR1right), rest671) + in ( LrTable.NT 104, ( result, TYVAR1left, TYVAR1right), rest671) end -| ( 307, ( ( _, ( _, _, RPAREN1right)) :: ( _, ( +| ( 308, ( ( _, ( _, _, RPAREN1right)) :: ( _, ( MlyValue.TyVarComma_seq1 TyVarComma_seq11, _, _)) :: ( _, ( _, LPAREN1left, _)) :: rest671)) => let val result = MlyValue.TyVarSeq1 (fn _ => let val (TyVarComma_seq1 as TyVarComma_seq11) = TyVarComma_seq11 () in ( TyVarComma_seq1 ) end) - in ( LrTable.NT 102, ( result, LPAREN1left, RPAREN1right), rest671) + in ( LrTable.NT 104, ( result, LPAREN1left, RPAREN1right), rest671) end -| ( 308, ( ( _, ( MlyValue.TyVarComma_seq1 TyVarComma_seq11, _, +| ( 309, ( ( _, ( MlyValue.TyVarComma_seq1 TyVarComma_seq11, _, TyVarComma_seq11right)) :: _ :: ( _, ( MlyValue.TYVAR TYVAR1, TYVAR1left, _)) :: rest671)) => let val result = MlyValue.TyVarComma_seq1 (fn _ => let val (TYVAR as TYVAR1) = TYVAR1 @@ -5337,15 +5379,47 @@ MlyValue.TyVarComma_seq1 (fn _ => let val (TYVAR as TYVAR1) = TYVAR1 val (TyVarComma_seq1 as TyVarComma_seq11) = TyVarComma_seq11 () in ( mk_TyVar TYVAR :: TyVarComma_seq1 ) end) - in ( LrTable.NT 103, ( result, TYVAR1left, TyVarComma_seq11right), + in ( LrTable.NT 105, ( result, TYVAR1left, TyVarComma_seq11right), rest671) end -| ( 309, ( ( _, ( MlyValue.TYVAR TYVAR1, TYVAR1left, TYVAR1right)) :: +| ( 310, ( ( _, ( MlyValue.TYVAR TYVAR1, TYVAR1left, TYVAR1right)) :: rest671)) => let val result = MlyValue.TyVarComma_seq1 (fn _ => let val (TYVAR as TYVAR1) = TYVAR1 () in ( [mk_TyVar TYVAR] ) end) - in ( LrTable.NT 103, ( result, TYVAR1left, TYVAR1right), rest671) + in ( LrTable.NT 105, ( result, TYVAR1left, TYVAR1right), rest671) +end +| ( 311, ( ( _, ( MlyValue.RegVarSeq1 RegVarSeq11, RegVarSeq11left, +RegVarSeq11right)) :: rest671)) => let val result = +MlyValue.RegVarSeq (fn _ => let val (RegVarSeq1 as RegVarSeq11) = +RegVarSeq11 () + in ( RegVarSeq1 ) +end) + in ( LrTable.NT 71, ( result, RegVarSeq11left, RegVarSeq11right), +rest671) +end +| ( 312, ( rest671)) => let val result = MlyValue.RegVarSeq (fn _ => + ( [] )) + in ( LrTable.NT 71, ( result, defaultPos, defaultPos), rest671) +end +| ( 313, ( ( _, ( MlyValue.EqIdent EqIdent1, _, EqIdent1right)) :: ( + _, ( _, BACKQUOTE1left, _)) :: rest671)) => let val result = +MlyValue.RegVarSeq1 (fn _ => let val (EqIdent as EqIdent1) = EqIdent1 + () + in ( [RegVar.mk_Named EqIdent] ) +end) + in ( LrTable.NT 72, ( result, BACKQUOTE1left, EqIdent1right), rest671 +) +end +| ( 314, ( ( _, ( _, _, RBRACKET1right)) :: ( _, ( +MlyValue.EqIdent_seq1 EqIdent_seq11, _, _)) :: _ :: ( _, ( _, +BACKQUOTE1left, _)) :: rest671)) => let val result = +MlyValue.RegVarSeq1 (fn _ => let val (EqIdent_seq1 as EqIdent_seq11) + = EqIdent_seq11 () + in ( map RegVar.mk_Named EqIdent_seq1 ) +end) + in ( LrTable.NT 72, ( result, BACKQUOTE1left, RBRACKET1right), +rest671) end | _ => raise (mlyAction i392) end diff --git a/test/explicit_regions/Makefile b/test/explicit_regions/Makefile index e1eac3265..0a02d97df 100644 --- a/test/explicit_regions/Makefile +++ b/test/explicit_regions/Makefile @@ -3,7 +3,8 @@ REML=../../bin/reml $(FLAGS) SMLSOURCES=er*.sml param.sml rec.sml tup.sml call.sml call2.sml ty1.sml err_expty1.sml err_expty2.sml \ err_expty3.sml err_patty1.sml err_funty1.sml err_funty2.sml err_funty3.sml expty1.sml expty2.sml \ - disputs.sml disputs2.sml server.sml mod.sml mod2.sml mod3.sml mod4.sml mod5.sml + disputs.sml disputs2.sml server.sml err_ty2.sml err_ty3.sml mod.sml mod2.sml mod3.sml mod4.sml \ + mod5.sml .PHONY: all all: diff --git a/test/explicit_regions/all.tst b/test/explicit_regions/all.tst index ce8776d54..591bb5169 100644 --- a/test/explicit_regions/all.tst +++ b/test/explicit_regions/all.tst @@ -86,6 +86,10 @@ par.sml nobasislib noopt (* A sound implementation of pa par-no.sml ccl ecte nobasislib noopt (* But it needs to be satisfied *) par-no2.sml ccl ecte nobasislib noopt (* The trivial definition of par is not ok *) +err_ty2.sml ccl ecte (* type abbreviations, repeated abstract regvar *) +err_ty3.sml ccl ecte (* type abbreviations, free regvar *) +err_ty3.sml ccl ecte (* type abbreviations, invalid order of regvars *) + mod.sml ccl ecte (* Signature matching: It is an error if the implementation type is less general than the specified type. *) mod2.sml ccl ecte (* Signature matching: It is an error if the specified @@ -98,4 +102,8 @@ mod5.sml (* Signature matching: ok. *) mod6.sml ccl ecte (* Signature matching: It is an error if the specification type is less general than the implementation type. *) mod7.sml ccl ecte (* Signature matching: It is an error if the specification type - is less general than the implementation type. *) \ No newline at end of file + is less general than the implementation type. *) + +expty3.sml (* Applying region abstract type bindings *) + +err_expty4.sml ccl ecte (* Applied region-abstract type functions are tracked *) \ No newline at end of file diff --git a/test/explicit_regions/er18.sml.log.ok b/test/explicit_regions/er18.sml.log.ok index c3dcfd964..4fdc216fb 100644 --- a/test/explicit_regions/er18.sml.log.ok +++ b/test/explicit_regions/er18.sml.log.ok @@ -1,5 +1,10 @@ [reading source file: er18.sml] +er18.sml, line 3, column 5: + type t = {}`r0 + ^^^^^^^^^ +Unbound explicit region or effect variable r0. + er18.sml, line 3, column 11: type t = {}`r0 ^^^ diff --git a/test/explicit_regions/err_expty4.sml b/test/explicit_regions/err_expty4.sml new file mode 100644 index 000000000..53e3bcadb --- /dev/null +++ b/test/explicit_regions/err_expty4.sml @@ -0,0 +1,7 @@ +(* Applied region-abstract type functions are tracked *) + +type `r1 t = string`r1 * string`r1 + +fun f `[r r2] (x:string`r2) : `r t = (x ^ "", x) + +val () = print (op ^ (f "Hello") ^ "\n") diff --git a/test/explicit_regions/err_expty4.sml.log.ok b/test/explicit_regions/err_expty4.sml.log.ok new file mode 100644 index 000000000..59a450400 --- /dev/null +++ b/test/explicit_regions/err_expty4.sml.log.ok @@ -0,0 +1,8 @@ +[reading source file: err_expty4.sml] +> type `r1 t + val f : string`r2 -> string`r * string`r +err_expty4.sml, line 5, column 6: + fun f `[r r2] (x:string`r2) : `r t = (x ^ "", x) + ^^^^^^^ +Cannot unify the explicit region variables `r2 and `r +Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/err_ty2.sml b/test/explicit_regions/err_ty2.sml new file mode 100644 index 000000000..01dab7cdd --- /dev/null +++ b/test/explicit_regions/err_ty2.sml @@ -0,0 +1,3 @@ +(* type abbreviations - err, repeated elements *) + +type `[r1 r2 r3 r4 r5 r6 r2 r7] u = (int*int)`r1 diff --git a/test/explicit_regions/err_ty2.sml.log.ok b/test/explicit_regions/err_ty2.sml.log.ok new file mode 100644 index 000000000..6c5055624 --- /dev/null +++ b/test/explicit_regions/err_ty2.sml.log.ok @@ -0,0 +1,7 @@ +[reading source file: err_ty2.sml] + +err_ty2.sml, line 3, column 5: + type `[r1 r2 r3 r4 r5 r6 r2 r7] u = (int*int)`r1 + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +Repeated identifiers r2 and r2. +Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/err_ty3.sml b/test/explicit_regions/err_ty3.sml new file mode 100644 index 000000000..6f44c7b54 --- /dev/null +++ b/test/explicit_regions/err_ty3.sml @@ -0,0 +1,3 @@ +(* type abbreviations - err, type function not closed *) + +type `[r1 r2 r3 r4 r5 r6 r2 r7] s = (int*int)`r23 diff --git a/test/explicit_regions/err_ty3.sml.log.ok b/test/explicit_regions/err_ty3.sml.log.ok new file mode 100644 index 000000000..a0da10b45 --- /dev/null +++ b/test/explicit_regions/err_ty3.sml.log.ok @@ -0,0 +1,7 @@ +[reading source file: err_ty3.sml] + +err_ty3.sml, line 3, column 5: + type `[r1 r2 r3 r4 r5 r6 r2 r7] s = (int*int)`r23 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Unbound explicit region or effect variable r23. +Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/expty3.sml b/test/explicit_regions/expty3.sml new file mode 100644 index 000000000..dbd4c79d7 --- /dev/null +++ b/test/explicit_regions/expty3.sml @@ -0,0 +1,7 @@ +(* Type declarations may abstract over region variables *) + +type `r1 t = string`r1 * string`r1 + +fun f `[r r2] (x:string`r2) : `r t = (x ^ "", x ^ "") + +val () = print (op ^ (f "Hello") ^ "\n") diff --git a/test/explicit_regions/expty3.sml.out.ok b/test/explicit_regions/expty3.sml.out.ok new file mode 100644 index 000000000..2dfd5e3a3 --- /dev/null +++ b/test/explicit_regions/expty3.sml.out.ok @@ -0,0 +1 @@ +HelloHello diff --git a/test/explicit_regions/ty1.sml b/test/explicit_regions/ty1.sml index 31c1c9879..18d175548 100644 --- a/test/explicit_regions/ty1.sml +++ b/test/explicit_regions/ty1.sml @@ -1,12 +1,12 @@ (* type constructors can be annotated with explicit regions *) -type ty_con_1 = string`r1 +type `r1 ty_con_1 = string`r1 (* tuple types can be annotated with explicit regions *) -type ty_tuple_1 = (int * string)`r2 +type `r2 ty_tuple_1 = (int * string)`r2 (* record types can be annotated with explicit regions *) -type ty_record_1 = {a:int, b:string}`r3 +type `r3 ty_record_1 = {a:int, b:string}`r3 (* larger examples *) -type all = (int * bool)`r1 list`r2 +type `[r1 r2] all = (int * bool)`r1 list`r2 From a4f5786b3cf932790d02821367b2e344c2e8cc54 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Fri, 27 Feb 2026 00:12:11 +0100 Subject: [PATCH 02/12] Update src/Common/EfficientElab/StatObject.sml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/Common/EfficientElab/StatObject.sml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Common/EfficientElab/StatObject.sml b/src/Common/EfficientElab/StatObject.sml index 903e03e44..63a9aa62d 100644 --- a/src/Common/EfficientElab/StatObject.sml +++ b/src/Common/EfficientElab/StatObject.sml @@ -1760,7 +1760,10 @@ structure StatObject: STATOBJECT = let fun fresh (tv as ref(NO_TY_LINK tvdesc)) = Type.from_TyVar(TyVar.refresh tv) | fresh _ = die ("eq.fresh: tysch= " ^ string sigma1) val types = map fresh tvs1 - val regvars = map (fn _ => RegVar.mk_Fresh "f") rvs1 + val regvars = map (fn rv => + if RegVar.is_effvar rv + then RegVar.mk_Fresh "e" + else RegVar.mk_Fresh "r") rvs1 val ty1 = instance_with_types_regvars (sigma1, types, regvars) val ty2 = instance_with_types_regvars (sigma2, types, regvars) in Type.eq(ty1,ty2) From 2eada544a828ef4c423372b6353b6336164d0ae3 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Fri, 27 Feb 2026 00:31:30 +0100 Subject: [PATCH 03/12] fixes --- src/Common/ElabDec.sml | 12 +++++++----- test/explicit_regions/Makefile | 4 ++-- test/explicit_regions/all.tst | 2 +- test/explicit_regions/err_ty3.sml | 2 +- test/explicit_regions/err_ty3.sml.log.ok | 4 ++-- test/explicit_regions/err_ty4.sml | 3 +++ test/explicit_regions/err_ty4.sml.log.ok | 7 +++++++ 7 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 test/explicit_regions/err_ty4.sml create mode 100644 test/explicit_regions/err_ty4.sml.log.ok diff --git a/src/Common/ElabDec.sml b/src/Common/ElabDec.sml index 77c8eb9c2..45917c844 100644 --- a/src/Common/ElabDec.sml +++ b/src/Common/ElabDec.sml @@ -1175,13 +1175,15 @@ structure ElabDec: ELABDEC = fun regVarsOrderInvalid effvar nil = false | regVarsOrderInvalid effvar (rv::rvs) = (effvar andalso not (RegVar.is_effvar rv)) - orelse regVarsOrderInvalid (RegVar.is_effvar rv) rvs + orelse regVarsOrderInvalid (effvar orelse RegVar.is_effvar rv) rvs in case elab_ty(C', ty) of (SOME tau, out_ty) => let val _ = Level.pop() - val typeFcn = TypeFcn.from_TyVars_and_Type (TyVars, regvars, tau) - val tystr = TyStr.from_theta_and_VE(typeFcn, VE.empty) + fun tystr () = + let val typeFcn = TypeFcn.from_TyVars_and_Type (TyVars, regvars, tau) + in TyStr.from_theta_and_VE(typeFcn, VE.empty) + end val (TE, out_typbind_opt) = elab_typbind_opt(C, typbind_opt) in if not(isEmptyTyVarList freeTyvars) then @@ -1192,7 +1194,7 @@ structure ElabDec: ELABDEC = (TE, OG.TYPBIND(errorConv(i, ErrorInfo.REGVARS_NOT_IN_REGVARSEQ freeRegvars), ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) else if (EqSet.member tycon (TE.dom TE)) then - (TE.plus (TE.singleton(tycon, tystr), TE), + (TE.plus (TE.singleton(tycon, tystr()), TE), OG.TYPBIND(repeatedIdsError(i, [ErrorInfo.TYCON_RID tycon]), ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) else if not(List.null tyvarsRepeated) then @@ -1207,7 +1209,7 @@ structure ElabDec: ELABDEC = (TE, OG.TYPBIND(errorConv(i, ErrorInfo.REGVARS_INVALID_ORDER regvars), ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) else (*ok*) - (TE.plus (TE.singleton(tycon, tystr), TE), + (TE.plus (TE.singleton(tycon, tystr()), TE), OG.TYPBIND(okConv i, ExplicitTyVars, (okConv ir,regvars), tycon, out_ty, out_typbind_opt)) end | (NONE, out_ty) => diff --git a/test/explicit_regions/Makefile b/test/explicit_regions/Makefile index 0a02d97df..59e23cf7d 100644 --- a/test/explicit_regions/Makefile +++ b/test/explicit_regions/Makefile @@ -3,8 +3,8 @@ REML=../../bin/reml $(FLAGS) SMLSOURCES=er*.sml param.sml rec.sml tup.sml call.sml call2.sml ty1.sml err_expty1.sml err_expty2.sml \ err_expty3.sml err_patty1.sml err_funty1.sml err_funty2.sml err_funty3.sml expty1.sml expty2.sml \ - disputs.sml disputs2.sml server.sml err_ty2.sml err_ty3.sml mod.sml mod2.sml mod3.sml mod4.sml \ - mod5.sml + expty3.sml disputs.sml disputs2.sml server.sml err_ty2.sml err_ty3.sml err_ty4.sml mod.sml mod2.sml \ + mod3.sml mod4.sml mod5.sml .PHONY: all all: diff --git a/test/explicit_regions/all.tst b/test/explicit_regions/all.tst index 591bb5169..c4d6e71ac 100644 --- a/test/explicit_regions/all.tst +++ b/test/explicit_regions/all.tst @@ -88,7 +88,7 @@ par-no2.sml ccl ecte nobasislib noopt (* The trivial definition of pa err_ty2.sml ccl ecte (* type abbreviations, repeated abstract regvar *) err_ty3.sml ccl ecte (* type abbreviations, free regvar *) -err_ty3.sml ccl ecte (* type abbreviations, invalid order of regvars *) +err_ty4.sml ccl ecte (* type abbreviations, invalid order of regvars *) mod.sml ccl ecte (* Signature matching: It is an error if the implementation type is less general than the specified type. *) diff --git a/test/explicit_regions/err_ty3.sml b/test/explicit_regions/err_ty3.sml index 6f44c7b54..74fc4dc4a 100644 --- a/test/explicit_regions/err_ty3.sml +++ b/test/explicit_regions/err_ty3.sml @@ -1,3 +1,3 @@ (* type abbreviations - err, type function not closed *) -type `[r1 r2 r3 r4 r5 r6 r2 r7] s = (int*int)`r23 +type `[r1 r2 r3 r4 r5 r6 r7] s = (int*int)`r23 diff --git a/test/explicit_regions/err_ty3.sml.log.ok b/test/explicit_regions/err_ty3.sml.log.ok index a0da10b45..72dcaf415 100644 --- a/test/explicit_regions/err_ty3.sml.log.ok +++ b/test/explicit_regions/err_ty3.sml.log.ok @@ -1,7 +1,7 @@ [reading source file: err_ty3.sml] err_ty3.sml, line 3, column 5: - type `[r1 r2 r3 r4 r5 r6 r2 r7] s = (int*int)`r23 - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + type `[r1 r2 r3 r4 r5 r6 r7] s = (int*int)`r23 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Unbound explicit region or effect variable r23. Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/err_ty4.sml b/test/explicit_regions/err_ty4.sml new file mode 100644 index 000000000..bb67884c5 --- /dev/null +++ b/test/explicit_regions/err_ty4.sml @@ -0,0 +1,3 @@ +(* invalid order of region and effect variables in type declarations *) + +type `[r1 e1 r2] t = int #e1 -> string`r1 * string`r2 diff --git a/test/explicit_regions/err_ty4.sml.log.ok b/test/explicit_regions/err_ty4.sml.log.ok new file mode 100644 index 000000000..8a496ed51 --- /dev/null +++ b/test/explicit_regions/err_ty4.sml.log.ok @@ -0,0 +1,7 @@ +[reading source file: err_ty4.sml] + +err_ty4.sml, line 3, column 5: + type `[r1 e1 r2] t = int #e1 -> string`r1 * string`r2 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Region variables must occur before effect variables in type parameters: r1, e1 and r2. +Stopping compilation of MLB-file due to error (code 1). From c59c206ccfc9b021197495e56d920a5152cca952 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Fri, 27 Feb 2026 00:38:41 +0100 Subject: [PATCH 04/12] fixes --- src/Common/DecGrammar.sml | 23 ++++++++++++----------- src/Common/EfficientElab/StatObject.sml | 2 -- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Common/DecGrammar.sml b/src/Common/DecGrammar.sml index fd7ab3ee2..1f0e83c4b 100644 --- a/src/Common/DecGrammar.sml +++ b/src/Common/DecGrammar.sml @@ -1184,17 +1184,18 @@ struct end | CONty(_, tys, regvars, longtycon) => - let - fun idTail ts = - NODE{start="", finish=" " ^ TyCon.pr_LongTyCon longtycon, - indent=0, children=ts, childsep=RIGHT " " - } - fun layRegvars () = NODE{start="`[", finish="]", indent=2, - children=map (fn (_,r) => LEAF(RegVar.pr r)) regvars, - childsep=RIGHT " "} - fun layTys () = NODE{start="(", finish=")", indent=1, - children=map layoutTy tys, - childsep=RIGHT ", "} + let fun idTail ts = + NODE{start="", finish=" " ^ TyCon.pr_LongTyCon longtycon, + indent=0, children=ts, childsep=RIGHT " "} + fun layRegvars () = + case regvars of + [(_,r)] => LEAF("`" ^ RegVar.pr r) + | _ => NODE{start="`[", finish="]", indent=2, + children=map (fn (_,r) => LEAF(RegVar.pr r)) regvars, + childsep=RIGHT " "} + fun layTys () = NODE{start="(", finish=")", indent=1, + children=map layoutTy tys, + childsep=RIGHT ", "} in case tys of nil => (case regvars of nil => LEAF(TyCon.pr_LongTyCon longtycon) diff --git a/src/Common/EfficientElab/StatObject.sml b/src/Common/EfficientElab/StatObject.sml index 63a9aa62d..26956256f 100644 --- a/src/Common/EfficientElab/StatObject.sml +++ b/src/Common/EfficientElab/StatObject.sml @@ -1752,8 +1752,6 @@ structure StatObject: STATOBJECT = * instantiated variable. The equality function here is also * used to implement equality of type functions. *) - (* MEMO: explicit region variables are ignored in comparisons (currently!) *) - fun eq (([],_,ty1), ([],_,ty2)) = Type.eq(ty1,ty2) | eq (sigma1 as (tvs1,rvs1,_), sigma2 as (tvs2,rvs2,_)) = length tvs1 = length tvs2 andalso length rvs1 = length rvs2 andalso From c9add14dd9846f9f6fdc9067c79ebd1a872f544b Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Mon, 9 Mar 2026 22:18:17 +0100 Subject: [PATCH 05/12] ReML simplifications and simplification of type functions --- Makefile.in | 5 + NEWS.md | 4 + src/Common/DecGrammar.sml | 16 +- src/Common/EfficientElab/Environments.sml | 4 +- src/Common/EfficientElab/StatObject.sml | 256 +++--- src/Common/ElabDec.sml | 18 +- src/Common/STATOBJECT.sml | 421 +++++----- src/Common/TyName.sml | 50 +- src/Compiler/Regions/Effect.sml | 15 +- src/Compiler/Regions/MulExp.sml | 1 + src/Compiler/Regions/SpreadExpression.sml | 2 +- src/Parsing/Topdec.grm | 85 +- src/Parsing/Topdec.grm.sml | 823 ++++++++++---------- test/explicit_regions/err_expty4.sml | 4 +- test/explicit_regions/err_expty4.sml.log.ok | 4 +- test/explicit_regions/err_ty1.sml.log.ok | 8 +- test/explicit_regions/err_ty2.sml | 2 +- test/explicit_regions/err_ty2.sml.log.ok | 6 +- test/explicit_regions/err_ty3.sml | 2 +- test/explicit_regions/err_ty3.sml.log.ok | 2 +- test/explicit_regions/err_ty4.sml | 2 +- test/explicit_regions/err_ty4.sml.log.ok | 2 +- test/explicit_regions/expty3.sml | 4 +- test/explicit_regions/mod.sml.log.ok | 4 - test/explicit_regions/mod3.sml.log.ok | 4 - test/explicit_regions/mod4.sml.log.ok | 4 - test/explicit_regions/nomut-err.sml.log.ok | 2 +- test/explicit_regions/ty1.sml | 8 +- 28 files changed, 877 insertions(+), 881 deletions(-) diff --git a/Makefile.in b/Makefile.in index 0c852f824..fc355388b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -71,6 +71,7 @@ mlkit_basislibs: mlkit .PHONY: mlkit_kitlibs mlkit_kitlibs: (cd basis && SML_LIB=.. ../bin/mlkit -c -no_gc kitlib.mlb) + (cd basis && SML_LIB=.. ../bin/mlkit -c -no_gc -par kitlib.mlb) (cd basis && SML_LIB=.. ../bin/mlkit -c -gc kitlib.mlb) (cd basis && SML_LIB=.. ../bin/mlkit -c -gc -prof kitlib.mlb) (cd basis && SML_LIB=.. ../bin/mlkit -c -no_gc -prof kitlib.mlb) @@ -111,19 +112,23 @@ install_mlkit_basislibs: $(MKDIR) $(LIBDIR)/basis/MLB/RI_GC $(MKDIR) $(LIBDIR)/basis/MLB/RI_GC_PROF $(MKDIR) $(LIBDIR)/basis/MLB/RI_PROF + $(MKDIR) $(LIBDIR)/basis/MLB/RI_PAR $(MKDIR) $(LIBDIR)/basis/io/MLB $(MKDIR) $(LIBDIR)/basis/io/MLB/RI $(MKDIR) $(LIBDIR)/basis/io/MLB/RI_GC $(MKDIR) $(LIBDIR)/basis/io/MLB/RI_GC_PROF $(MKDIR) $(LIBDIR)/basis/io/MLB/RI_PROF + $(MKDIR) $(LIBDIR)/basis/io/MLB/RI_PAR $(INSTALLDATA) -p basis/MLB/RI/*.{d,eb,eb1,lnk,o,df} $(LIBDIR)/basis/MLB/RI $(INSTALLDATA) -p basis/MLB/RI_GC/*.{d,eb,eb1,lnk,o,df} $(LIBDIR)/basis/MLB/RI_GC $(INSTALLDATA) -p basis/MLB/RI_PROF/*.{d,eb,eb1,lnk,o,rev,df} $(LIBDIR)/basis/MLB/RI_PROF $(INSTALLDATA) -p basis/MLB/RI_GC_PROF/*.{d,eb,eb1,lnk,o,rev,df} $(LIBDIR)/basis/MLB/RI_GC_PROF + $(INSTALLDATA) -p basis/MLB/RI_PAR/*.{d,eb,eb1,lnk,o,df} $(LIBDIR)/basis/MLB/RI_PAR $(INSTALLDATA) -p basis/io/MLB/RI/*.{d,eb,eb1,lnk,o} $(LIBDIR)/basis/io/MLB/RI $(INSTALLDATA) -p basis/io/MLB/RI_GC/*.{d,eb,eb1,lnk,o} $(LIBDIR)/basis/io/MLB/RI_GC $(INSTALLDATA) -p basis/io/MLB/RI_PROF/*.{d,eb,eb1,lnk,o,rev} $(LIBDIR)/basis/io/MLB/RI_PROF $(INSTALLDATA) -p basis/io/MLB/RI_GC_PROF/*.{d,eb,eb1,lnk,o,rev} $(LIBDIR)/basis/io/MLB/RI_GC_PROF + $(INSTALLDATA) -p basis/io/MLB/RI_PAR/*.{d,eb,eb1,lnk,o} $(LIBDIR)/basis/io/MLB/RI_PAR .PHONY: barry barry: diff --git a/NEWS.md b/NEWS.md index 836c3a205..bc24d19b9 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,9 @@ ## MLKit NEWS +* mael 2026-03-09: More ReML features. + +* mael 2026-03-09: Simplification of elaboration type functions. + ### MLKit version 4.7.21 is released * mael 2026-01-15: Removal of various unneeded source files and removal of diff --git a/src/Common/DecGrammar.sml b/src/Common/DecGrammar.sml index 1f0e83c4b..a5b419e53 100644 --- a/src/Common/DecGrammar.sml +++ b/src/Common/DecGrammar.sml @@ -913,15 +913,15 @@ struct val tyT = layoutTy ty val this = - NODE{start="", finish="", indent=0, - children=(case tyvars_opt of SOME x => [x] + NODE{start="", finish="", indent=0, + children=(case tyvars_opt of SOME x => [x] + | NONE => nil + ) @ [tyconT] @ + (case regvars_opt of SOME x => [x] | NONE => nil - ) @ - (case regvars_opt of SOME x => [x] - | NONE => nil - ) @ [tyconT, eqT, tyT], - childsep=RIGHT " " - } + ) @ [eqT, tyT], + childsep=RIGHT " " + } in this :: (case typbind_opt of SOME typbind => treesOfTypbind typbind diff --git a/src/Common/EfficientElab/Environments.sml b/src/Common/EfficientElab/Environments.sml index d4a64521c..355239b8a 100644 --- a/src/Common/EfficientElab/Environments.sml +++ b/src/Common/EfficientElab/Environments.sml @@ -818,13 +818,15 @@ structure Environments: ENVIRONMENTS = (fn (tycon, TYSTR {theta, VE as (VARENV v)}) => let val names = StatObject.newTVNames() - val {vars, body} = + val {vars, vars2, body} = TypeFcn.pretty_string names theta val vars' = (case vars of "" => "" | _ => vars ^ " ") + val vars2' = (case vars2 of "" => "" | _ => " " ^ vars2) in Report.line (if Ident.Map.isEmpty v then "type " ^ vars' ^ TyCon.pr_TyCon tycon + ^ vars2' ^ (if bindings then " = " ^ body else "") else "datatype " ^ vars' ^ TyCon.pr_TyCon tycon) diff --git a/src/Common/EfficientElab/StatObject.sml b/src/Common/EfficientElab/StatObject.sml index 26956256f..624c417ed 100644 --- a/src/Common/EfficientElab/StatObject.sml +++ b/src/Common/EfficientElab/StatObject.sml @@ -1885,44 +1885,60 @@ structure StatObject: STATOBJECT = (* For the optional ReML regvars: it is a syntactic restriction that region * variables appear before effect variables. *) - datatype TypeFcn = TYPEFCN of {tyvars : TyVar list, regvars: regvar list, tau : Type} + datatype TypeFcn = TYFCN_FN of {tyvars : TyVar list, regvars: regvar list, tau : Type} + | TYFCN_TN of TyName structure TypeFcn = struct - fun layout (TYPEFCN {tyvars,regvars,tau}) = + fun layout (TYFCN_TN tn) = TyName.layout tn + | layout (TYFCN_FN {tyvars,regvars,tau}) = let val tau = findType tau val start = "/\\" ^ TyVar.pr_tyvars tyvars val start = case regvars of nil => start | rvs => start ^ " " ^ String.concatWith "," (map RegVar.pr rvs) - in PP.NODE {start=start ^ ".", finish="", indent=0, - childsep=PP.NOSEP, children=[Type.layout tau]} - end - - fun eq (TYPEFCN {tyvars, regvars, tau}, TYPEFCN {tyvars=tyvars', regvars=regvars', tau=tau'}) = - TypeScheme.eq((tyvars,regvars,tau),(tyvars',regvars',tau')) + in PP.NODE {start=start ^ ".", finish="", indent=0, + childsep=PP.NOSEP, children=[Type.layout tau]} + end fun from_TyVars_and_Type (tyvars : TyVar list, regvars: RegVar.regvar list, tau : Type) = let fun check (effvar:bool) nil = () | check effvar (r::rs) = if effvar then if RegVar.is_effvar r then check effvar rs - else die "from_TyVars_RegVars_and_Type: region variables do not all appear before effect variables" + else die "from_TyVars_RegVars_and_Type: region variables do not all appear \ + \before effect variables" else check (RegVar.is_effvar r) rs in check false regvars ; (Type.generalise {ov=false, imp=true, tau=tau}; - TYPEFCN {tyvars=tyvars, regvars=regvars, tau=tau}) + TYFCN_FN {tyvars=tyvars, regvars=regvars, tau=tau}) end - fun apply (TYPEFCN {tyvars,regvars,tau}, taus : Type list, regvars') : Type = - if length regvars = length regvars' then + fun apply (TYFCN_TN tn, taus, rvs) = + if length taus <> TyName.arity tn then + die ("TypeFcn.tn.wrong arity: " ^ TyName.pr_TyName tn) + else + let val (rn,en) = TyName.arity_reml tn + val rvso = case rvs of + nil => NONE + | _ => SOME (parseInfoDummy,map (fn r => (parseInfoDummy,r)) rvs) + in if length rvs <> rn+en andalso length rvs <> 0 then + die ("TypeFcn.tn.wrong ReML arity: " ^ TyName.pr_TyName tn) + else Type.from_ConsType(Type.mk_ConsType(taus,tn,rvso)) + end + | apply (TYFCN_FN {tyvars,regvars,tau}, taus : Type list, regvars') : Type = + if length regvars = length regvars' orelse length regvars' = 0 then TypeScheme.instance_with_types_regvars ((tyvars,regvars,tau),taus,regvars') - else die "TypeFcn.apply.incompatible regvar lists" + else die ("TypeFcn.apply.incompatible regvar lists. Abstract: " + ^ Int.toString (length regvars) ^ ", Args: " + ^ Int.toString (length regvars')) - fun arity (TYPEFCN {tyvars,regvars,tau}) = length tyvars + fun arity (TYFCN_TN tn) = TyName.arity tn + | arity (TYFCN_FN {tyvars,regvars,tau}) = length tyvars - fun arity_reml (TYPEFCN {tyvars,regvars,tau}) = + fun arity_reml (TYFCN_TN tn) = TyName.arity_reml tn + | arity_reml (TYFCN_FN {tyvars,regvars,tau}) = (length(List.filter (not o RegVar.is_effvar) regvars), length(List.filter RegVar.is_effvar regvars)) @@ -1930,14 +1946,18 @@ structure StatObject: STATOBJECT = * function admits equality because the bound type variables * have already been renamed to admit equality. *) - fun admits_equality (theta as TYPEFCN {tyvars,regvars,tau}) : bool = + fun admits_equality (TYFCN_TN tn) = TyName.equality tn + | admits_equality (TYFCN_FN {tyvars,regvars,tau}) : bool = case Type.make_equality (TypeScheme.instance (tyvars,nil,tau)) of SOME _ => true | NONE => false - fun tynames (TYPEFCN {tyvars,regvars,tau}) = Type.tynames tau + fun tynames (TYFCN_TN tn) = TyName.Set.singleton tn + | tynames (TYFCN_FN {tyvars,regvars,tau}) = Type.tynames tau - fun from_TyName (tyname : TyName) : TypeFcn = + fun from_TyName tn = TYFCN_TN tn + + fun from_TyName' (tyname : TyName) : TypeFcn = let val tyvars = List.tabulate(TyName.arity tyname, fn _ => TyVar.fresh_normal ()) val _ = Level.push () fun mkFr s = (parseInfoDummy,RegVar.mk_Fresh s) @@ -1955,7 +1975,8 @@ structure StatObject: STATOBJECT = in from_TyVars_and_Type (tyvars, rvs, tau) end - fun to_TyName (TYPEFCN {tyvars,regvars,tau}) : TyName option = + fun to_TyName (TYFCN_TN tn) = SOME tn + | to_TyName (TYFCN_FN {tyvars,regvars,tau}) : TyName option = case Type.un_ConsType tau of SOME (taus,t,opt) => let fun check ([],[]) = true @@ -1976,47 +1997,58 @@ structure StatObject: STATOBJECT = end | _ => NONE + fun eq (TYFCN_FN {tyvars, regvars, tau}, TYFCN_FN {tyvars=tyvars', regvars=regvars', tau=tau'}) = + TypeScheme.eq((tyvars,regvars,tau),(tyvars',regvars',tau')) + | eq (TYFCN_TN tn, TYFCN_TN tn') = TyName.eq(tn,tn') + | eq (tf, tf') = + case (to_TyName tf, to_TyName tf') of + (SOME tn, SOME tn') => TyName.eq(tn,tn') + | _ => false + + val is_TyName = is_Some o to_TyName infix ^^ fun s ^^ s' = if s = "" then s' else s ^ " " ^ s' - fun pretty_string names (TYPEFCN {tyvars,regvars,tau}) = + fun pretty_string names (TYFCN_FN {tyvars,regvars,tau}) = let val body = Type.pretty_string names tau val vars = case tyvars of [] => "" | [tyvar] => TyVar.pretty_string names tyvar | tyvars => "(" ^ String.concatWith ", " (map (TyVar.pretty_string names) tyvars) ^ ")" - val vars = case regvars of - nil => vars - | [rv] => vars ^^ "`" ^ RegVar.pr rv - | rvs => vars ^^ "`[" ^ String.concatWith " " (map RegVar.pr rvs) ^ "]" - in {vars=vars,body=body} + val vars2 = case regvars of + nil => "" + | [rv] => "`" ^ RegVar.pr rv + | rvs => "`[" ^ String.concatWith " " (map RegVar.pr rvs) ^ "]" + in {vars=vars,body=body,vars2=vars2} end + | pretty_string names (TYFCN_TN tn) = pretty_string names (from_TyName' tn) + fun pretty_string' names theta = #body (pretty_string names theta) - fun match (TYPEFCN{tau,...}, TYPEFCN{tau=tau0,...}) : unit = Type.match(tau,tau0) + fun match (TYFCN_FN{tau,...}, TYFCN_FN{tau=tau0,...}) : unit = Type.match(tau,tau0) + | match (TYFCN_TN tn, TYFCN_TN tn') = TyName.match (tn,tn') + | match _ = () end (*TypeFcn*) - - datatype TypeFcn' = TYNAME of TyName | EXPANDED of TypeFcn datatype realisation = - Not_Id of TypeFcn' TyName.Map.map + Not_Id of TypeFcn TyName.Map.map | Realisation_Id structure Realisation = struct fun tynamesRng (Realisation_Id) = TyName.Set.empty | tynamesRng (Not_Id m) = - TyName.Map.Fold (fn ((tn,TYNAME tn'),acc) => + TyName.Map.Fold (fn ((tn,TYFCN_TN tn'),acc) => if TyName.eq(tn,tn') then acc else TyName.Set.insert tn' acc - | ((tn,EXPANDED tf),acc) => - TyName.Set.union (TyName.Set.remove tn - (TypeFcn.tynames tf)) - acc) - TyName.Set.empty m + | ((tn,tf),acc) => + TyName.Set.union (TyName.Set.remove tn + (TypeFcn.tynames tf)) + acc) + TyName.Set.empty m fun dom Realisation_Id = TyName.Set.empty | dom (Not_Id m) = TyName.Set.fromList(TyName.Map.dom m) @@ -2051,21 +2083,21 @@ structure StatObject: STATOBJECT = fun is_Id Realisation_Id = true (* conservative test *) | is_Id _ = false - fun singleton (t,theta) = Not_Id (TyName.Map.singleton(t,EXPANDED theta)) + fun singleton (t,theta) = Not_Id (TyName.Map.singleton(t,theta)) - fun from_T_and_tyname (T, t0) = + fun from_T_and_tyname (T, tn) = if TyName.Set.isEmpty T then Realisation_Id - else Not_Id(TyName.Set.fold (fn t => fn acc => TyName.Map.add(t,TYNAME t0,acc)) TyName.Map.empty T) + else Not_Id(TyName.Set.fold (fn t => fn acc => TyName.Map.add(t,TYFCN_TN tn,acc)) TyName.Map.empty T) fun renaming' (T: TyName.Set.Set) : TyName.Set.Set * realisation = if TyName.Set.isEmpty T then (TyName.Set.empty, Id) - else let val (T', m) : TyName.Set.Set * TypeFcn' TyName.Map.map = + else let val (T', m) : TyName.Set.Set * TypeFcn TyName.Map.map = TyName.Set.fold (fn t : TyName => fn (T', m) => let val t' = TyName.freshTyName {tycon = TyName.tycon t, arity = TyName.arity t, arity_reml = TyName.arity_reml t, equality = TyName.equality t} - in (TyName.Set.insert t' T', TyName.Map.add (t, TYNAME t', m)) + in (TyName.Set.insert t' T', TyName.Map.add (t, TYFCN_TN t', m)) end) (TyName.Set.empty, TyName.Map.empty) T in (T', Not_Id m) end @@ -2094,19 +2126,18 @@ structure StatObject: STATOBJECT = local exception Inverse in fun inverse Realisation_Id = SOME Realisation_Id | inverse (Not_Id m) = - (SOME(Not_Id(TyName.Map.Fold(fn ((t, theta), acc) => - case theta of - TYNAME t' => if TyName.Set.member t' (TyName.Set.fromList(TyName.Map.dom acc)) - then raise Inverse - else TyName.Map.add(t', TYNAME t, acc) - | EXPANDED theta' => raise Inverse) TyName.Map.empty m)) - handle Inverse => NONE) + SOME(Not_Id(TyName.Map.Fold(fn ((t, theta), acc) => + case theta of + TYFCN_TN tn => if TyName.Set.member tn (TyName.Set.fromList(TyName.Map.dom acc)) + then raise Inverse + else TyName.Map.add(tn, TYFCN_TN t, acc) + | _ => raise Inverse) TyName.Map.empty m)) + handle Inverse => NONE end fun on_TyName Realisation_Id t : TypeFcn = TypeFcn.from_TyName t | on_TyName (Not_Id m) t = (case TyName.Map.lookup m t of - SOME(TYNAME t) => TypeFcn.from_TyName t - | SOME(EXPANDED theta) => theta + SOME theta => theta | NONE => TypeFcn.from_TyName t) fun on_TyName_set (rea : realisation) (T : TyName.Set.Set) = @@ -2114,68 +2145,56 @@ structure StatObject: STATOBJECT = TyName.Set.fold (fn t => fn T => TyName.Set.union (TypeFcn.tynames (on_TyName rea t)) T) TyName.Set.empty T - fun on_TyName' Realisation_Id t : TypeFcn' = TYNAME t - | on_TyName' (Not_Id m) t = (case TyName.Map.lookup m t of - SOME theta => theta - | NONE => TYNAME t) - fun on_Type Realisation_Id ty = ty | on_Type phi ty = (* NB: keep levels, so that it works for type schemes and type functions as well *) - (case findType ty of - {TypeDesc = TYVAR _, level} => ty - | {TypeDesc = RECTYPE (r,rvi), level} => - {TypeDesc = RECTYPE (Type.RecType.map (on_Type phi) r,rvi), - level = ref (!level)} - | {TypeDesc = ARROW(ty1,rvi0,ty2,rvi), level} => - {TypeDesc = ARROW(on_Type phi ty1, rvi0, on_Type phi ty2, rvi), - level = ref (!level)} - | {TypeDesc = CONSTYPE(tylist,t,rvis),level} => - (*definition pg 19. sec. 4.4 Types and Type Functions + case findType ty of + {TypeDesc = TYVAR _, level} => ty + | {TypeDesc = RECTYPE (r,rvi), level} => + {TypeDesc = RECTYPE (Type.RecType.map (on_Type phi) r,rvi), + level = ref (!level)} + | {TypeDesc = ARROW(ty1,rvi0,ty2,rvi), level} => + {TypeDesc = ARROW(on_Type phi ty1, rvi0, on_Type phi ty2, rvi), + level = ref (!level)} + | {TypeDesc = CONSTYPE(tylist,t,rvis),level} => + (*definition pg 19. sec. 4.4 Types and Type Functions beta-conversion carried out after substituting in type functions for type names*) - let val theta = on_TyName' phi t - - fun TypeFcn_apply' (TYNAME t', tau_list) = - {TypeDesc = CONSTYPE (tau_list,t',rvis), - level = ref (!level)} - | TypeFcn_apply' (EXPANDED theta, tau_list) = (* memo: figure out what to do with rvis - push it down into tau... *) - let val rvs = case URef.!! rvis of - SOME (_,rvis) => map #2 rvis - | NONE => nil - val tau = TypeFcn.apply (theta, tau_list, rvs) - in correct_levels_Type tau ; - tau - end - in - TypeFcn_apply' (theta, map (on_Type phi) tylist) - end) - + let val theta = on_TyName phi t + fun TypeFcn_apply' (TYFCN_TN t', tau_list) = + {TypeDesc = CONSTYPE (tau_list,t',rvis), + level = ref (!level)} + | TypeFcn_apply' (theta, tau_list) = (* memo: figure out what to do with rvis - push it down into tau... *) + let val rvs = case URef.!! rvis of + SOME (_,rvis) => map #2 rvis + | NONE => nil + val tau = TypeFcn.apply (theta, tau_list, rvs) + in correct_levels_Type tau + ; tau + end + in TypeFcn_apply' (theta, map (on_Type phi) tylist) + end fun on_TypeScheme Realisation_Id scheme = scheme | on_TypeScheme phi (sigma as (tyvars,regvars,tau)) = - if List.exists TyVar.is_overloaded tyvars then sigma (* type schemes for overloaded identifiers are rigid *) - else (tyvars,regvars,on_Type phi tau) + if List.exists TyVar.is_overloaded tyvars then sigma (* Type schemes for overloaded *) + else (tyvars,regvars,on_Type phi tau) (* identifiers are rigid *) fun on_TypeFcn Realisation_Id theta = theta - | on_TypeFcn phi (theta as TYPEFCN {tyvars,regvars,tau}) = - TYPEFCN{tyvars=tyvars,regvars=regvars,tau=on_Type phi tau} (* NOTE: arity of theta should be preserved, which differ - * from the case for type schemes ; mael-2007-11-07 *) - fun on_TypeFcn' Realisation_Id theta = theta - | on_TypeFcn' phi (TYNAME t) = on_TyName' phi t - | on_TypeFcn' phi (EXPANDED theta) = EXPANDED (on_TypeFcn phi theta) - + | on_TypeFcn phi (TYFCN_TN tn) = on_TyName phi tn + | on_TypeFcn phi (TYFCN_FN {tyvars,regvars,tau}) = + TYFCN_FN{tyvars=tyvars,regvars=regvars,tau=on_Type phi tau} (* NOTE: arity of theta should be preserved, + * which differ from the case for type + * schemes ; mael-2007-11-07 *) fun on_Realisation Realisation_Id phi = phi | on_Realisation phi Realisation_Id = Realisation_Id | on_Realisation phi (Not_Id m) = - Not_Id(TyName.Map.Fold (fn ((t,theta), acc) => - TyName.Map.add(t,on_TypeFcn' phi theta,acc)) TyName.Map.empty m) + Not_Id(TyName.Map.Fold (fn ((t,theta), acc) => + TyName.Map.add(t,on_TypeFcn phi theta,acc)) TyName.Map.empty m) - fun layout_TypeFcn' (TYNAME t) = TyName.layout t - | layout_TypeFcn' (EXPANDED theta) = TypeFcn.layout theta fun layout Realisation_Id = PP.LEAF "Id" | layout (Not_Id m) = TyName.Map.layoutMap {start="{",eq=" -> ", finish="}",sep=", "} - TyName.layout layout_TypeFcn' m + TyName.layout TypeFcn.layout m fun (Realisation_Id : realisation) oo (phi : realisation) : realisation = phi | phi oo Realisation_Id = phi @@ -2188,18 +2207,16 @@ structure StatObject: STATOBJECT = TyName.Set.fold (fn t => fn acc => acc andalso TypeFcn.eq(on_TyName rea0 t, on_TyName rea t)) true T - fun eq (Realisation_Id, Realisation_Id) = true (* conservative check, thus eq is a bad word for it; - * - better now ; mael 2004-04-06 *) - | eq (rea1,rea2) = - let val T = TyName.Set.union (dom rea1) (dom rea2) - in enrich (rea1,(rea2,T)) - end + fun eq (Realisation_Id, Realisation_Id) = true (* conservative check, thus eq is a bad word for it; *) + | eq (rea1,rea2) = (* - better now ; mael 2004-04-06 *) + let val T = TyName.Set.union (dom rea1) (dom rea2) + in enrich (rea1,(rea2,T)) + end + fun match (Realisation_Id, rea0) = () | match (Not_Id m, rea0) = - let fun convert (EXPANDED theta) = theta - | convert (TYNAME t) = TypeFcn.from_TyName t - in TyName.Map.Fold(fn ((t, theta),_) => TypeFcn.match(convert theta,on_TyName rea0 t)) () m - end + TyName.Map.Fold(fn ((t, theta),_) => TypeFcn.match(theta,on_TyName rea0 t)) () m + end (*Realisation*) structure Picklers : sig @@ -2536,29 +2553,26 @@ structure StatObject: STATOBJECT = end val pu_TypeFcn = - let fun to (tvs,rvs,t) = TYPEFCN {tyvars=tvs,regvars=rvs,tau=t} - fun from (TYPEFCN {tyvars=tvs,regvars,tau=t}) = (tvs,regvars,t) - in Pickle.convert0 (to,from) pu_TypeScheme + let fun toInt (TYFCN_TN _) = 0 + | toInt (TYFCN_FN _) = 1 + fun fun_TYFCN_TN _ = + Pickle.con1 TYFCN_TN (fn TYFCN_TN a => a | _ => die "pu_TypeFcn.TYFCN_TN") + TyName.pu + fun fun_TYFCN_FN _ = + Pickle.con1 (fn (tvs,rvs,t) => TYFCN_FN{tyvars=tvs,regvars=rvs,tau=t}) + (fn TYFCN_FN {tyvars,regvars,tau} => (tyvars,regvars,tau) + | _ => die "pu_TypeFcn.TYFCN_FN") + pu_TypeScheme + in Pickle.dataGen("StatObject.Picklers.TypeFcn",toInt,[fun_TYFCN_TN,fun_TYFCN_FN]) end val pu_realisation = - let val pu_TypeFcn' = - let fun toInt (TYNAME _) = 0 - | toInt (EXPANDED _) = 1 - fun fun_TYNAME _ = - Pickle.con1 TYNAME (fn TYNAME a => a | _ => die "pu_TypeFcn'.TYNAME") - TyName.pu - fun fun_EXPANDED _ = - Pickle.con1 EXPANDED (fn EXPANDED a => a | _ => die "pu_TypeFcn'.EXPANDED") - pu_TypeFcn - in Pickle.dataGen("StatObject.Picklers.TypeFcn'",toInt,[fun_TYNAME,fun_EXPANDED]) - end - fun to (SOME e) = Not_Id e + let fun to (SOME e) = Not_Id e | to NONE = Realisation_Id fun from (Not_Id e) = SOME e | from Realisation_Id = NONE in Pickle.convert (to,from) - (Pickle.optionGen(TyName.Map.pu TyName.pu pu_TypeFcn')) + (Pickle.optionGen(TyName.Map.pu TyName.pu pu_TypeFcn)) end (* mael 2022-01-24: Really, we should transform entire diff --git a/src/Common/ElabDec.sml b/src/Common/ElabDec.sml index 45917c844..633339d22 100644 --- a/src/Common/ElabDec.sml +++ b/src/Common/ElabDec.sml @@ -1863,14 +1863,16 @@ structure ElabDec: ELABDEC = in if expectedArity <> actualArity then err (ErrorInfo.WRONG_ARITY {expected=expectedArity, actual=actualArity}) - else if #1 expectedArityReml <> #1 actualArityReml then (* ReML: later allow for *) - err (ErrorInfo.REGVARS_WRONG_ARITY_R (* actuals to have 0 arity *) - {expected= #1 expectedArityReml, - actual= #1 actualArityReml}) - else if #2 expectedArityReml <> #2 actualArityReml then - err (ErrorInfo.REGVARS_WRONG_ARITY_E - {expected= #2 expectedArityReml, - actual= #2 actualArityReml}) + else if #1 expectedArityReml <> #1 actualArityReml (* ReML: allow for *) + andalso #1 actualArityReml <> 0 (* actuals to have 0 arity *) + then err (ErrorInfo.REGVARS_WRONG_ARITY_R + {expected= #1 expectedArityReml, + actual= #1 actualArityReml}) + else if #2 expectedArityReml <> #2 actualArityReml + andalso #2 actualArityReml <> 0 + then err (ErrorInfo.REGVARS_WRONG_ARITY_E + {expected= #2 expectedArityReml, + actual= #2 actualArityReml}) else (SOME(TypeFcn.apply (typeFcn, tau_list, map #2 regvars')), OG.CONty (okConv i, out_ty_list, regvars', longtycon)) diff --git a/src/Common/STATOBJECT.sml b/src/Common/STATOBJECT.sml index acfb56ff6..72fc55913 100644 --- a/src/Common/STATOBJECT.sml +++ b/src/Common/STATOBJECT.sml @@ -4,7 +4,6 @@ signature STATOBJECT = sig - (*types provided by this module:*) type level type TVNames type TyVar @@ -15,10 +14,8 @@ signature STATOBJECT = type Substitution type TypeScheme type TypeFcn - type realisation(*tyrea*) - - (*types from other modules:*) - type ExplicitTyVar (*the type of type variables explicit in the source*) + type realisation (* type realisation *) + type ExplicitTyVar (* the type of type variables explicit in the source *) type TyName = TyName.TyName type StringTree = TyName.Set.StringTree type lab @@ -29,141 +26,135 @@ signature STATOBJECT = structure ExplicitTyVarMap : MONO_FINMAP where type dom = ExplicitTyVar - (*Level: for an explanation of type inference using `let levels' + (* Level: for an explanation of type inference using `let levels' see Martin Elsman: A Portable Standard ML Implementation. Master's Thesis, Tech. Univ. of Denmark, Dept. of C. S. 1994.*) structure Level : sig - val push : unit -> unit - val pop : unit -> unit - val GENERIC : level - val current : unit -> level + val push : unit -> unit + val pop : unit -> unit + val GENERIC : level + val current : unit -> level val pr : level -> string end - (*Association list for the printing of type variables:*) + (* Association list for the printing of type variables:*) val newTVNames : unit -> TVNames structure TyVar : sig - val eq : TyVar * TyVar -> bool - val lt : TyVar * TyVar -> bool + val eq : TyVar * TyVar -> bool + val lt : TyVar * TyVar -> bool val id : TyVar -> int - val equality : TyVar -> bool - val fresh_normal : unit -> TyVar - val fresh_overloaded : TyName list -> TyVar - (*fresh_overloaded bla = get a socalled overloaded tyvar that is overloaded - to the types indicated by `bla'.*) - val from_ExplicitTyVar : ExplicitTyVar -> TyVar - val is_overloaded : TyVar -> bool - val resolve_overloaded : TyVar -> TyName.Set.Set - val string : TyVar -> string - val string' : (Type -> string) -> TyVar -> string - val pretty_string : TVNames -> TyVar -> string - val layout : TyVar -> StringTree - - (*TODO 26/01/1997 14:17. tho.: ugly ad hoc set functions:*) - val intersectTyVarSet : TyVar list * TyVar list -> TyVar list - val unionTyVarSet : TyVar list * TyVar list -> TyVar list - -(* val pu : TyVar Pickle.pu *) + val equality : TyVar -> bool + val fresh_normal : unit -> TyVar + val fresh_overloaded : TyName list -> TyVar + (*fresh_overloaded bla = get a socalled overloaded tyvar that is overloaded + to the types indicated by `bla'.*) + val from_ExplicitTyVar : ExplicitTyVar -> TyVar + val is_overloaded : TyVar -> bool + val resolve_overloaded : TyVar -> TyName.Set.Set + val string : TyVar -> string + val string' : (Type -> string) -> TyVar -> string + val pretty_string : TVNames -> TyVar -> string + val layout : TyVar -> StringTree + val intersectTyVarSet : TyVar list * TyVar list -> TyVar list + val unionTyVarSet : TyVar list * TyVar list -> TyVar list end (*TyVar*) structure Type : sig - val eq : Type * Type -> bool - val fresh_normal : unit -> Type (*fresh_normal () = a fresh tyvar*) - val tyvars : Type -> TyVar list - val tynames : Type -> TyName.Set.Set - val string : Type -> string - val string_repl : Type -> string (* for use with type-indexed value printing in the REPL *) - - val pretty_string : TVNames -> Type -> string - val string_as_ty : Type * Type -> string - (*The second type is a guide for printing*) - val pretty_string_as_ty : TVNames -> (Type*Type) -> string - val layout : Type -> StringTree - val from_TyVar : TyVar -> Type - val to_TyVar : Type -> TyVar option - - (*record types*) - val from_RecType : RecType * regvar_info option -> Type - val to_RecType : Type -> (RecType * regvar_info option) option - val contains_row_variable : Type -> bool - (*contains_row_variable rho = true iff there exists a - row variable in the type rho*) - val add_regvars : ParseInfo.ParseInfo * regvar_info list -> Type -> Type (* raises Fail msg on error *) + val eq : Type * Type -> bool + val fresh_normal : unit -> Type (* A fresh tyvar *) + val tyvars : Type -> TyVar list + val tynames : Type -> TyName.Set.Set + val string : Type -> string + val string_repl : Type -> string (* For type-indexed value printing in the REPL *) + + val pretty_string : TVNames -> Type -> string + val string_as_ty : Type * Type -> string (* The second type is a guide for printing*) + val pretty_string_as_ty : TVNames -> (Type*Type) -> string + val layout : Type -> StringTree + val from_TyVar : TyVar -> Type + val to_TyVar : Type -> TyVar option + + (* Record types *) + val from_RecType : RecType * regvar_info option -> Type + val to_RecType : Type -> (RecType * regvar_info option) option + val contains_row_variable : Type -> bool (* true iff row variable the type *) + val add_regvars : ParseInfo.ParseInfo * regvar_info list -> Type -> Type + (* Raises Fail msg on error *) val remove_regvars : RegVar.regvar list -> Type -> Type - val contains_regvars : Type -> bool (* used by CompileDec *) - - structure RecType : - sig - val empty : RecType (* "{}" *) - val dotdotdot : unit -> RecType (* "{...}" *) - val add_field : lab * Type -> RecType -> RecType - val sorted_labs : RecType -> lab list (* Needed by compiler. *) - val to_list : RecType -> (lab * Type) list - (*needed by compiler. the returned list is sorted - (non-ascending) with respect to Lab.<*) - val to_pair : RecType -> Type * Type - end - val from_pair : Type * Type -> Type - val from_triple : Type * Type * Type -> Type - val Unit : Type - - (*function types*) - val from_FunType : FunType -> Type - val to_FunType : Type -> FunType option - val mk_FunType : Type * regvar_info option * Type * regvar_info option -> FunType - val un_FunType : FunType -> (Type * regvar_info option * Type * regvar_info option) option - - (*constructed types*) - val from_ConsType : ConsType -> Type - val to_ConsType : Type -> ConsType option - val mk_ConsType : Type list * TyName * (ParseInfo.ParseInfo * regvar_info list) option -> ConsType - val un_ConsType : ConsType -> (Type list * TyName * (ParseInfo.ParseInfo * regvar_info list) option) option - - val Exn : Type - val is_Exn : Type -> bool - val mk_Arrow : Type * regvar_info option * Type * regvar_info option -> Type - val un_Arrow : Type -> (Type * regvar_info option * Type * regvar_info option) option - val is_Arrow : Type -> bool - val mk_Ref : Type -> Type - - (* Special constants *) - val Int31 : Type - val Int32 : Type - val Int63 : Type - val Int64 : Type - val IntInf : Type - val IntDefault : unit -> Type (* Either Int31 or Int32, - * dependent on tagging; used - * for resolving overloading. *) - val Real : Type - val Bool : Type (* needed for initial TE and VE *) - val Word8 : Type - val Word31 : Type - val Word32 : Type - val Word63 : Type - val Word64 : Type - val WordDefault : unit -> Type (* Either Word31 or Word32, - * dependent on tagging; used - * for resolving overloading. *) - val String : Type - val Char : Type - - val of_scon : scon -> {type_scon: Type, overloading : TyVar option} - - datatype unify_result = UnifyOk (* of Substitution *) + val contains_regvars : Type -> bool (* Used by CompileDec *) + + structure RecType : + sig + val empty : RecType (* "{}" *) + val dotdotdot : unit -> RecType (* "{...}" *) + val add_field : lab * Type -> RecType -> RecType + val sorted_labs : RecType -> lab list (* Needed by compiler. *) + val to_list : RecType -> (lab * Type) list + (*needed by compiler. the returned list is sorted + (non-ascending) with respect to Lab.<*) + val to_pair : RecType -> Type * Type + end + val from_pair : Type * Type -> Type + val from_triple : Type * Type * Type -> Type + val Unit : Type + + (*function types*) + val from_FunType : FunType -> Type + val to_FunType : Type -> FunType option + val mk_FunType : Type * regvar_info option * Type * regvar_info option -> FunType + val un_FunType : FunType -> (Type * regvar_info option * Type * regvar_info option) option + + (*constructed types*) + val from_ConsType : ConsType -> Type + val to_ConsType : Type -> ConsType option + val mk_ConsType : Type list * TyName * (ParseInfo.ParseInfo * regvar_info list) option -> ConsType + val un_ConsType : ConsType -> (Type list * TyName * (ParseInfo.ParseInfo * regvar_info list) option) option + + val Exn : Type + val is_Exn : Type -> bool + val mk_Arrow : Type * regvar_info option * Type * regvar_info option -> Type + val un_Arrow : Type -> (Type * regvar_info option * Type * regvar_info option) option + val is_Arrow : Type -> bool + val mk_Ref : Type -> Type + + (* Special constants *) + val Int31 : Type + val Int32 : Type + val Int63 : Type + val Int64 : Type + val IntInf : Type + val IntDefault : unit -> Type (* Either Int31 or Int32, + * dependent on tagging; used + * for resolving overloading. *) + val Real : Type + val Bool : Type (* needed for initial TE and VE *) + val Word8 : Type + val Word31 : Type + val Word32 : Type + val Word63 : Type + val Word64 : Type + val WordDefault : unit -> Type (* Either Word31 or Word32, + * dependent on tagging; used + * for resolving overloading. *) + val String : Type + val Char : Type + + val of_scon : scon -> {type_scon: Type, overloading : TyVar option} + + datatype unify_result = UnifyOk (* of Substitution *) | UnifyFail of string | UnifyRankError of TyVar * TyName - val unify : {unify_regvars:bool} -> Type * Type -> unify_result + val unify : {unify_regvars:bool} -> Type * Type -> unify_result - val match : Type * Type -> unit (* for compilation manager *) + val match : Type * Type -> unit (* for compilation manager *) - val pu : Type Pickle.pu + val pu : Type Pickle.pu end (*Type*) @@ -171,53 +162,53 @@ signature STATOBJECT = structure TypeScheme : sig - val eq : TypeScheme * TypeScheme -> bool - val to_TyVars_and_Type : TypeScheme -> TyVar list * RegVar.regvar list * Type (* for the compiler *) - (*Make a type into a typescheme with no bound variables:*) - val from_Type : Type -> TypeScheme - val tyvars : TypeScheme -> TyVar list - val tynames : TypeScheme -> TyName.Set.Set - val string : TypeScheme -> string - val pretty_string : TVNames -> TypeScheme -> string - val layout : TypeScheme -> StringTree - - (* Get an instance of a TypeScheme; instance' also gives - * the list of types to which the generic type variables of the type - * scheme have been instantiated to.*) - - val instance : TypeScheme -> Type - val instance' : TypeScheme -> Type * Type list - val generalises_TypeScheme : TypeScheme * TypeScheme -> bool - val generalises_Type : TypeScheme * Type -> bool - - (* close imp sigma = generalise generic type variables in - * sigma except overload tyvars; used by Environment. The bool - * should be true for generalisation proper and false if the - * type scheme stems from a valbind that is expansive. *) - - val close : bool -> TypeScheme -> TypeScheme - - (* close_overload tau = generalise generic type variables also - * overloaded tyvars. *) - - val close_overload : Type -> TypeScheme - - (*violates_equality T sigma = false, iff, assuming the tynames in - T admit equality, sigma admits equality, i.e., violates_equality - T sigma = non((all t in T admit equality) => sigma admits - equality). violates_equality is used when maximising equality in - a TE (in TE.maximise_TE_equality). T will be those datatypes in - TE we tentatively assume to admit equality, and sigma will be the - type scheme of a constructor.*) - - val violates_equality : TyName.Set.Set -> TypeScheme -> bool - - (*for compilation manager:*) - val match : TypeScheme * TypeScheme -> unit + val eq : TypeScheme * TypeScheme -> bool + val to_TyVars_and_Type : TypeScheme -> TyVar list * RegVar.regvar list * Type (* for the compiler *) + (*Make a type into a typescheme with no bound variables:*) + val from_Type : Type -> TypeScheme + val tyvars : TypeScheme -> TyVar list + val tynames : TypeScheme -> TyName.Set.Set + val string : TypeScheme -> string + val pretty_string : TVNames -> TypeScheme -> string + val layout : TypeScheme -> StringTree + + (* Get an instance of a TypeScheme; instance' also gives + * the list of types to which the generic type variables of the type + * scheme have been instantiated to.*) + + val instance : TypeScheme -> Type + val instance' : TypeScheme -> Type * Type list + val generalises_TypeScheme : TypeScheme * TypeScheme -> bool + val generalises_Type : TypeScheme * Type -> bool + + (* close imp sigma = generalise generic type variables in + * sigma except overload tyvars; used by Environment. The bool + * should be true for generalisation proper and false if the + * type scheme stems from a valbind that is expansive. *) + + val close : bool -> TypeScheme -> TypeScheme + + (* close_overload tau = generalise generic type variables also + * overloaded tyvars. *) + + val close_overload : Type -> TypeScheme + + (*violates_equality T sigma = false, iff, assuming the tynames in + T admit equality, sigma admits equality, i.e., violates_equality + T sigma = non((all t in T admit equality) => sigma admits + equality). violates_equality is used when maximising equality in + a TE (in TE.maximise_TE_equality). T will be those datatypes in + TE we tentatively assume to admit equality, and sigma will be the + type scheme of a constructor.*) + + val violates_equality : TyName.Set.Set -> TypeScheme -> bool + + (*for compilation manager:*) + val match : TypeScheme * TypeScheme -> unit val close_regvars : RegVar.regvar list -> TypeScheme -> TypeScheme - val pu : TypeScheme Pickle.pu + val pu : TypeScheme Pickle.pu end (*TypeScheme*) @@ -225,44 +216,52 @@ signature STATOBJECT = structure Substitution : sig - val Id : Substitution - val oo : Substitution * Substitution -> Substitution - val on : Substitution * Type -> Type - val onScheme : Substitution * TypeScheme -> TypeScheme + val Id : Substitution + val oo : Substitution * Substitution -> Substitution + val on : Substitution * Type -> Type + val onScheme : Substitution * TypeScheme -> TypeScheme end (*Substitution*) structure TypeFcn : sig - val eq : TypeFcn * TypeFcn -> bool - val from_TyVars_and_Type : TyVar list * RegVar.regvar list * Type -> TypeFcn - val apply : TypeFcn * Type list * RegVar.regvar list -> Type - val arity : TypeFcn -> int - val arity_reml : TypeFcn -> int * int - val admits_equality : TypeFcn -> bool - val from_TyName : TyName -> TypeFcn - val to_TyName : TypeFcn -> TyName option - val is_TyName : TypeFcn -> bool - val tynames : TypeFcn -> TyName.Set.Set + val eq : TypeFcn * TypeFcn -> bool + val from_TyVars_and_Type : TyVar list * RegVar.regvar list * Type -> TypeFcn + val apply : TypeFcn * Type list * RegVar.regvar list -> Type + val arity : TypeFcn -> int + val arity_reml : TypeFcn -> int * int + val admits_equality : TypeFcn -> bool + val from_TyName : TyName -> TypeFcn + val to_TyName : TypeFcn -> TyName option + val is_TyName : TypeFcn -> bool + val tynames : TypeFcn -> TyName.Set.Set + + (* The function pretty_string returns three strings. This is because + something like + + type ('a, 'b) Foo = int + + maps Foo to "/\('a, 'b).int" and we need to take this apart to get + the correct printout. pretty_string' will print it as the + last-mentioned string. - (*pretty_string returns two strings. This is because - something like + For ReML, the second string represents region and effect parameters, + which are printed to the right of the type name. That is, - type ('a, 'b) Foo = int + type ('a, 'b) Bar `r = (int*int)`r - maps Foo to "/\('a, 'b).int" and we need to take this apart to get - the correct printout. pretty_string' will print it as the - last-mentioned string.*) + maps Bar to "/\('a, 'b) `r. (int*int)`r" + *) - val pretty_string : TVNames -> TypeFcn -> {vars: string, body: string} - val pretty_string' : TVNames -> TypeFcn -> string - val layout : TypeFcn -> StringTree + val pretty_string : TVNames -> TypeFcn -> {vars: string, body: string, vars2:string} + val pretty_string' : TVNames -> TypeFcn -> string + val layout : TypeFcn -> StringTree - (*for compilation manager:*) - val match : TypeFcn * TypeFcn -> unit + (*for compilation manager:*) + val match : TypeFcn * TypeFcn -> unit - val pu : TypeFcn Pickle.pu + val pu : TypeFcn Pickle.pu end (*TypeFcn*) @@ -274,30 +273,30 @@ signature STATOBJECT = structure Realisation : sig - val on_TyName : realisation -> TyName -> TypeFcn - val on_TyName_set : realisation -> TyName.Set.Set -> TyName.Set.Set - val on_Type : realisation -> Type -> Type - val on_TypeFcn : realisation -> TypeFcn -> TypeFcn - val on_TypeScheme : realisation -> TypeScheme -> TypeScheme - val Id : realisation - val is_Id : realisation -> bool - val oo : realisation * realisation -> realisation - val singleton : TyName * TypeFcn -> realisation - - (*from_T_and_tyname (T, t0) = the realisation {t |-> t0 | t in T} *) - val from_T_and_tyname : TyName.Set.Set * TyName -> realisation - val restrict : TyName.Set.Set -> realisation -> realisation - val restrict_from : TyName.Set.Set -> realisation -> realisation - val renaming : TyName.Set.Set -> realisation - val renaming' : TyName.Set.Set -> TyName.Set.Set * realisation - val inverse : realisation -> realisation option - val enrich : realisation * (realisation * TyName.Set.Set) -> bool - val match : realisation * realisation -> unit - val dom : realisation -> TyName.Set.Set - val eq : realisation * realisation -> bool - val layout : realisation -> StringTree - val pu : realisation Pickle.pu - val tynamesRng : realisation -> TyName.Set.Set + val on_TyName : realisation -> TyName -> TypeFcn + val on_TyName_set : realisation -> TyName.Set.Set -> TyName.Set.Set + val on_Type : realisation -> Type -> Type + val on_TypeFcn : realisation -> TypeFcn -> TypeFcn + val on_TypeScheme : realisation -> TypeScheme -> TypeScheme + val Id : realisation + val is_Id : realisation -> bool + val oo : realisation * realisation -> realisation + val singleton : TyName * TypeFcn -> realisation + + (*from_T_and_tyname (T, t0) = the realisation {t |-> t0 | t in T} *) + val from_T_and_tyname : TyName.Set.Set * TyName -> realisation + val restrict : TyName.Set.Set -> realisation -> realisation + val restrict_from : TyName.Set.Set -> realisation -> realisation + val renaming : TyName.Set.Set -> realisation + val renaming' : TyName.Set.Set -> TyName.Set.Set * realisation + val inverse : realisation -> realisation option + val enrich : realisation * (realisation * TyName.Set.Set) -> bool + val match : realisation * realisation -> unit + val dom : realisation -> TyName.Set.Set + val eq : realisation * realisation -> bool + val layout : realisation -> StringTree + val pu : realisation Pickle.pu + val tynamesRng : realisation -> TyName.Set.Set end (*Realisation*) end diff --git a/src/Common/TyName.sml b/src/Common/TyName.sml index 0e5de492f..c248695e7 100644 --- a/src/Common/TyName.sml +++ b/src/Common/TyName.sml @@ -98,35 +98,35 @@ structure TyName :> TYNAME = local val bucket = ref nil - fun predef b {tycon,arity,equality} = - let val tn = fresh b {tycon=tycon,arity=arity,arity_reml=(0,0),equality=equality} + fun predef b {tycon,arity,rarity,equality} = + let val tn = fresh b {tycon=tycon,arity=arity,arity_reml=(rarity,0),equality=equality} in bucket := tn :: !bucket ; tn end in - val tyName_BOOL = predef UNB_LOW {tycon=TyCon.tycon_BOOL, arity=0, equality=true} - val tyName_INT31 = predef UNB_LOW {tycon=TyCon.tycon_INT31, arity=0, equality=true} - val tyName_INT32 = predef BOXED {tycon=TyCon.tycon_INT32, arity=0, equality=true} - val tyName_INT63 = predef UNB_ALL {tycon=TyCon.tycon_INT63, arity=0, equality=true} - val tyName_INT64 = predef BOXED {tycon=TyCon.tycon_INT64, arity=0, equality=true} - val tyName_INTINF = predef UNB_LOW {tycon=TyCon.tycon_INTINF, arity=0, equality=true} - val tyName_WORD8 = predef UNB_LOW {tycon=TyCon.tycon_WORD8, arity=0, equality=true} - val tyName_WORD31 = predef UNB_LOW {tycon=TyCon.tycon_WORD31, arity=0, equality=true} - val tyName_WORD32 = predef BOXED {tycon=TyCon.tycon_WORD32, arity=0, equality=true} - val tyName_WORD63 = predef UNB_ALL {tycon=TyCon.tycon_WORD63, arity=0, equality=true} - val tyName_WORD64 = predef BOXED {tycon=TyCon.tycon_WORD64, arity=0, equality=true} - val tyName_REAL = predef BOXED {tycon=TyCon.tycon_REAL, arity=0, equality=false} - val tyName_F64 = predef UNB_ALL {tycon=TyCon.tycon_F64, arity=0, equality=false} - val tyName_STRING = predef BOXED {tycon=TyCon.tycon_STRING, arity=0, equality=true} - val tyName_CHAR = predef UNB_LOW {tycon=TyCon.tycon_CHAR, arity=0, equality=true} - val tyName_LIST = predef UNB_LOW {tycon=TyCon.tycon_LIST, arity=1, equality=true} - val tyName_FRAG = predef BOXED {tycon=TyCon.tycon_FRAG, arity=1, equality=true} - val tyName_REF = predef BOXED {tycon=TyCon.tycon_REF, arity=1, equality=true} - val tyName_ARRAY = predef BOXED {tycon=TyCon.tycon_ARRAY, arity=1, equality=true} - val tyName_VECTOR = predef BOXED {tycon=TyCon.tycon_VECTOR, arity=1, equality=true} - val tyName_CHARARRAY = predef BOXED {tycon=TyCon.tycon_CHARARRAY, arity=0, equality=true} - val tyName_FOREIGNPTR = predef UNB_ALL {tycon=TyCon.tycon_FOREIGNPTR, arity=0, equality=true} - val tyName_EXN = predef BOXED {tycon=TyCon.tycon_EXN, arity=0, equality=false} + val tyName_BOOL = predef UNB_LOW {tycon=TyCon.tycon_BOOL, arity=0, rarity=0, equality=true} + val tyName_INT31 = predef UNB_LOW {tycon=TyCon.tycon_INT31, arity=0, rarity=0, equality=true} + val tyName_INT32 = predef BOXED {tycon=TyCon.tycon_INT32, arity=0, rarity=0, equality=true} + val tyName_INT63 = predef UNB_ALL {tycon=TyCon.tycon_INT63, arity=0, rarity=0, equality=true} + val tyName_INT64 = predef BOXED {tycon=TyCon.tycon_INT64, arity=0, rarity=0, equality=true} + val tyName_INTINF = predef UNB_LOW {tycon=TyCon.tycon_INTINF, arity=0, rarity=1, equality=true} + val tyName_WORD8 = predef UNB_LOW {tycon=TyCon.tycon_WORD8, arity=0, rarity=0, equality=true} + val tyName_WORD31 = predef UNB_LOW {tycon=TyCon.tycon_WORD31, arity=0, rarity=0, equality=true} + val tyName_WORD32 = predef BOXED {tycon=TyCon.tycon_WORD32, arity=0, rarity=0, equality=true} + val tyName_WORD63 = predef UNB_ALL {tycon=TyCon.tycon_WORD63, arity=0, rarity=0, equality=true} + val tyName_WORD64 = predef BOXED {tycon=TyCon.tycon_WORD64, arity=0, rarity=0, equality=true} + val tyName_REAL = predef BOXED {tycon=TyCon.tycon_REAL, arity=0, rarity=1, equality=false} + val tyName_F64 = predef UNB_ALL {tycon=TyCon.tycon_F64, arity=0, rarity=0, equality=false} + val tyName_STRING = predef BOXED {tycon=TyCon.tycon_STRING, arity=0, rarity=1, equality=true} + val tyName_CHAR = predef UNB_LOW {tycon=TyCon.tycon_CHAR, arity=0, rarity=0, equality=true} + val tyName_LIST = predef UNB_LOW {tycon=TyCon.tycon_LIST, arity=1, rarity=1, equality=true} + val tyName_FRAG = predef BOXED {tycon=TyCon.tycon_FRAG, arity=1, rarity=1, equality=true} + val tyName_REF = predef BOXED {tycon=TyCon.tycon_REF, arity=1, rarity=1, equality=true} + val tyName_ARRAY = predef BOXED {tycon=TyCon.tycon_ARRAY, arity=1, rarity=1, equality=true} + val tyName_VECTOR = predef BOXED {tycon=TyCon.tycon_VECTOR, arity=1, rarity=1, equality=true} + val tyName_CHARARRAY = predef BOXED {tycon=TyCon.tycon_CHARARRAY, arity=0, rarity=1, equality=true} + val tyName_FOREIGNPTR = predef UNB_ALL {tycon=TyCon.tycon_FOREIGNPTR, arity=0, rarity=0, equality=true} + val tyName_EXN = predef BOXED {tycon=TyCon.tycon_EXN, arity=0, rarity=1, equality=false} val _ = Rank.reset() val tynamesPredefined = !bucket end diff --git a/src/Compiler/Regions/Effect.sml b/src/Compiler/Regions/Effect.sml index cf720458b..9871185fc 100644 --- a/src/Compiler/Regions/Effect.sml +++ b/src/Compiler/Regions/Effect.sml @@ -209,7 +209,18 @@ struct and layout_rho00 (cmplx:bool) (key,level,ty,explicit,protected,constraints) = let val n = case explicit of - NONE => "r" ^ show_key key + NONE => + if reml_p() then + case !key of + 1 => "r0top" + | 2 => "r0bot" + | 3 => "r0string" + | 4 => "r0pair" + | 5 => "r0array" + | 6 => "r0ref" + | 7 => "r0triple" + | _ => "r" ^ show_key key + else "r" ^ show_key key | SOME rv => let val r = "`" ^ RegVar.pr rv in if print_control_abbrev_layout() then r @@ -241,7 +252,7 @@ struct case einfo of EPS{key,explicit,...} => let val n = case explicit of - NONE => "e" ^ show_key key + NONE => if reml_p() andalso !key = 8 then "e0" else "e" ^ show_key key | SOME ev => "`" ^ RegVar.pr ev ^ "_" ^ show_key key in PP.LEAF n end diff --git a/src/Compiler/Regions/MulExp.sml b/src/Compiler/Regions/MulExp.sml index f3157095a..60257f8e6 100644 --- a/src/Compiler/Regions/MulExp.sml +++ b/src/Compiler/Regions/MulExp.sml @@ -1649,6 +1649,7 @@ struct NONE => st_alloc | SOME st => case PP.flatten1 st of "attop r1" => NONE + | "attop r0top" => NONE | _ => st_alloc else st_alloc in (mk_mutual_binding (st_alloc,rev functions):: binds', body) diff --git a/src/Compiler/Regions/SpreadExpression.sml b/src/Compiler/Regions/SpreadExpression.sml index 4f7206735..a6c78da39 100644 --- a/src/Compiler/Regions/SpreadExpression.sml +++ b/src/Compiler/Regions/SpreadExpression.sml @@ -1627,7 +1627,7 @@ good *) // Report.line "is less general than the specified type" // rep_sigma sigma' // Report.line "Please modify either the implementation or the specification." - // rep0 + (* // rep0 *) ) fun check2 B = let val s = R.alpha_rename (sigma,B) diff --git a/src/Parsing/Topdec.grm b/src/Parsing/Topdec.grm index 6dae1a381..55e33f0dc 100644 --- a/src/Parsing/Topdec.grm +++ b/src/Parsing/Topdec.grm @@ -1213,7 +1213,7 @@ AndFnValBind_opt: | (* -none- *) ( NONE ) TypBind: - TyVarSeq RegVarSeq TypeIdent EQUALS Ty AndTypBind_opt + TyVarSeq TypeIdent RegVarSeq EQUALS Ty AndTypBind_opt ( TYPBIND (PP TyVarSeqleft (rightmost get_info_ty Ty get_info_typbind AndTypBind_opt), @@ -1475,22 +1475,16 @@ TupleTy: Ty_sans_STAR ( [Ty_sans_STAR] ) Ty_sans_STAR: LPAREN TyComma_seq2 RPAREN LongTypeIdent BACKQUOTE EqIdent - ( let val ty = CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft EqIdentright, - ty, - SOME (PP BACKQUOTEleft EqIdentright, - [(PP EqIdentleft EqIdentright, - RegVar.mk_Named EqIdent)])) + ( let val regvars = [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)] + in CONty (PP LPARENleft LongTypeIdentright, + TyComma_seq2, regvars, mk_LongTyCon LongTypeIdent) end ) | LPAREN TyComma_seq2 RPAREN LongTypeIdent BACKQUOTE LBRACKET EqIdent_seq1 RBRACKET - ( let val ty = CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft RBRACKETright, - ty, - SOME (PP LBRACKETleft RBRACKETright, - map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, - RegVar.mk_Named r)) EqIdent_seq1)) + ( let val regvars = map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, + RegVar.mk_Named r)) EqIdent_seq1 + in CONty (PP LPARENleft LongTypeIdentright, + TyComma_seq2, regvars, mk_LongTyCon LongTypeIdent) end ) | LPAREN TyComma_seq2 RPAREN LongTypeIdent @@ -1500,22 +1494,16 @@ Ty_sans_STAR: ( CONty (PP Ty_sans_STARleft LongTypeIdentright, [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) ) | Ty_sans_STAR LongTypeIdent BACKQUOTE EqIdent - ( let val ty = CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft EqIdentright, - ty, - SOME (PP BACKQUOTEleft EqIdentright, - [(PP EqIdentleft EqIdentright, - RegVar.mk_Named EqIdent)])) + ( let val regvars = [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)] + in CONty (PP Ty_sans_STARleft LongTypeIdentright, + [Ty_sans_STAR], regvars, mk_LongTyCon LongTypeIdent) end ) | Ty_sans_STAR LongTypeIdent BACKQUOTE LBRACKET EqIdent_seq1 RBRACKET - ( let val ty = CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft RBRACKETright, - ty, - SOME (PP LBRACKETleft RBRACKETright, - map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, - RegVar.mk_Named r)) EqIdent_seq1)) + ( let val regvars = map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, + RegVar.mk_Named r)) EqIdent_seq1 + in CONty (PP Ty_sans_STARleft LongTypeIdentright, + [Ty_sans_STAR], regvars, mk_LongTyCon LongTypeIdent) end ) | AtomicTy ( AtomicTy ) @@ -1583,30 +1571,27 @@ TyComma_seq2: AtomicTy: LongTypeIdent BACKQUOTE EqIdent - ( let val ty = CONty (PP LongTypeIdentleft LongTypeIdentright, - [], nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft EqIdentright, - ty, - SOME (PP BACKQUOTEleft EqIdentright, - [(PP EqIdentleft EqIdentright, - RegVar.mk_Named EqIdent)])) - end) + ( let val regvars = [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)] + in CONty (PP LongTypeIdentleft LongTypeIdentright, + [], regvars, + mk_LongTyCon LongTypeIdent) + end ) | BACKQUOTE EqIdent LongTypeIdent - ( CONty (PP BACKQUOTEleft LongTypeIdentright, - [], - [(PP EqIdentleft EqIdentright, - RegVar.mk_Named EqIdent)], - mk_LongTyCon LongTypeIdent) ) + ( let val regvars = [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)] + in CONty (PP BACKQUOTEleft LongTypeIdentright, + [], + regvars, + mk_LongTyCon LongTypeIdent) + end ) | LongTypeIdent BACKQUOTE LBRACKET EqIdent_seq1 RBRACKET - ( let val ty = CONty (PP LongTypeIdentleft LongTypeIdentright, - [], nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft RBRACKETright, - ty, - SOME (PP LBRACKETleft RBRACKETright, - map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, - RegVar.mk_Named r)) EqIdent_seq1)) - end) + ( let val regvars = map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, + RegVar.mk_Named r)) EqIdent_seq1 + in CONty (PP LongTypeIdentleft LongTypeIdentright, + [], regvars, mk_LongTyCon LongTypeIdent) + end ) | LongTypeIdent ( CONty (PP LongTypeIdentleft LongTypeIdentright, [], nil, mk_LongTyCon LongTypeIdent) ) diff --git a/src/Parsing/Topdec.grm.sml b/src/Parsing/Topdec.grm.sml index c6dee5b64..10b335af4 100644 --- a/src/Parsing/Topdec.grm.sml +++ b/src/Parsing/Topdec.grm.sml @@ -113,14 +113,14 @@ structure Token = Token local open LrTable in val table=let val actionRows = "\ -\\001\000\001\000\141\001\003\000\140\001\004\000\139\001\008\000\138\001\ -\\019\000\137\001\021\000\185\001\022\000\136\001\040\000\135\001\ -\\041\000\134\001\053\000\132\001\000\000\ -\\001\000\001\000\141\001\003\000\140\001\004\000\139\001\008\000\138\001\ -\\019\000\137\001\022\000\136\001\040\000\135\001\041\000\134\001\ -\\046\000\133\001\053\000\132\001\000\000\ -\\001\000\005\000\069\001\061\000\029\000\074\000\019\000\000\000\ -\\001\000\007\000\125\001\009\000\055\000\010\000\054\000\030\000\124\001\ +\\001\000\001\000\140\001\003\000\139\001\004\000\138\001\008\000\137\001\ +\\019\000\136\001\021\000\184\001\022\000\135\001\040\000\134\001\ +\\041\000\133\001\053\000\131\001\000\000\ +\\001\000\001\000\140\001\003\000\139\001\004\000\138\001\008\000\137\001\ +\\019\000\136\001\022\000\135\001\040\000\134\001\041\000\133\001\ +\\046\000\132\001\053\000\131\001\000\000\ +\\001\000\005\000\067\001\061\000\029\000\074\000\019\000\000\000\ +\\001\000\007\000\124\001\009\000\055\000\010\000\054\000\030\000\123\001\ \\061\000\029\000\074\000\019\000\000\000\ \\001\000\009\000\055\000\010\000\054\000\017\000\052\000\023\000\049\000\ \\026\000\047\000\030\000\044\000\034\000\041\000\037\000\039\000\ @@ -178,7 +178,7 @@ val table=let val actionRows = \\061\000\029\000\063\000\028\000\064\000\027\000\065\000\026\000\ \\066\000\025\000\067\000\024\000\068\000\023\000\069\000\022\000\ \\074\000\019\000\000\000\ -\\001\000\009\000\055\000\010\000\054\000\040\000\205\001\061\000\029\000\ +\\001\000\009\000\055\000\010\000\054\000\040\000\204\001\061\000\029\000\ \\074\000\019\000\000\000\ \\001\000\009\000\055\000\010\000\054\000\060\000\118\000\061\000\029\000\ \\074\000\019\000\000\000\ @@ -188,102 +188,102 @@ val table=let val actionRows = \\001\000\009\000\175\000\045\000\174\000\049\000\173\000\074\000\153\000\ \\075\000\172\000\076\000\171\000\000\000\ \\001\000\009\000\175\000\074\000\153\000\000\000\ -\\001\000\011\000\126\001\046\000\238\001\000\000\ -\\001\000\012\000\252\000\021\000\031\002\052\000\251\000\000\000\ -\\001\000\012\000\252\000\046\000\005\002\052\000\251\000\000\000\ -\\001\000\012\000\146\001\059\000\145\001\061\000\029\000\062\000\144\001\ +\\001\000\011\000\125\001\046\000\238\001\000\000\ +\\001\000\012\000\250\000\021\000\031\002\052\000\249\000\000\000\ +\\001\000\012\000\250\000\046\000\005\002\052\000\249\000\000\000\ +\\001\000\012\000\145\001\059\000\144\001\061\000\029\000\062\000\143\001\ \\074\000\019\000\000\000\ \\001\000\015\000\064\000\018\000\191\000\025\000\063\000\036\000\062\000\ \\052\000\061\000\000\000\ -\\001\000\015\000\064\000\020\000\109\001\025\000\063\000\036\000\062\000\ +\\001\000\015\000\064\000\020\000\108\001\025\000\063\000\036\000\062\000\ \\052\000\061\000\000\000\ -\\001\000\015\000\064\000\021\000\107\001\025\000\063\000\036\000\062\000\ +\\001\000\015\000\064\000\021\000\106\001\025\000\063\000\036\000\062\000\ \\052\000\061\000\053\000\188\000\000\000\ -\\001\000\015\000\064\000\025\000\063\000\033\000\245\000\036\000\062\000\ +\\001\000\015\000\064\000\025\000\063\000\033\000\243\000\036\000\062\000\ \\052\000\061\000\000\000\ -\\001\000\015\000\064\000\025\000\063\000\036\000\062\000\039\000\227\000\ +\\001\000\015\000\064\000\025\000\063\000\036\000\062\000\039\000\225\000\ \\052\000\061\000\000\000\ \\001\000\015\000\064\000\025\000\063\000\036\000\062\000\046\000\190\000\ \\051\000\189\000\052\000\061\000\053\000\188\000\000\000\ -\\001\000\016\000\049\003\050\000\049\003\051\000\049\003\052\000\230\000\ +\\001\000\016\000\049\003\050\000\049\003\051\000\049\003\052\000\228\000\ \\060\000\097\002\000\000\ -\\001\000\016\000\198\000\046\000\034\001\051\000\033\001\052\000\197\000\000\000\ -\\001\000\016\000\198\000\052\000\197\000\057\000\236\000\000\000\ +\\001\000\016\000\198\000\046\000\032\001\051\000\031\001\052\000\197\000\000\000\ +\\001\000\016\000\198\000\052\000\197\000\057\000\234\000\000\000\ \\001\000\016\000\198\000\052\000\197\000\060\000\196\000\000\000\ -\\001\000\016\000\198\000\052\000\197\000\060\000\036\001\000\000\ -\\001\000\019\000\058\001\034\000\148\000\061\000\029\000\074\000\019\000\000\000\ +\\001\000\016\000\198\000\052\000\197\000\060\000\034\001\000\000\ +\\001\000\019\000\056\001\034\000\148\000\061\000\029\000\074\000\019\000\000\000\ \\001\000\019\000\021\002\034\000\148\000\061\000\029\000\074\000\019\000\000\000\ +\\001\000\021\000\104\001\000\000\ \\001\000\021\000\105\001\000\000\ -\\001\000\021\000\106\001\000\000\ -\\001\000\021\000\119\001\000\000\ -\\001\000\021\000\167\001\000\000\ +\\001\000\021\000\118\001\000\000\ +\\001\000\021\000\166\001\000\000\ \\001\000\021\000\231\001\000\000\ \\001\000\021\000\236\001\000\000\ -\\001\000\023\000\102\001\045\000\101\001\000\000\ -\\001\000\023\000\163\001\000\000\ +\\001\000\023\000\100\001\045\000\099\001\000\000\ +\\001\000\023\000\162\001\000\000\ +\\001\000\027\000\219\000\000\000\ \\001\000\027\000\221\000\000\000\ -\\001\000\027\000\223\000\000\000\ -\\001\000\027\000\044\001\000\000\ +\\001\000\027\000\042\001\000\000\ \\001\000\027\000\235\001\000\000\ \\001\000\034\000\148\000\061\000\029\000\074\000\019\000\000\000\ -\\001\000\040\000\184\001\000\000\ -\\001\000\042\000\247\000\043\000\246\000\000\000\ -\\001\000\042\000\118\001\000\000\ +\\001\000\040\000\183\001\000\000\ +\\001\000\042\000\245\000\043\000\244\000\000\000\ +\\001\000\042\000\117\001\000\000\ \\001\000\045\000\113\000\074\000\153\000\075\000\102\000\000\000\ -\\001\000\045\000\254\000\000\000\ +\\001\000\045\000\252\000\000\000\ \\001\000\046\000\186\000\000\000\ \\001\000\046\000\187\000\000\000\ -\\001\000\046\000\031\001\000\000\ -\\001\000\046\000\032\001\000\000\ -\\001\000\046\000\085\001\000\000\ -\\001\000\046\000\087\001\051\000\086\001\000\000\ +\\001\000\046\000\029\001\000\000\ +\\001\000\046\000\030\001\000\000\ +\\001\000\046\000\083\001\000\000\ +\\001\000\046\000\085\001\051\000\084\001\000\000\ \\001\000\046\000\002\002\000\000\ \\001\000\046\000\006\002\000\000\ \\001\000\047\000\164\000\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\022\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\020\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\040\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\074\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\076\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\103\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\148\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\147\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ -\\001\000\047\000\222\001\060\000\094\000\061\000\029\000\062\000\093\000\ +\\001\000\047\000\221\001\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ \\001\000\047\000\000\002\060\000\094\000\061\000\029\000\062\000\093\000\ \\074\000\019\000\000\000\ \\001\000\048\000\184\000\000\000\ -\\001\000\048\000\029\001\000\000\ -\\001\000\048\000\074\001\000\000\ -\\001\000\048\000\157\001\000\000\ -\\001\000\048\000\166\001\000\000\ -\\001\000\048\000\211\001\000\000\ +\\001\000\048\000\027\001\000\000\ +\\001\000\048\000\072\001\000\000\ +\\001\000\048\000\156\001\000\000\ +\\001\000\048\000\210\001\000\000\ +\\001\000\048\000\228\001\000\000\ \\001\000\048\000\253\001\000\000\ \\001\000\048\000\028\002\000\000\ \\001\000\048\000\051\002\000\000\ \\001\000\050\000\183\000\000\000\ -\\001\000\050\000\028\001\000\000\ -\\001\000\050\000\084\001\000\000\ -\\001\000\052\000\083\001\000\000\ -\\001\000\052\000\130\001\000\000\ +\\001\000\050\000\026\001\000\000\ +\\001\000\050\000\082\001\000\000\ +\\001\000\052\000\081\001\000\000\ +\\001\000\052\000\129\001\000\000\ \\001\000\052\000\240\001\000\000\ \\001\000\052\000\246\001\000\000\ \\001\000\052\000\030\002\000\000\ \\001\000\053\000\000\000\077\000\000\000\000\000\ \\001\000\054\000\203\000\061\000\029\000\063\000\078\000\066\000\077\000\ \\074\000\019\000\000\000\ -\\001\000\058\000\149\001\000\000\ +\\001\000\058\000\148\001\000\000\ \\001\000\060\000\094\000\061\000\029\000\062\000\093\000\074\000\019\000\000\000\ \\001\000\060\000\182\000\000\000\ -\\001\000\060\000\241\000\000\000\ -\\001\000\060\000\253\000\000\000\ -\\001\000\060\000\026\001\000\000\ -\\001\000\060\000\046\001\000\000\ -\\001\000\060\000\059\001\000\000\ -\\001\000\060\000\065\001\000\000\ -\\001\000\060\000\066\001\000\000\ -\\001\000\060\000\103\001\000\000\ +\\001\000\060\000\239\000\000\000\ +\\001\000\060\000\251\000\000\000\ +\\001\000\060\000\024\001\000\000\ +\\001\000\060\000\044\001\000\000\ +\\001\000\060\000\057\001\000\000\ +\\001\000\060\000\063\001\000\000\ +\\001\000\060\000\064\001\000\000\ +\\001\000\060\000\101\001\000\000\ \\001\000\060\000\239\001\000\000\ \\001\000\060\000\244\001\000\000\ \\001\000\060\000\247\001\000\000\ @@ -313,7 +313,7 @@ val table=let val actionRows = \\083\002\000\000\ \\084\002\000\000\ \\085\002\000\000\ -\\085\002\045\000\177\001\000\000\ +\\085\002\045\000\176\001\000\000\ \\086\002\000\000\ \\087\002\000\000\ \\088\002\000\000\ @@ -361,15 +361,15 @@ val table=let val actionRows = \\117\002\000\000\ \\118\002\000\000\ \\119\002\000\000\ -\\120\002\012\000\252\000\052\000\251\000\000\000\ -\\121\002\011\000\126\001\000\000\ -\\122\002\011\000\126\001\000\000\ +\\120\002\012\000\250\000\052\000\249\000\000\000\ +\\121\002\011\000\125\001\000\000\ +\\122\002\011\000\125\001\000\000\ \\123\002\000\000\ -\\124\002\012\000\252\000\014\000\035\002\052\000\251\000\000\000\ +\\124\002\012\000\250\000\014\000\035\002\052\000\249\000\000\000\ \\125\002\000\000\ \\126\002\000\000\ \\127\002\000\000\ -\\128\002\011\000\126\001\014\000\048\002\000\000\ +\\128\002\011\000\125\001\014\000\048\002\000\000\ \\129\002\000\000\ \\130\002\000\000\ \\131\002\014\000\018\002\000\000\ @@ -399,7 +399,7 @@ val table=let val actionRows = \\154\002\000\000\ \\155\002\000\000\ \\156\002\000\000\ -\\157\002\011\000\126\001\000\000\ +\\157\002\011\000\125\001\000\000\ \\158\002\000\000\ \\159\002\000\000\ \\160\002\000\000\ @@ -420,9 +420,9 @@ val table=let val actionRows = \\024\000\048\000\028\000\046\000\029\000\045\000\031\000\043\000\ \\032\000\042\000\035\000\040\000\040\000\038\000\041\000\037\000\ \\042\000\036\000\053\000\124\000\000\000\ -\\174\002\007\000\125\001\008\000\056\000\009\000\055\000\010\000\054\000\ +\\174\002\007\000\124\001\008\000\056\000\009\000\055\000\010\000\054\000\ \\013\000\053\000\019\000\051\000\022\000\050\000\024\000\048\000\ -\\028\000\046\000\029\000\045\000\030\000\124\001\031\000\043\000\ +\\028\000\046\000\029\000\045\000\030\000\123\001\031\000\043\000\ \\032\000\042\000\035\000\040\000\040\000\038\000\041\000\037\000\ \\042\000\036\000\053\000\124\000\061\000\029\000\074\000\019\000\000\000\ \\174\002\008\000\056\000\013\000\053\000\019\000\051\000\022\000\050\000\ @@ -436,7 +436,7 @@ val table=let val actionRows = \\179\002\000\000\ \\180\002\000\000\ \\181\002\000\000\ -\\182\002\012\000\252\000\014\000\180\001\052\000\251\000\000\000\ +\\182\002\012\000\250\000\014\000\179\001\052\000\249\000\000\000\ \\183\002\000\000\ \\184\002\000\000\ \\184\002\061\000\029\000\074\000\019\000\000\000\ @@ -447,18 +447,18 @@ val table=let val actionRows = \\189\002\000\000\ \\190\002\000\000\ \\191\002\000\000\ -\\192\002\011\000\126\001\014\000\129\001\000\000\ +\\192\002\011\000\125\001\014\000\128\001\000\000\ \\193\002\076\000\065\000\000\000\ \\194\002\000\000\ \\195\002\000\000\ \\196\002\000\000\ \\197\002\000\000\ -\\198\002\076\000\014\001\000\000\ +\\198\002\076\000\012\001\000\000\ \\199\002\000\000\ \\200\002\000\000\ \\201\002\000\000\ \\202\002\000\000\ -\\203\002\076\000\016\001\000\000\ +\\203\002\076\000\014\001\000\000\ \\204\002\000\000\ \\205\002\000\000\ \\206\002\000\000\ @@ -480,7 +480,7 @@ val table=let val actionRows = \\218\002\000\000\ \\219\002\061\000\029\000\063\000\078\000\066\000\077\000\074\000\019\000\000\000\ \\220\002\000\000\ -\\221\002\015\000\064\000\025\000\063\000\036\000\062\000\051\000\089\001\ +\\221\002\015\000\064\000\025\000\063\000\036\000\062\000\051\000\087\001\ \\052\000\061\000\000\000\ \\222\002\000\000\ \\223\002\009\000\055\000\010\000\054\000\017\000\052\000\023\000\049\000\ @@ -509,13 +509,13 @@ val table=let val actionRows = \\238\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ \\239\002\000\000\ \\240\002\000\000\ -\\241\002\056\000\235\000\000\000\ +\\241\002\056\000\233\000\000\000\ \\242\002\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\000\000\ \\243\002\000\000\ \\244\002\000\000\ \\245\002\000\000\ -\\246\002\043\000\244\000\000\000\ -\\247\002\043\000\243\000\000\000\ +\\246\002\043\000\242\000\000\000\ +\\247\002\043\000\241\000\000\000\ \\248\002\000\000\ \\249\002\000\000\ \\250\002\000\000\ @@ -546,7 +546,7 @@ val table=let val actionRows = \\013\003\000\000\ \\014\003\000\000\ \\015\003\000\000\ -\\016\003\014\000\094\001\015\000\064\000\025\000\063\000\036\000\062\000\ +\\016\003\014\000\092\001\015\000\064\000\025\000\063\000\036\000\062\000\ \\052\000\061\000\000\000\ \\017\003\000\000\ \\018\003\000\000\ @@ -554,29 +554,29 @@ val table=let val actionRows = \\020\003\000\000\ \\021\003\052\000\030\002\000\000\ \\022\003\000\000\ -\\023\003\014\000\226\001\000\000\ +\\023\003\014\000\225\001\000\000\ \\024\003\000\000\ \\025\003\000\000\ -\\026\003\014\000\228\001\000\000\ +\\026\003\014\000\227\001\000\000\ \\027\003\000\000\ \\028\003\000\000\ \\029\003\000\000\ \\030\003\000\000\ -\\031\003\014\000\115\001\000\000\ +\\031\003\014\000\114\001\000\000\ \\032\003\000\000\ \\033\003\000\000\ -\\034\003\056\000\172\001\000\000\ +\\034\003\056\000\171\001\000\000\ \\035\003\000\000\ \\036\003\000\000\ \\037\003\000\000\ -\\038\003\014\000\052\001\000\000\ +\\038\003\014\000\050\001\000\000\ \\039\003\000\000\ \\040\003\000\000\ -\\041\003\014\000\232\000\000\000\ +\\041\003\014\000\230\000\000\000\ \\042\003\000\000\ \\043\003\000\000\ \\044\003\015\000\064\000\025\000\063\000\036\000\062\000\052\000\061\000\ -\\056\000\170\001\000\000\ +\\056\000\169\001\000\000\ \\045\003\000\000\ \\046\003\000\000\ \\047\003\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ @@ -585,10 +585,10 @@ val table=let val actionRows = \\066\000\025\000\067\000\024\000\068\000\023\000\069\000\022\000\ \\074\000\019\000\000\000\ \\048\003\000\000\ -\\049\003\052\000\230\000\000\000\ +\\049\003\052\000\228\000\000\000\ \\050\003\000\000\ -\\051\003\033\000\239\000\000\000\ -\\051\003\033\000\239\000\060\000\238\000\000\000\ +\\051\003\033\000\237\000\000\000\ +\\051\003\033\000\237\000\060\000\236\000\000\000\ \\052\003\000\000\ \\053\003\000\000\ \\054\003\000\000\ @@ -607,10 +607,10 @@ val table=let val actionRows = \\066\003\000\000\ \\067\003\000\000\ \\068\003\016\000\198\000\052\000\197\000\000\000\ -\\069\003\016\000\097\001\000\000\ +\\069\003\016\000\095\001\000\000\ \\070\003\000\000\ -\\071\003\016\000\198\000\051\000\160\001\052\000\197\000\000\000\ -\\071\003\051\000\160\001\000\000\ +\\071\003\016\000\198\000\051\000\159\001\052\000\197\000\000\000\ +\\071\003\051\000\159\001\000\000\ \\072\003\000\000\ \\073\003\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ \\047\000\106\000\049\000\105\000\055\000\104\000\059\000\103\000\ @@ -618,7 +618,7 @@ val table=let val actionRows = \\066\000\025\000\067\000\024\000\068\000\023\000\069\000\022\000\ \\074\000\019\000\000\000\ \\074\003\000\000\ -\\075\003\016\000\198\000\051\000\030\001\052\000\197\000\000\000\ +\\075\003\016\000\198\000\051\000\028\001\052\000\197\000\000\000\ \\076\003\000\000\ \\077\003\009\000\055\000\010\000\054\000\034\000\109\000\045\000\144\000\ \\047\000\106\000\049\000\105\000\055\000\104\000\059\000\103\000\ @@ -630,37 +630,37 @@ val table=let val actionRows = \\080\003\016\000\198\000\052\000\197\000\000\000\ \\081\003\000\000\ \\082\003\000\000\ -\\083\003\058\000\005\001\059\000\004\001\000\000\ -\\084\003\009\000\175\000\061\000\003\001\074\000\153\000\000\000\ +\\083\003\058\000\003\001\059\000\002\001\000\000\ +\\084\003\009\000\175\000\061\000\001\001\074\000\153\000\000\000\ \\085\003\000\000\ \\086\003\000\000\ \\087\003\000\000\ -\\088\003\076\000\220\001\000\000\ -\\089\003\076\000\078\001\000\000\ +\\088\003\076\000\219\001\000\000\ +\\089\003\076\000\076\001\000\000\ \\090\003\000\000\ \\091\003\000\000\ -\\092\003\044\000\001\001\000\000\ +\\092\003\044\000\255\000\000\000\ \\093\003\000\000\ \\094\003\000\000\ \\095\003\000\000\ \\096\003\000\000\ \\097\003\000\000\ -\\098\003\051\000\086\001\000\000\ +\\098\003\051\000\084\001\000\000\ \\099\003\000\000\ \\100\003\000\000\ \\101\003\000\000\ -\\102\003\076\000\000\001\000\000\ +\\102\003\076\000\254\000\000\000\ \\103\003\000\000\ \\104\003\000\000\ -\\105\003\076\000\151\001\000\000\ +\\105\003\076\000\150\001\000\000\ \\106\003\000\000\ \\107\003\000\000\ -\\108\003\076\000\155\001\000\000\ +\\108\003\076\000\154\001\000\000\ \\109\003\000\000\ \\110\003\061\000\029\000\063\000\078\000\066\000\077\000\074\000\019\000\000\000\ \\111\003\000\000\ \\112\003\000\000\ -\\113\003\051\000\218\001\000\000\ +\\113\003\051\000\217\001\000\000\ \\114\003\000\000\ \\115\003\000\000\ \\116\003\000\000\ @@ -676,9 +676,9 @@ val table=let val actionRows = \\126\003\000\000\ \\127\003\000\000\ \\128\003\000\000\ -\\129\003\051\000\035\001\000\000\ +\\129\003\051\000\033\001\000\000\ \\130\003\000\000\ -\\131\003\076\000\218\000\000\000\ +\\131\003\076\000\038\001\000\000\ \\132\003\000\000\ \\133\003\000\000\ \" @@ -710,7 +710,7 @@ val actionRowNumbers = \\036\001\128\001\034\000\103\001\ \\177\001\113\000\102\001\114\001\ \\124\001\013\000\010\000\017\000\ -\\175\001\038\001\182\001\117\000\ +\\175\001\038\001\116\000\117\000\ \\025\001\149\000\044\001\133\000\ \\137\000\047\001\220\000\219\000\ \\046\000\223\000\224\000\055\001\ @@ -736,74 +736,74 @@ val actionRowNumbers = \\113\001\115\001\123\001\072\000\ \\126\001\058\000\059\000\032\000\ \\180\001\110\001\063\001\035\000\ -\\010\000\107\001\181\001\116\000\ -\\066\000\148\000\218\000\222\000\ -\\058\001\005\000\048\000\046\001\ -\\045\001\005\000\052\001\096\000\ -\\019\000\088\001\014\000\095\001\ -\\032\001\014\000\005\000\087\001\ -\\007\000\019\000\121\000\036\000\ -\\097\000\176\001\176\001\014\000\ -\\176\001\061\001\098\000\099\000\ -\\164\000\002\000\002\000\002\000\ -\\211\000\073\000\067\000\112\000\ -\\140\001\019\000\112\000\019\000\ -\\020\000\083\000\082\000\160\001\ -\\060\000\061\000\007\001\014\001\ -\\091\000\017\001\091\000\020\001\ -\\021\001\019\001\031\001\105\001\ -\\091\000\065\001\130\001\131\001\ -\\014\000\119\001\108\001\112\001\ -\\014\000\178\001\111\001\014\000\ -\\109\001\117\000\044\000\068\001\ -\\100\000\183\001\091\000\038\000\ -\\039\000\027\000\061\001\026\000\ -\\005\000\097\001\089\001\033\001\ -\\035\001\084\001\050\000\087\001\ -\\134\000\099\001\100\001\080\001\ -\\020\000\050\000\049\001\048\001\ -\\027\001\053\000\040\000\050\000\ -\\003\000\232\000\166\000\210\000\ -\\167\000\241\000\084\000\001\000\ -\\244\000\150\001\091\000\024\000\ -\\068\000\136\001\090\000\132\001\ -\\151\001\019\000\156\001\020\000\ -\\019\000\159\001\010\001\111\000\ -\\248\000\253\000\074\000\062\001\ -\\009\000\121\001\122\001\014\000\ -\\125\001\127\001\179\001\045\000\ -\\014\000\019\000\075\000\227\000\ -\\000\001\249\000\041\000\005\000\ -\\093\001\086\001\085\001\083\001\ -\\077\001\176\001\041\001\080\001\ -\\061\001\042\001\080\001\213\000\ -\\129\000\230\000\222\000\222\000\ -\\051\000\000\000\239\000\112\000\ -\\002\000\206\000\209\000\165\000\ -\\091\000\176\001\112\000\054\000\ -\\112\000\015\000\002\000\176\001\ -\\076\000\145\001\112\000\112\000\ -\\112\000\141\001\091\000\019\000\ -\\164\001\091\000\139\001\148\001\ -\\149\001\069\000\013\001\104\001\ -\\064\001\116\001\089\000\117\001\ -\\118\001\014\000\072\001\075\001\ -\\184\001\054\001\028\001\091\001\ -\\014\000\081\001\050\000\079\001\ -\\078\001\042\000\076\001\221\000\ -\\228\000\214\000\112\000\049\000\ -\\043\000\234\000\176\001\231\000\ -\\240\000\021\000\101\000\085\000\ -\\195\000\116\000\204\000\190\000\ -\\196\000\100\001\201\000\102\000\ -\\116\000\199\000\198\000\086\000\ -\\202\000\103\000\208\000\020\000\ -\\233\000\205\000\203\000\116\000\ -\\197\000\152\001\147\001\146\001\ -\\144\001\077\000\133\001\162\001\ -\\111\000\155\001\070\000\157\001\ -\\091\000\120\001\062\000\066\001\ -\\010\000\073\001\176\001\092\001\ +\\010\000\107\001\182\001\148\000\ +\\218\000\222\000\058\001\005\000\ +\\048\000\046\001\045\001\005\000\ +\\052\001\096\000\019\000\088\001\ +\\014\000\095\001\032\001\014\000\ +\\005\000\087\001\007\000\019\000\ +\\121\000\036\000\097\000\176\001\ +\\176\001\014\000\176\001\061\001\ +\\098\000\099\000\164\000\002\000\ +\\002\000\002\000\211\000\073\000\ +\\066\000\112\000\140\001\019\000\ +\\112\000\019\000\020\000\083\000\ +\\082\000\160\001\060\000\061\000\ +\\007\001\014\001\091\000\017\001\ +\\091\000\020\001\021\001\019\001\ +\\031\001\105\001\091\000\065\001\ +\\130\001\131\001\014\000\119\001\ +\\108\001\112\001\014\000\178\001\ +\\111\001\014\000\109\001\117\000\ +\\044\000\068\001\181\001\100\000\ +\\067\000\038\000\039\000\027\000\ +\\061\001\026\000\005\000\097\001\ +\\089\001\033\001\035\001\084\001\ +\\050\000\087\001\134\000\099\001\ +\\100\001\080\001\020\000\050\000\ +\\049\001\048\001\027\001\053\000\ +\\040\000\050\000\003\000\232\000\ +\\166\000\210\000\167\000\241\000\ +\\084\000\001\000\244\000\150\001\ +\\091\000\024\000\068\000\136\001\ +\\090\000\132\001\151\001\019\000\ +\\156\001\020\000\019\000\159\001\ +\\010\001\111\000\248\000\253\000\ +\\074\000\062\001\009\000\121\001\ +\\122\001\014\000\125\001\127\001\ +\\179\001\045\000\014\000\019\000\ +\\183\001\091\000\227\000\000\001\ +\\249\000\041\000\005\000\093\001\ +\\086\001\085\001\083\001\077\001\ +\\176\001\041\001\080\001\061\001\ +\\042\001\080\001\213\000\129\000\ +\\230\000\222\000\222\000\051\000\ +\\000\000\239\000\112\000\002\000\ +\\206\000\209\000\165\000\091\000\ +\\176\001\112\000\054\000\112\000\ +\\015\000\002\000\176\001\075\000\ +\\145\001\112\000\112\000\112\000\ +\\141\001\091\000\019\000\164\001\ +\\091\000\139\001\148\001\149\001\ +\\069\000\013\001\104\001\064\001\ +\\116\001\089\000\117\001\118\001\ +\\014\000\072\001\075\001\076\000\ +\\054\001\028\001\091\001\014\000\ +\\081\001\050\000\079\001\078\001\ +\\042\000\076\001\221\000\228\000\ +\\214\000\112\000\049\000\043\000\ +\\234\000\176\001\231\000\240\000\ +\\021\000\101\000\085\000\195\000\ +\\116\000\204\000\190\000\196\000\ +\\100\001\201\000\102\000\116\000\ +\\199\000\198\000\086\000\202\000\ +\\103\000\208\000\020\000\233\000\ +\\205\000\203\000\116\000\197\000\ +\\152\001\147\001\146\001\144\001\ +\\077\000\133\001\162\001\111\000\ +\\155\001\070\000\157\001\091\000\ +\\120\001\062\000\066\001\010\000\ +\\073\001\176\001\184\001\092\001\ \\082\001\050\001\023\000\063\000\ \\229\000\003\000\212\000\020\000\ \\165\000\003\000\019\000\188\000\ @@ -993,118 +993,118 @@ val gotoT = \\118\000\006\000\123\000\115\000\000\000\ \\000\000\ \\000\000\ -\\072\000\215\000\073\000\214\000\000\000\ +\\121\000\214\000\000\000\ \\106\000\205\000\000\000\ \\000\000\ -\\112\000\217\000\118\000\006\000\123\000\113\000\000\000\ +\\112\000\215\000\118\000\006\000\123\000\113\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\007\000\121\000\042\000\218\000\117\000\007\000\000\000\ +\\007\000\121\000\042\000\216\000\117\000\007\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\108\000\220\000\116\000\124\000\117\000\123\000\000\000\ +\\108\000\218\000\116\000\124\000\117\000\123\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\065\000\222\000\108\000\126\000\109\000\125\000\116\000\124\000\ +\\065\000\220\000\108\000\126\000\109\000\125\000\116\000\124\000\ \\117\000\123\000\000\000\ -\\111\000\223\000\118\000\089\000\120\000\088\000\000\000\ +\\111\000\221\000\118\000\089\000\120\000\088\000\000\000\ \\000\000\ -\\111\000\224\000\118\000\089\000\120\000\088\000\000\000\ +\\111\000\222\000\118\000\089\000\120\000\088\000\000\000\ \\000\000\ -\\052\000\099\000\055\000\138\000\064\000\226\000\071\000\136\000\ +\\052\000\099\000\055\000\138\000\064\000\224\000\071\000\136\000\ \\103\000\135\000\118\000\006\000\123\000\005\000\124\000\093\000\ \\128\000\002\000\129\000\001\000\000\000\ -\\088\000\227\000\000\000\ -\\077\000\229\000\000\000\ +\\088\000\225\000\000\000\ +\\077\000\227\000\000\000\ \\000\000\ -\\052\000\099\000\055\000\138\000\103\000\231\000\118\000\006\000\ +\\052\000\099\000\055\000\138\000\103\000\229\000\118\000\006\000\ \\123\000\005\000\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ -\\082\000\232\000\000\000\ +\\082\000\230\000\000\000\ \\000\000\ \\052\000\099\000\053\000\207\000\055\000\097\000\100\000\206\000\ \\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ \\128\000\002\000\129\000\001\000\000\000\ -\\092\000\235\000\000\000\ +\\092\000\233\000\000\000\ \\000\000\ \\000\000\ -\\118\000\238\000\000\000\ +\\118\000\236\000\000\000\ \\000\000\ -\\121\000\240\000\000\000\ +\\121\000\238\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\121\000\246\000\000\000\ -\\025\000\248\000\026\000\247\000\000\000\ +\\121\000\244\000\000\000\ +\\025\000\246\000\026\000\245\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\111\000\253\000\118\000\089\000\120\000\088\000\000\000\ +\\111\000\251\000\118\000\089\000\120\000\088\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\121\000\164\000\122\000\000\001\000\000\ +\\121\000\164\000\122\000\254\000\000\000\ \\000\000\ \\000\000\ -\\118\000\089\000\120\000\004\001\000\000\ +\\118\000\089\000\120\000\002\001\000\000\ \\000\000\ -\\046\000\007\001\090\000\006\001\118\000\073\000\126\000\005\001\ +\\046\000\005\001\090\000\004\001\118\000\073\000\126\000\003\001\ \\127\000\071\000\000\000\ -\\047\000\009\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\107\000\008\001\121\000\164\000\122\000\163\000\000\000\ +\\047\000\007\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\107\000\006\001\121\000\164\000\122\000\163\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\097\000\010\001\000\000\ -\\052\000\012\000\067\000\011\001\070\000\010\000\096\000\009\000\ +\\097\000\008\001\000\000\ +\\052\000\012\000\067\000\009\001\070\000\010\000\096\000\009\000\ \\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ \\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\082\000\070\000\010\000\094\000\013\001\ +\\052\000\012\000\067\000\082\000\070\000\010\000\094\000\011\001\ \\096\000\009\000\101\000\008\000\118\000\006\000\123\000\005\000\ \\124\000\004\000\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\016\001\070\000\010\000\096\000\009\000\ -\\101\000\008\000\104\000\015\001\118\000\006\000\123\000\005\000\ +\\052\000\012\000\067\000\014\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\104\000\013\001\118\000\006\000\123\000\005\000\ \\124\000\004\000\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ -\\052\000\012\000\067\000\082\000\070\000\010\000\094\000\017\001\ +\\052\000\012\000\067\000\082\000\070\000\010\000\094\000\015\001\ \\096\000\009\000\101\000\008\000\118\000\006\000\123\000\005\000\ \\124\000\004\000\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ -\\052\000\012\000\067\000\018\001\070\000\010\000\096\000\009\000\ +\\052\000\012\000\067\000\016\001\070\000\010\000\096\000\009\000\ \\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ \\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ -\\118\000\089\000\120\000\019\001\000\000\ +\\118\000\089\000\120\000\017\001\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\021\001\070\000\010\000\096\000\009\000\ +\\052\000\012\000\067\000\019\001\070\000\010\000\096\000\009\000\ \\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ \\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ -\\047\000\022\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\047\000\020\001\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ -\\052\000\099\000\053\000\023\001\055\000\097\000\102\000\095\000\ +\\052\000\099\000\053\000\021\001\055\000\097\000\102\000\095\000\ \\118\000\006\000\123\000\005\000\124\000\093\000\128\000\002\000\ \\129\000\001\000\000\000\ \\000\000\ -\\088\000\025\001\000\000\ +\\088\000\023\001\000\000\ \\000\000\ \\000\000\ \\000\000\ @@ -1118,122 +1118,120 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\211\000\055\000\097\000\063\000\035\001\ +\\052\000\099\000\053\000\211\000\055\000\097\000\063\000\033\001\ \\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ \\128\000\002\000\129\000\001\000\000\000\ \\000\000\ +\\072\000\035\001\073\000\034\001\000\000\ \\000\000\ -\\121\000\036\001\000\000\ -\\118\000\089\000\120\000\037\001\000\000\ \\000\000\ -\\000\000\ -\\007\000\121\000\023\000\039\001\042\000\119\000\043\000\118\000\ +\\007\000\121\000\023\000\037\001\042\000\119\000\043\000\118\000\ \\117\000\007\000\000\000\ \\000\000\ -\\052\000\012\000\067\000\041\001\070\000\010\000\096\000\009\000\ -\\101\000\008\000\104\000\040\001\118\000\006\000\123\000\005\000\ +\\052\000\012\000\067\000\039\001\070\000\010\000\096\000\009\000\ +\\101\000\008\000\104\000\038\001\118\000\006\000\123\000\005\000\ \\124\000\004\000\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\043\001\070\000\010\000\096\000\009\000\ +\\052\000\012\000\067\000\041\001\070\000\010\000\096\000\009\000\ \\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ \\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ -\\047\000\045\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\047\000\043\001\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ \\000\000\ -\\052\000\099\000\055\000\138\000\064\000\046\001\071\000\136\000\ +\\052\000\099\000\055\000\138\000\064\000\044\001\071\000\136\000\ \\103\000\135\000\118\000\006\000\123\000\005\000\124\000\093\000\ \\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\047\001\102\000\095\000\118\000\006\000\123\000\005\000\ +\\068\000\045\001\102\000\095\000\118\000\006\000\123\000\005\000\ \\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ -\\052\000\012\000\067\000\048\001\070\000\010\000\096\000\009\000\ +\\052\000\012\000\067\000\046\001\070\000\010\000\096\000\009\000\ \\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ \\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ -\\083\000\049\001\000\000\ -\\118\000\006\000\123\000\005\000\124\000\052\001\125\000\051\001\000\000\ -\\047\000\053\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\083\000\047\001\000\000\ +\\118\000\006\000\123\000\005\000\124\000\050\001\125\000\049\001\000\000\ +\\047\000\051\001\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ \\000\000\ -\\057\000\055\001\118\000\144\000\119\000\054\001\000\000\ +\\057\000\053\001\118\000\144\000\119\000\052\001\000\000\ \\000\000\ -\\051\000\110\000\061\000\058\001\105\000\108\000\000\000\ -\\051\000\110\000\061\000\059\001\105\000\108\000\000\000\ +\\051\000\110\000\061\000\056\001\105\000\108\000\000\000\ +\\051\000\110\000\061\000\057\001\105\000\108\000\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\060\001\102\000\095\000\118\000\006\000\123\000\005\000\ +\\068\000\058\001\102\000\095\000\118\000\006\000\123\000\005\000\ \\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ -\\051\000\110\000\061\000\061\001\105\000\108\000\000\000\ -\\065\000\062\001\108\000\126\000\109\000\125\000\116\000\124\000\ +\\051\000\110\000\061\000\059\001\105\000\108\000\000\000\ +\\065\000\060\001\108\000\126\000\109\000\125\000\116\000\124\000\ \\117\000\123\000\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\021\000\066\001\118\000\065\001\000\000\ -\\021\000\068\001\118\000\065\001\000\000\ -\\021\000\069\001\118\000\065\001\000\000\ -\\018\000\071\001\118\000\070\001\000\000\ +\\021\000\064\001\118\000\063\001\000\000\ +\\021\000\066\001\118\000\063\001\000\000\ +\\021\000\067\001\118\000\063\001\000\000\ +\\018\000\069\001\118\000\068\001\000\000\ \\000\000\ -\\118\000\089\000\120\000\073\001\000\000\ -\\118\000\075\001\000\000\ +\\118\000\089\000\120\000\071\001\000\000\ +\\118\000\073\001\000\000\ \\000\000\ -\\048\000\077\001\049\000\166\000\050\000\165\000\121\000\164\000\ +\\048\000\075\001\049\000\166\000\050\000\165\000\121\000\164\000\ \\122\000\163\000\000\000\ -\\118\000\078\001\000\000\ -\\047\000\079\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\118\000\076\001\000\000\ +\\047\000\077\001\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ -\\121\000\164\000\122\000\080\001\000\000\ +\\121\000\164\000\122\000\078\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\074\000\086\001\000\000\ -\\118\000\089\000\120\000\088\001\000\000\ +\\074\000\084\001\000\000\ +\\118\000\089\000\120\000\086\001\000\000\ \\000\000\ -\\118\000\089\000\120\000\089\001\000\000\ +\\118\000\089\000\120\000\087\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\111\000\090\001\118\000\089\000\120\000\088\000\000\000\ -\\075\000\091\001\000\000\ +\\111\000\088\001\118\000\089\000\120\000\088\000\000\000\ +\\075\000\089\001\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\093\001\055\000\097\000\102\000\095\000\ +\\052\000\099\000\053\000\091\001\055\000\097\000\102\000\095\000\ \\118\000\006\000\123\000\005\000\124\000\093\000\128\000\002\000\ \\129\000\001\000\000\000\ -\\086\000\094\001\000\000\ +\\086\000\092\001\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\204\000\055\000\097\000\099\000\096\001\ +\\052\000\099\000\053\000\204\000\055\000\097\000\099\000\094\001\ \\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ \\128\000\002\000\129\000\001\000\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\204\000\055\000\097\000\099\000\097\001\ +\\052\000\099\000\053\000\204\000\055\000\097\000\099\000\095\001\ \\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ \\128\000\002\000\129\000\001\000\000\000\ \\000\000\ -\\106\000\098\001\000\000\ +\\106\000\096\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\111\000\102\001\118\000\089\000\120\000\088\000\000\000\ +\\118\000\089\000\120\000\100\001\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\065\000\106\001\108\000\126\000\109\000\125\000\116\000\124\000\ +\\065\000\105\001\108\000\126\000\109\000\125\000\116\000\124\000\ \\117\000\123\000\000\000\ \\000\000\ -\\052\000\012\000\067\000\108\001\070\000\010\000\096\000\009\000\ +\\052\000\012\000\067\000\107\001\070\000\010\000\096\000\009\000\ \\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ \\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ \\000\000\ @@ -1241,56 +1239,56 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ -\\056\000\109\001\118\000\144\000\119\000\143\000\000\000\ -\\083\000\110\001\000\000\ +\\056\000\108\001\118\000\144\000\119\000\143\000\000\000\ +\\083\000\109\001\000\000\ \\000\000\ \\000\000\ -\\092\000\111\001\000\000\ -\\080\000\112\001\000\000\ -\\121\000\164\000\122\000\114\001\000\000\ -\\057\000\115\001\118\000\144\000\119\000\054\001\000\000\ +\\092\000\110\001\000\000\ +\\080\000\111\001\000\000\ +\\121\000\164\000\122\000\113\001\000\000\ +\\057\000\114\001\118\000\144\000\119\000\052\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\057\000\118\001\118\000\144\000\119\000\054\001\000\000\ -\\024\000\121\001\118\000\120\001\123\000\119\001\000\000\ +\\057\000\117\001\118\000\144\000\119\000\052\001\000\000\ +\\024\000\120\001\118\000\119\001\123\000\118\001\000\000\ \\000\000\ \\000\000\ -\\018\000\125\001\000\000\ +\\018\000\124\001\000\000\ \\000\000\ -\\029\000\126\001\000\000\ +\\029\000\125\001\000\000\ \\000\000\ -\\019\000\129\001\000\000\ +\\019\000\128\001\000\000\ \\000\000\ \\000\000\ -\\111\000\140\001\118\000\089\000\120\000\088\000\000\000\ -\\118\000\141\001\000\000\ -\\118\000\089\000\120\000\145\001\000\000\ +\\111\000\139\001\118\000\089\000\120\000\088\000\000\000\ +\\118\000\140\001\000\000\ +\\118\000\089\000\120\000\144\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\047\000\148\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\047\000\147\001\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ \\000\000\ -\\121\000\164\000\122\000\150\001\000\000\ -\\047\000\152\001\048\000\167\000\049\000\166\000\050\000\165\000\ -\\107\000\151\001\121\000\164\000\122\000\163\000\000\000\ +\\121\000\164\000\122\000\149\001\000\000\ +\\047\000\151\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\107\000\150\001\121\000\164\000\122\000\163\000\000\000\ \\000\000\ \\000\000\ -\\069\000\154\001\118\000\073\000\126\000\077\000\127\000\071\000\000\000\ +\\069\000\153\001\118\000\073\000\126\000\077\000\127\000\071\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\052\000\099\000\053\000\098\000\055\000\097\000\062\000\156\001\ +\\052\000\099\000\053\000\098\000\055\000\097\000\062\000\155\001\ \\102\000\095\000\118\000\006\000\123\000\005\000\124\000\093\000\ \\128\000\002\000\129\000\001\000\000\000\ -\\087\000\157\001\000\000\ -\\087\000\159\001\000\000\ -\\052\000\099\000\053\000\160\001\055\000\097\000\102\000\095\000\ +\\087\000\156\001\000\000\ +\\087\000\158\001\000\000\ +\\052\000\099\000\053\000\159\001\055\000\097\000\102\000\095\000\ \\118\000\006\000\123\000\005\000\124\000\093\000\128\000\002\000\ \\129\000\001\000\000\000\ \\000\000\ @@ -1298,81 +1296,82 @@ val gotoT = \\000\000\ \\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\162\001\102\000\095\000\118\000\006\000\123\000\005\000\ +\\068\000\161\001\102\000\095\000\118\000\006\000\123\000\005\000\ \\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ -\\047\000\163\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\047\000\162\001\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ \\000\000\ +\\111\000\163\001\118\000\089\000\120\000\088\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\052\000\012\000\067\000\166\001\070\000\010\000\096\000\009\000\ +\\052\000\012\000\067\000\165\001\070\000\010\000\096\000\009\000\ \\101\000\008\000\118\000\006\000\123\000\005\000\124\000\004\000\ \\125\000\003\000\128\000\002\000\129\000\001\000\000\000\ -\\078\000\167\001\000\000\ +\\078\000\166\001\000\000\ \\000\000\ \\000\000\ -\\081\000\169\001\000\000\ +\\081\000\168\001\000\000\ \\000\000\ -\\051\000\154\000\058\000\171\001\105\000\108\000\000\000\ +\\051\000\154\000\058\000\170\001\105\000\108\000\000\000\ \\000\000\ -\\080\000\172\001\000\000\ -\\065\000\173\001\108\000\126\000\109\000\125\000\116\000\124\000\ +\\080\000\171\001\000\000\ +\\065\000\172\001\108\000\126\000\109\000\125\000\116\000\124\000\ \\117\000\123\000\000\000\ \\000\000\ -\\080\000\174\001\000\000\ +\\080\000\173\001\000\000\ \\000\000\ \\000\000\ -\\025\000\177\001\028\000\176\001\000\000\ -\\007\000\121\000\023\000\179\001\042\000\119\000\043\000\118\000\ +\\025\000\176\001\028\000\175\001\000\000\ +\\007\000\121\000\023\000\178\001\042\000\119\000\043\000\118\000\ \\117\000\007\000\000\000\ -\\007\000\121\000\023\000\180\001\042\000\119\000\043\000\118\000\ +\\007\000\121\000\023\000\179\001\042\000\119\000\043\000\118\000\ \\117\000\007\000\000\000\ -\\044\000\181\001\000\000\ -\\019\000\129\001\000\000\ +\\044\000\180\001\000\000\ +\\019\000\128\001\000\000\ \\000\000\ -\\020\000\184\001\118\000\157\000\000\000\ -\\021\000\185\001\118\000\065\001\000\000\ +\\020\000\183\001\118\000\157\000\000\000\ +\\021\000\184\001\118\000\063\001\000\000\ \\000\000\ \\000\000\ -\\025\000\248\000\026\000\186\001\000\000\ -\\017\000\188\001\118\000\089\000\120\000\187\001\000\000\ -\\015\000\192\001\016\000\191\001\035\000\190\001\051\000\189\001\ +\\025\000\246\000\026\000\185\001\000\000\ +\\017\000\187\001\118\000\089\000\120\000\186\001\000\000\ +\\015\000\191\001\016\000\190\001\035\000\189\001\051\000\188\001\ \\105\000\108\000\000\000\ -\\010\000\194\001\118\000\193\001\000\000\ -\\013\000\198\001\014\000\197\001\105\000\196\001\121\000\195\001\000\000\ -\\009\000\200\001\118\000\199\001\000\000\ -\\113\000\202\001\118\000\006\000\123\000\201\001\000\000\ -\\021\000\206\001\110\000\205\001\118\000\204\001\000\000\ -\\015\000\208\001\051\000\207\001\105\000\108\000\000\000\ +\\010\000\193\001\118\000\192\001\000\000\ +\\013\000\197\001\014\000\196\001\105\000\195\001\121\000\194\001\000\000\ +\\009\000\199\001\118\000\198\001\000\000\ +\\113\000\201\001\118\000\006\000\123\000\200\001\000\000\ +\\021\000\205\001\110\000\204\001\118\000\203\001\000\000\ +\\015\000\207\001\051\000\206\001\105\000\108\000\000\000\ \\000\000\ \\000\000\ +\\118\000\209\001\000\000\ \\118\000\210\001\000\000\ \\118\000\211\001\000\000\ -\\118\000\212\001\000\000\ \\000\000\ -\\111\000\213\001\118\000\089\000\120\000\088\000\000\000\ -\\047\000\214\001\048\000\167\000\049\000\166\000\050\000\165\000\ +\\111\000\212\001\118\000\089\000\120\000\088\000\000\000\ +\\047\000\213\001\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ -\\091\000\215\001\000\000\ -\\118\000\089\000\120\000\217\001\000\000\ +\\091\000\214\001\000\000\ +\\118\000\089\000\120\000\216\001\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\118\000\089\000\120\000\219\001\000\000\ +\\118\000\089\000\120\000\218\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ -\\054\000\221\001\118\000\198\000\126\000\197\000\127\000\071\000\000\000\ +\\054\000\220\001\118\000\198\000\126\000\197\000\127\000\071\000\000\000\ \\000\000\ \\000\000\ \\052\000\099\000\053\000\141\000\055\000\097\000\066\000\140\000\ -\\068\000\222\001\102\000\095\000\118\000\006\000\123\000\005\000\ +\\068\000\221\001\102\000\095\000\118\000\006\000\123\000\005\000\ \\124\000\093\000\128\000\002\000\129\000\001\000\000\000\ -\\076\000\223\001\000\000\ -\\079\000\225\001\000\000\ +\\076\000\222\001\000\000\ +\\079\000\224\001\000\000\ \\000\000\ \\000\000\ \\000\000\ @@ -1381,13 +1380,13 @@ val gotoT = \\118\000\006\000\123\000\005\000\124\000\093\000\128\000\002\000\ \\129\000\001\000\000\000\ \\000\000\ -\\057\000\228\001\118\000\144\000\119\000\054\001\000\000\ +\\057\000\228\001\118\000\144\000\119\000\052\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\007\000\121\000\023\000\231\001\024\000\230\001\042\000\119\000\ -\\043\000\118\000\117\000\007\000\118\000\120\001\123\000\119\001\000\000\ +\\043\000\118\000\117\000\007\000\118\000\119\001\123\000\118\001\000\000\ \\000\000\ \\000\000\ \\022\000\232\001\118\000\155\000\000\000\ @@ -1428,7 +1427,7 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ -\\046\000\252\001\118\000\073\000\126\000\005\001\127\000\071\000\000\000\ +\\046\000\252\001\118\000\073\000\126\000\003\001\127\000\071\000\000\000\ \\000\000\ \\118\000\089\000\120\000\253\001\000\000\ \\000\000\ @@ -1444,22 +1443,23 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ -\\025\000\177\001\000\000\ +\\000\000\ +\\025\000\176\001\000\000\ \\000\000\ \\000\000\ -\\024\000\005\002\118\000\120\001\123\000\119\001\000\000\ +\\024\000\005\002\118\000\119\001\123\000\118\001\000\000\ \\000\000\ \\121\000\164\000\122\000\006\002\000\000\ -\\025\000\248\000\026\000\007\002\000\000\ -\\024\000\008\002\118\000\120\001\123\000\119\001\000\000\ +\\025\000\246\000\026\000\007\002\000\000\ +\\024\000\008\002\118\000\119\001\123\000\118\001\000\000\ \\047\000\009\002\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ \\034\000\010\002\000\000\ -\\016\000\191\001\035\000\014\002\051\000\013\002\105\000\108\000\000\000\ +\\016\000\190\001\035\000\014\002\051\000\013\002\105\000\108\000\000\000\ \\031\000\015\002\000\000\ \\011\000\018\002\118\000\144\000\119\000\017\002\000\000\ \\000\000\ -\\021\000\021\002\118\000\065\001\000\000\ +\\021\000\021\002\118\000\063\001\000\000\ \\113\000\023\002\118\000\006\000\123\000\022\002\000\000\ \\000\000\ \\000\000\ @@ -1476,19 +1476,19 @@ val gotoT = \\000\000\ \\000\000\ \\000\000\ -\\025\000\177\001\000\000\ +\\025\000\176\001\000\000\ \\000\000\ \\000\000\ -\\025\000\177\001\027\000\032\002\000\000\ +\\025\000\176\001\027\000\032\002\000\000\ \\036\000\034\002\000\000\ \\000\000\ \\047\000\036\002\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ -\\015\000\037\002\051\000\207\001\105\000\108\000\000\000\ +\\015\000\037\002\051\000\206\001\105\000\108\000\000\000\ \\121\000\038\002\000\000\ \\000\000\ \\000\000\ -\\010\000\039\002\118\000\193\001\000\000\ +\\010\000\039\002\118\000\192\001\000\000\ \\092\000\040\002\000\000\ \\033\000\041\002\000\000\ \\121\000\164\000\122\000\043\002\000\000\ @@ -1505,11 +1505,11 @@ val gotoT = \\000\000\ \\047\000\052\002\048\000\167\000\049\000\166\000\050\000\165\000\ \\121\000\164\000\122\000\163\000\000\000\ -\\024\000\053\002\118\000\120\001\123\000\119\001\000\000\ +\\024\000\053\002\118\000\119\001\123\000\118\001\000\000\ \\000\000\ \\008\000\054\002\118\000\159\000\000\000\ \\000\000\ -\\017\000\055\002\118\000\089\000\120\000\187\001\000\000\ +\\017\000\055\002\118\000\089\000\120\000\186\001\000\000\ \\000\000\ \\000\000\ \\000\000\ @@ -1520,14 +1520,14 @@ val gotoT = \\000\000\ \\033\000\060\002\000\000\ \\000\000\ -\\009\000\061\002\118\000\199\001\000\000\ +\\009\000\061\002\118\000\198\001\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\089\000\062\002\000\000\ \\045\000\063\002\000\000\ -\\025\000\177\001\027\000\065\002\000\000\ +\\025\000\176\001\027\000\065\002\000\000\ \\000\000\ \\000\000\ \\000\000\ @@ -4145,13 +4145,13 @@ end end | ( 205, ( ( _, ( MlyValue.AndTypBind_opt AndTypBind_opt1, _, AndTypBind_opt1right)) :: ( _, ( MlyValue.Ty Ty1, _, _)) :: _ :: ( _, -( MlyValue.TypeIdent TypeIdent1, _, _)) :: ( _, ( MlyValue.RegVarSeq -RegVarSeq1, RegVarSeqleft, RegVarSeqright)) :: ( _, ( +( MlyValue.RegVarSeq RegVarSeq1, RegVarSeqleft, RegVarSeqright)) :: ( + _, ( MlyValue.TypeIdent TypeIdent1, _, _)) :: ( _, ( MlyValue.TyVarSeq TyVarSeq1, (TyVarSeqleft as TyVarSeq1left), _)) :: rest671)) => let val result = MlyValue.TypBind (fn _ => let val ( TyVarSeq as TyVarSeq1) = TyVarSeq1 () - val (RegVarSeq as RegVarSeq1) = RegVarSeq1 () val (TypeIdent as TypeIdent1) = TypeIdent1 () + val (RegVarSeq as RegVarSeq1) = RegVarSeq1 () val (Ty as Ty1) = Ty1 () val (AndTypBind_opt as AndTypBind_opt1) = AndTypBind_opt1 () in ( @@ -4812,46 +4812,40 @@ end) rest671) end | ( 267, ( ( _, ( MlyValue.EqIdent EqIdent1, EqIdentleft, ( -EqIdentright as EqIdent1right))) :: ( _, ( _, BACKQUOTEleft, _)) :: ( - _, ( MlyValue.LongTypeIdent LongTypeIdent1, LongTypeIdentleft, -LongTypeIdentright)) :: _ :: ( _, ( MlyValue.TyComma_seq2 -TyComma_seq21, _, _)) :: ( _, ( _, (LPARENleft as LPAREN1left), _)) :: - rest671)) => let val result = MlyValue.Ty_sans_STAR (fn _ => let - val (TyComma_seq2 as TyComma_seq21) = TyComma_seq21 () +EqIdentright as EqIdent1right))) :: _ :: ( _, ( MlyValue.LongTypeIdent + LongTypeIdent1, _, LongTypeIdentright)) :: _ :: ( _, ( +MlyValue.TyComma_seq2 TyComma_seq21, _, _)) :: ( _, ( _, (LPARENleft + as LPAREN1left), _)) :: rest671)) => let val result = +MlyValue.Ty_sans_STAR (fn _ => let val (TyComma_seq2 as TyComma_seq21 +) = TyComma_seq21 () val (LongTypeIdent as LongTypeIdent1) = LongTypeIdent1 () val (EqIdent as EqIdent1) = EqIdent1 () in ( - let val ty = CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft EqIdentright, - ty, - SOME (PP BACKQUOTEleft EqIdentright, - [(PP EqIdentleft EqIdentright, - RegVar.mk_Named EqIdent)])) + let val regvars = [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)] + in CONty (PP LPARENleft LongTypeIdentright, + TyComma_seq2, regvars, mk_LongTyCon LongTypeIdent) end ) end) in ( LrTable.NT 48, ( result, LPAREN1left, EqIdent1right), rest671) end -| ( 268, ( ( _, ( _, _, (RBRACKETright as RBRACKET1right))) :: ( _, ( - MlyValue.EqIdent_seq1 EqIdent_seq11, EqIdent_seq1left, -EqIdent_seq1right)) :: ( _, ( _, LBRACKETleft, _)) :: _ :: ( _, ( -MlyValue.LongTypeIdent LongTypeIdent1, LongTypeIdentleft, -LongTypeIdentright)) :: _ :: ( _, ( MlyValue.TyComma_seq2 -TyComma_seq21, _, _)) :: ( _, ( _, (LPARENleft as LPAREN1left), _)) :: - rest671)) => let val result = MlyValue.Ty_sans_STAR (fn _ => let - val (TyComma_seq2 as TyComma_seq21) = TyComma_seq21 () +| ( 268, ( ( _, ( _, _, RBRACKET1right)) :: ( _, ( +MlyValue.EqIdent_seq1 EqIdent_seq11, EqIdent_seq1left, +EqIdent_seq1right)) :: _ :: _ :: ( _, ( MlyValue.LongTypeIdent +LongTypeIdent1, _, LongTypeIdentright)) :: _ :: ( _, ( +MlyValue.TyComma_seq2 TyComma_seq21, _, _)) :: ( _, ( _, (LPARENleft + as LPAREN1left), _)) :: rest671)) => let val result = +MlyValue.Ty_sans_STAR (fn _ => let val (TyComma_seq2 as TyComma_seq21 +) = TyComma_seq21 () val (LongTypeIdent as LongTypeIdent1) = LongTypeIdent1 () val (EqIdent_seq1 as EqIdent_seq11) = EqIdent_seq11 () in ( - let val ty = CONty (PP LPARENleft LongTypeIdentright, - TyComma_seq2, nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft RBRACKETright, - ty, - SOME (PP LBRACKETleft RBRACKETright, - map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, - RegVar.mk_Named r)) EqIdent_seq1)) + let val regvars = map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, + RegVar.mk_Named r)) EqIdent_seq1 + in CONty (PP LPARENleft LongTypeIdentright, + TyComma_seq2, regvars, mk_LongTyCon LongTypeIdent) end ) end) @@ -4889,46 +4883,40 @@ end) , rest671) end | ( 271, ( ( _, ( MlyValue.EqIdent EqIdent1, EqIdentleft, ( -EqIdentright as EqIdent1right))) :: ( _, ( _, BACKQUOTEleft, _)) :: ( - _, ( MlyValue.LongTypeIdent LongTypeIdent1, LongTypeIdentleft, -LongTypeIdentright)) :: ( _, ( MlyValue.Ty_sans_STAR Ty_sans_STAR1, ( -Ty_sans_STARleft as Ty_sans_STAR1left), _)) :: rest671)) => let val -result = MlyValue.Ty_sans_STAR (fn _ => let val (Ty_sans_STAR as -Ty_sans_STAR1) = Ty_sans_STAR1 () +EqIdentright as EqIdent1right))) :: _ :: ( _, ( MlyValue.LongTypeIdent + LongTypeIdent1, _, LongTypeIdentright)) :: ( _, ( +MlyValue.Ty_sans_STAR Ty_sans_STAR1, (Ty_sans_STARleft as +Ty_sans_STAR1left), _)) :: rest671)) => let val result = +MlyValue.Ty_sans_STAR (fn _ => let val (Ty_sans_STAR as Ty_sans_STAR1 +) = Ty_sans_STAR1 () val (LongTypeIdent as LongTypeIdent1) = LongTypeIdent1 () val (EqIdent as EqIdent1) = EqIdent1 () in ( - let val ty = CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft EqIdentright, - ty, - SOME (PP BACKQUOTEleft EqIdentright, - [(PP EqIdentleft EqIdentright, - RegVar.mk_Named EqIdent)])) + let val regvars = [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)] + in CONty (PP Ty_sans_STARleft LongTypeIdentright, + [Ty_sans_STAR], regvars, mk_LongTyCon LongTypeIdent) end ) end) in ( LrTable.NT 48, ( result, Ty_sans_STAR1left, EqIdent1right), rest671) end -| ( 272, ( ( _, ( _, _, (RBRACKETright as RBRACKET1right))) :: ( _, ( - MlyValue.EqIdent_seq1 EqIdent_seq11, EqIdent_seq1left, -EqIdent_seq1right)) :: ( _, ( _, LBRACKETleft, _)) :: _ :: ( _, ( -MlyValue.LongTypeIdent LongTypeIdent1, LongTypeIdentleft, -LongTypeIdentright)) :: ( _, ( MlyValue.Ty_sans_STAR Ty_sans_STAR1, ( -Ty_sans_STARleft as Ty_sans_STAR1left), _)) :: rest671)) => let val -result = MlyValue.Ty_sans_STAR (fn _ => let val (Ty_sans_STAR as -Ty_sans_STAR1) = Ty_sans_STAR1 () +| ( 272, ( ( _, ( _, _, RBRACKET1right)) :: ( _, ( +MlyValue.EqIdent_seq1 EqIdent_seq11, EqIdent_seq1left, +EqIdent_seq1right)) :: _ :: _ :: ( _, ( MlyValue.LongTypeIdent +LongTypeIdent1, _, LongTypeIdentright)) :: ( _, ( +MlyValue.Ty_sans_STAR Ty_sans_STAR1, (Ty_sans_STARleft as +Ty_sans_STAR1left), _)) :: rest671)) => let val result = +MlyValue.Ty_sans_STAR (fn _ => let val (Ty_sans_STAR as Ty_sans_STAR1 +) = Ty_sans_STAR1 () val (LongTypeIdent as LongTypeIdent1) = LongTypeIdent1 () val (EqIdent_seq1 as EqIdent_seq11) = EqIdent_seq11 () in ( - let val ty = CONty (PP Ty_sans_STARleft LongTypeIdentright, - [Ty_sans_STAR], nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft RBRACKETright, - ty, - SOME (PP LBRACKETleft RBRACKETright, - map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, - RegVar.mk_Named r)) EqIdent_seq1)) + let val regvars = map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, + RegVar.mk_Named r)) EqIdent_seq1 + in CONty (PP Ty_sans_STARleft LongTypeIdentright, + [Ty_sans_STAR], regvars, mk_LongTyCon LongTypeIdent) end ) end) @@ -5064,21 +5052,19 @@ end) in ( LrTable.NT 106, ( result, Ty1left, Ty2right), rest671) end | ( 280, ( ( _, ( MlyValue.EqIdent EqIdent1, EqIdentleft, ( -EqIdentright as EqIdent1right))) :: ( _, ( _, BACKQUOTEleft, _)) :: ( - _, ( MlyValue.LongTypeIdent LongTypeIdent1, (LongTypeIdentleft as -LongTypeIdent1left), LongTypeIdentright)) :: rest671)) => let val -result = MlyValue.AtomicTy (fn _ => let val (LongTypeIdent as -LongTypeIdent1) = LongTypeIdent1 () +EqIdentright as EqIdent1right))) :: _ :: ( _, ( MlyValue.LongTypeIdent + LongTypeIdent1, (LongTypeIdentleft as LongTypeIdent1left), +LongTypeIdentright)) :: rest671)) => let val result = +MlyValue.AtomicTy (fn _ => let val (LongTypeIdent as LongTypeIdent1) + = LongTypeIdent1 () val (EqIdent as EqIdent1) = EqIdent1 () in ( - let val ty = CONty (PP LongTypeIdentleft LongTypeIdentright, - [], nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft EqIdentright, - ty, - SOME (PP BACKQUOTEleft EqIdentright, - [(PP EqIdentleft EqIdentright, - RegVar.mk_Named EqIdent)])) - end + let val regvars = [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)] + in CONty (PP LongTypeIdentleft LongTypeIdentright, + [], regvars, + mk_LongTyCon LongTypeIdent) + end ) end) in ( LrTable.NT 49, ( result, LongTypeIdent1left, EqIdent1right), @@ -5092,33 +5078,32 @@ BACKQUOTEleft as BACKQUOTE1left), _)) :: rest671)) => let val result EqIdent1 () val (LongTypeIdent as LongTypeIdent1) = LongTypeIdent1 () in ( - CONty (PP BACKQUOTEleft LongTypeIdentright, - [], - [(PP EqIdentleft EqIdentright, - RegVar.mk_Named EqIdent)], - mk_LongTyCon LongTypeIdent) + let val regvars = [(PP EqIdentleft EqIdentright, + RegVar.mk_Named EqIdent)] + in CONty (PP BACKQUOTEleft LongTypeIdentright, + [], + regvars, + mk_LongTyCon LongTypeIdent) + end ) end) in ( LrTable.NT 49, ( result, BACKQUOTE1left, LongTypeIdent1right), rest671) end -| ( 282, ( ( _, ( _, _, (RBRACKETright as RBRACKET1right))) :: ( _, ( - MlyValue.EqIdent_seq1 EqIdent_seq11, EqIdent_seq1left, -EqIdent_seq1right)) :: ( _, ( _, LBRACKETleft, _)) :: _ :: ( _, ( -MlyValue.LongTypeIdent LongTypeIdent1, (LongTypeIdentleft as -LongTypeIdent1left), LongTypeIdentright)) :: rest671)) => let val -result = MlyValue.AtomicTy (fn _ => let val (LongTypeIdent as -LongTypeIdent1) = LongTypeIdent1 () +| ( 282, ( ( _, ( _, _, RBRACKET1right)) :: ( _, ( +MlyValue.EqIdent_seq1 EqIdent_seq11, EqIdent_seq1left, +EqIdent_seq1right)) :: _ :: _ :: ( _, ( MlyValue.LongTypeIdent +LongTypeIdent1, (LongTypeIdentleft as LongTypeIdent1left), +LongTypeIdentright)) :: rest671)) => let val result = +MlyValue.AtomicTy (fn _ => let val (LongTypeIdent as LongTypeIdent1) + = LongTypeIdent1 () val (EqIdent_seq1 as EqIdent_seq11) = EqIdent_seq11 () in ( - let val ty = CONty (PP LongTypeIdentleft LongTypeIdentright, - [], nil, mk_LongTyCon LongTypeIdent) - in PARty (PP LongTypeIdentleft RBRACKETright, - ty, - SOME (PP LBRACKETleft RBRACKETright, - map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, - RegVar.mk_Named r)) EqIdent_seq1)) - end + let val regvars = map (fn r => (PP EqIdent_seq1left EqIdent_seq1right, + RegVar.mk_Named r)) EqIdent_seq1 + in CONty (PP LongTypeIdentleft LongTypeIdentright, + [], regvars, mk_LongTyCon LongTypeIdent) + end ) end) in ( LrTable.NT 49, ( result, LongTypeIdent1left, RBRACKET1right), diff --git a/test/explicit_regions/err_expty4.sml b/test/explicit_regions/err_expty4.sml index 53e3bcadb..8316b7e4c 100644 --- a/test/explicit_regions/err_expty4.sml +++ b/test/explicit_regions/err_expty4.sml @@ -1,7 +1,7 @@ (* Applied region-abstract type functions are tracked *) -type `r1 t = string`r1 * string`r1 +type t `r1 = string`r1 * string`r1 -fun f `[r r2] (x:string`r2) : `r t = (x ^ "", x) +fun f `[r r2] (x:string`r2) : t `r = (x ^ "", x) val () = print (op ^ (f "Hello") ^ "\n") diff --git a/test/explicit_regions/err_expty4.sml.log.ok b/test/explicit_regions/err_expty4.sml.log.ok index 59a450400..50e108e75 100644 --- a/test/explicit_regions/err_expty4.sml.log.ok +++ b/test/explicit_regions/err_expty4.sml.log.ok @@ -1,8 +1,8 @@ [reading source file: err_expty4.sml] -> type `r1 t +> type t `r1 val f : string`r2 -> string`r * string`r err_expty4.sml, line 5, column 6: - fun f `[r r2] (x:string`r2) : `r t = (x ^ "", x) + fun f `[r r2] (x:string`r2) : t `r = (x ^ "", x) ^^^^^^^ Cannot unify the explicit region variables `r2 and `r Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/err_ty1.sml.log.ok b/test/explicit_regions/err_ty1.sml.log.ok index ad7dfb6c0..2a0c58a26 100644 --- a/test/explicit_regions/err_ty1.sml.log.ok +++ b/test/explicit_regions/err_ty1.sml.log.ok @@ -1,7 +1,7 @@ [reading source file: err_ty1.sml] -> val x : string -err_ty1.sml, line 6, column 22: + +err_ty1.sml, line 6, column 15: in (a 3) : string`e - ^ -Expects explicit region variable but e is an explicit effect variable + ^^^^^^ +Wrong effect variable arity (expected 0, actual 1). Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/err_ty2.sml b/test/explicit_regions/err_ty2.sml index 01dab7cdd..5c5776c86 100644 --- a/test/explicit_regions/err_ty2.sml +++ b/test/explicit_regions/err_ty2.sml @@ -1,3 +1,3 @@ (* type abbreviations - err, repeated elements *) -type `[r1 r2 r3 r4 r5 r6 r2 r7] u = (int*int)`r1 +type u `[r1 r2 r3 r4 r5 r6 r2 r7] = (int*int)`r1 diff --git a/test/explicit_regions/err_ty2.sml.log.ok b/test/explicit_regions/err_ty2.sml.log.ok index 6c5055624..b44b75665 100644 --- a/test/explicit_regions/err_ty2.sml.log.ok +++ b/test/explicit_regions/err_ty2.sml.log.ok @@ -1,7 +1,7 @@ [reading source file: err_ty2.sml] -err_ty2.sml, line 3, column 5: - type `[r1 r2 r3 r4 r5 r6 r2 r7] u = (int*int)`r1 - ^^^^^^^^^^^^^^^^^^^^^^^^^^ +err_ty2.sml, line 3, column 7: + type u `[r1 r2 r3 r4 r5 r6 r2 r7] = (int*int)`r1 + ^^^^^^^^^^^^^^^^^^^^^^^^^^ Repeated identifiers r2 and r2. Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/err_ty3.sml b/test/explicit_regions/err_ty3.sml index 74fc4dc4a..5aebdb501 100644 --- a/test/explicit_regions/err_ty3.sml +++ b/test/explicit_regions/err_ty3.sml @@ -1,3 +1,3 @@ (* type abbreviations - err, type function not closed *) -type `[r1 r2 r3 r4 r5 r6 r7] s = (int*int)`r23 +type s `[r1 r2 r3 r4 r5 r6 r7] = (int*int)`r23 diff --git a/test/explicit_regions/err_ty3.sml.log.ok b/test/explicit_regions/err_ty3.sml.log.ok index 72dcaf415..4abb214c7 100644 --- a/test/explicit_regions/err_ty3.sml.log.ok +++ b/test/explicit_regions/err_ty3.sml.log.ok @@ -1,7 +1,7 @@ [reading source file: err_ty3.sml] err_ty3.sml, line 3, column 5: - type `[r1 r2 r3 r4 r5 r6 r7] s = (int*int)`r23 + type s `[r1 r2 r3 r4 r5 r6 r7] = (int*int)`r23 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Unbound explicit region or effect variable r23. Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/err_ty4.sml b/test/explicit_regions/err_ty4.sml index bb67884c5..f3475b84d 100644 --- a/test/explicit_regions/err_ty4.sml +++ b/test/explicit_regions/err_ty4.sml @@ -1,3 +1,3 @@ (* invalid order of region and effect variables in type declarations *) -type `[r1 e1 r2] t = int #e1 -> string`r1 * string`r2 +type t `[r1 e1 r2] = int #e1 -> string`r1 * string`r2 diff --git a/test/explicit_regions/err_ty4.sml.log.ok b/test/explicit_regions/err_ty4.sml.log.ok index 8a496ed51..6ecd06268 100644 --- a/test/explicit_regions/err_ty4.sml.log.ok +++ b/test/explicit_regions/err_ty4.sml.log.ok @@ -1,7 +1,7 @@ [reading source file: err_ty4.sml] err_ty4.sml, line 3, column 5: - type `[r1 e1 r2] t = int #e1 -> string`r1 * string`r2 + type t `[r1 e1 r2] = int #e1 -> string`r1 * string`r2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Region variables must occur before effect variables in type parameters: r1, e1 and r2. Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/expty3.sml b/test/explicit_regions/expty3.sml index dbd4c79d7..8aa458ef9 100644 --- a/test/explicit_regions/expty3.sml +++ b/test/explicit_regions/expty3.sml @@ -1,7 +1,7 @@ (* Type declarations may abstract over region variables *) -type `r1 t = string`r1 * string`r1 +type t `r1 = string`r1 * string`r1 -fun f `[r r2] (x:string`r2) : `r t = (x ^ "", x ^ "") +fun f `[r r2] (x:string`r2) : t `r = (x ^ "", x ^ "") val () = print (op ^ (f "Hello") ^ "\n") diff --git a/test/explicit_regions/mod.sml.log.ok b/test/explicit_regions/mod.sml.log.ok index ad9d627dc..72be4d707 100644 --- a/test/explicit_regions/mod.sml.log.ok +++ b/test/explicit_regions/mod.sml.log.ok @@ -19,8 +19,4 @@ The implementation type is less general than the specified type val f : all `r2,`r1.(string,`r1)->(string,`r2) Please modify either the implementation or the specification. -mod.sml, line 5, column 30: - val f : string`r1 -> string`r2 - ^^ -Cannot unify the explicit region variables `r2 and `r1 Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/mod3.sml.log.ok b/test/explicit_regions/mod3.sml.log.ok index 34d589db3..e959a105a 100644 --- a/test/explicit_regions/mod3.sml.log.ok +++ b/test/explicit_regions/mod3.sml.log.ok @@ -19,8 +19,4 @@ The implementation type is less general than the specified type val f : all `r2,`r1.(string,`r1)->(string,`r2) Please modify either the implementation or the specification. -mod3.sml, line 5, column 30: - val f : string`r1 -> string`r2 - ^^ -Cannot unify the explicit region variables `r2 and `r1 Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/mod4.sml.log.ok b/test/explicit_regions/mod4.sml.log.ok index 8af7744ce..c3a12ef7d 100644 --- a/test/explicit_regions/mod4.sml.log.ok +++ b/test/explicit_regions/mod4.sml.log.ok @@ -19,8 +19,4 @@ The implementation type is less general than the specified type val f : all `r2,`r1.(string,`r1)->(string,`r2) Please modify either the implementation or the specification. -mod4.sml, line 9, column 30: - val f : string`r1 -> string`r2 - ^^ -Cannot unify the explicit region variables `r2 and `r1 Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/nomut-err.sml.log.ok b/test/explicit_regions/nomut-err.sml.log.ok index 6dfd64e2f..995b93138 100644 --- a/test/explicit_regions/nomut-err.sml.log.ok +++ b/test/explicit_regions/nomut-err.sml.log.ok @@ -5,5 +5,5 @@ nomut-err.sml, line 14, column 39: val rec g `e : (unit #e -> unit) while nomut e = ^^^^^^^ Mutation constraint violation. The effect `e_44 contains -the atomic effect mut(r6) +the atomic effect mut(r0ref) Stopping compilation of MLB-file due to error (code 1). diff --git a/test/explicit_regions/ty1.sml b/test/explicit_regions/ty1.sml index 18d175548..09b9b06dd 100644 --- a/test/explicit_regions/ty1.sml +++ b/test/explicit_regions/ty1.sml @@ -1,12 +1,12 @@ (* type constructors can be annotated with explicit regions *) -type `r1 ty_con_1 = string`r1 +type ty_con_1 `r1 = string`r1 (* tuple types can be annotated with explicit regions *) -type `r2 ty_tuple_1 = (int * string)`r2 +type ty_tuple_1 `r2 = (int * string)`r2 (* record types can be annotated with explicit regions *) -type `r3 ty_record_1 = {a:int, b:string}`r3 +type ty_record_1 `r3 = {a:int, b:string}`r3 (* larger examples *) -type `[r1 r2] all = (int * bool)`r1 list`r2 +type all `[r1 r2] = (int * bool)`r1 list`r2 From 408c8e7276ad402ef843275b77b46e6bca2099c3 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Tue, 10 Mar 2026 17:23:18 +0100 Subject: [PATCH 06/12] fix --- src/Common/EfficientElab/StatObject.sml | 4 ++++ test/explicit_regions/all.tst | 4 +++- test/explicit_regions/expty4.sml | 9 +++++++++ test/explicit_regions/expty4.sml.log.ok | 6 ++++++ test/explicit_regions/expty4.sml.out.ok | 1 + 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/explicit_regions/expty4.sml create mode 100644 test/explicit_regions/expty4.sml.log.ok create mode 100644 test/explicit_regions/expty4.sml.out.ok diff --git a/src/Common/EfficientElab/StatObject.sml b/src/Common/EfficientElab/StatObject.sml index 624c417ed..19cfeeb32 100644 --- a/src/Common/EfficientElab/StatObject.sml +++ b/src/Common/EfficientElab/StatObject.sml @@ -1678,6 +1678,10 @@ structure StatObject: STATOBJECT = fun instance_with_types_regvars (([],[],tau),[],[]) = tau | instance_with_types_regvars ((tyvars,[],tau),taus,[]) = instance_with_types((tyvars,nil,tau),taus) + | instance_with_types_regvars ((tyvars,regvars,tau),taus,[]) = + let val tau' = Type.remove_regvars regvars tau + in instance_with_types((tyvars,nil,tau'),taus) + end | instance_with_types_regvars ((tvs,regvars,tau),taus,regvars') = let val regvars_regvars' = BasisCompat.ListPair.zipEq(regvars, regvars') diff --git a/test/explicit_regions/all.tst b/test/explicit_regions/all.tst index c4d6e71ac..ea68b25f4 100644 --- a/test/explicit_regions/all.tst +++ b/test/explicit_regions/all.tst @@ -106,4 +106,6 @@ mod7.sml ccl ecte (* Signature matching: It is an expty3.sml (* Applying region abstract type bindings *) -err_expty4.sml ccl ecte (* Applied region-abstract type functions are tracked *) \ No newline at end of file +err_expty4.sml ccl ecte (* Applied region-abstract type functions are tracked *) + +expty4.sml ccl (* ReML Type weakening *) \ No newline at end of file diff --git a/test/explicit_regions/expty4.sml b/test/explicit_regions/expty4.sml new file mode 100644 index 000000000..b14ce8fa5 --- /dev/null +++ b/test/explicit_regions/expty4.sml @@ -0,0 +1,9 @@ +(* Type declarations may abstract over region variables, but + they may be weakened by eluding the region parameters at + instantiation sites. *) + +type t `r1 = string`r1 * string`r1 + +fun f `[r2 r3] (x:string`r2, y:string`r3) : t = (x, y) + +val () = print (op ^ (f ("Hello"," world")) ^ "\n") diff --git a/test/explicit_regions/expty4.sml.log.ok b/test/explicit_regions/expty4.sml.log.ok new file mode 100644 index 000000000..e34e0183e --- /dev/null +++ b/test/explicit_regions/expty4.sml.log.ok @@ -0,0 +1,6 @@ +[reading source file: expty4.sml] +[wrote X64 code file: MLB/RI_PAR/expty4.sml.s] +> type t `r1 + val f : string`r2 * string`r3 -> string * string +[wrote X64 code file: MLB/RI_PAR/base-link_objects.s] +[wrote executable file: run] diff --git a/test/explicit_regions/expty4.sml.out.ok b/test/explicit_regions/expty4.sml.out.ok new file mode 100644 index 000000000..802992c42 --- /dev/null +++ b/test/explicit_regions/expty4.sml.out.ok @@ -0,0 +1 @@ +Hello world From 8d6c1ff708b7db31b3ec74362ade36ed7d8152b5 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Wed, 11 Mar 2026 16:58:21 +0100 Subject: [PATCH 07/12] fix pretty printing of ReML types --- src/Common/EfficientElab/StatObject.sml | 6 +++--- src/Common/ErrorInfo.sml | 6 +++--- src/Common/STATOBJECT.sml | 2 +- test/explicit_regions/err_expty1.sml.log.ok | 2 +- test/explicit_regions/err_funty1.sml.log.ok | 2 +- test/explicit_regions/err_funty2.sml.log.ok | 2 +- test/explicit_regions/err_funty3.sml.log.ok | 2 +- test/explicit_regions/err_patty1.sml.log.ok | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Common/EfficientElab/StatObject.sml b/src/Common/EfficientElab/StatObject.sml index 19cfeeb32..af52365d8 100644 --- a/src/Common/EfficientElab/StatObject.sml +++ b/src/Common/EfficientElab/StatObject.sml @@ -578,7 +578,7 @@ structure StatObject: STATOBJECT = in case (is_tuple_type m, rv) of (true, NONE) => (* A possible (t1 * t2 * ...) type, and * no rowvar. *) - print_tuple config names precedence (m, ty'_opt) + print_tuple config names precedence (m, rvi, ty'_opt) | _ => (*Have to do the general print.*) let val fields = Lab.Map.range m val fields' = fields_of_other_record (ty'_opt, fields) @@ -646,7 +646,7 @@ structure StatObject: STATOBJECT = else st_ty end - and print_tuple config names precedence (m, ty'_opt: Type option) = + and print_tuple config names precedence (m, rvi, ty'_opt: Type option) = (* Careful: "{1=x}" does not print as "(x)", and "{ }" * should be "unit". We don't do this folding at all if @@ -665,7 +665,7 @@ structure StatObject: STATOBJECT = (ziptypes (Lab.Map.range m') fields,rvi) | _ => (map (fn field => NONE) fields,rvi)) end - | _ => (map (fn field => NONE) fields,URef.uref NONE) + | _ => (map (fn field => NONE) fields, rvi) in case (fields, fields') of (nil, _) => "unit" (* Hard-wired *) diff --git a/src/Common/ErrorInfo.sml b/src/Common/ErrorInfo.sml index 4ca3a4d99..484de8bd6 100644 --- a/src/Common/ErrorInfo.sml +++ b/src/Common/ErrorInfo.sml @@ -161,10 +161,10 @@ structure ErrorInfo: ERROR_INFO = | report (UNIFICATION_TEXT(text1, ty1, text2, ty2)) = let val names = StatObject.newTVNames () - val pr1 = Type.pretty_string names - val pr2 = Type.pretty_string_as_ty names + val pr1 = Type.pretty_string names + val pr2 = Type.pretty_string_as_ty names fun pad n = if n<=0 then [] else " " :: pad (n-1) - fun max(i:int, j:int) = if i>j then i else j + fun max (i:int, j:int) = if i>j then i else j val n = max(size text1, size text2) in line "Type clash," diff --git a/src/Common/STATOBJECT.sml b/src/Common/STATOBJECT.sml index 72fc55913..2b1318f71 100644 --- a/src/Common/STATOBJECT.sml +++ b/src/Common/STATOBJECT.sml @@ -74,7 +74,7 @@ signature STATOBJECT = val pretty_string : TVNames -> Type -> string val string_as_ty : Type * Type -> string (* The second type is a guide for printing*) - val pretty_string_as_ty : TVNames -> (Type*Type) -> string + val pretty_string_as_ty : TVNames -> Type * Type -> string val layout : Type -> StringTree val from_TyVar : TyVar -> Type val to_TyVar : Type -> TyVar option diff --git a/test/explicit_regions/err_expty1.sml.log.ok b/test/explicit_regions/err_expty1.sml.log.ok index 973790e04..5587be939 100644 --- a/test/explicit_regions/err_expty1.sml.log.ok +++ b/test/explicit_regions/err_expty1.sml.log.ok @@ -1,5 +1,5 @@ [reading source file: err_expty1.sml] -> val a : int * int +> val a : (int * int)`r0top err_expty1.sml, line 3, column 28: val a = (4,6) : (int * int)`r0top ^^^^^ diff --git a/test/explicit_regions/err_funty1.sml.log.ok b/test/explicit_regions/err_funty1.sml.log.ok index 8392e2e06..b3e592b37 100644 --- a/test/explicit_regions/err_funty1.sml.log.ok +++ b/test/explicit_regions/err_funty1.sml.log.ok @@ -1,5 +1,5 @@ [reading source file: err_funty1.sml] -> val f : unit -> int * int +> val f : unit -> (int * int)`r0top err_funty1.sml, line 5, column 23: fun f () : (int * int)`r0top = (4,6) ^^^^^ diff --git a/test/explicit_regions/err_funty2.sml.log.ok b/test/explicit_regions/err_funty2.sml.log.ok index 3258e650f..fae753623 100644 --- a/test/explicit_regions/err_funty2.sml.log.ok +++ b/test/explicit_regions/err_funty2.sml.log.ok @@ -1,5 +1,5 @@ [reading source file: err_funty2.sml] -> val f : unit -> (int * int -> int * int) * int * bool +> val f : unit -> (((int * int)`r -> (int * int)`r) * int * bool)`r err_funty2.sml, line 4, column 64: fun f `[r] () : (((int * int)`r -> (int * int)`r) * int * bool)`r = ^ diff --git a/test/explicit_regions/err_funty3.sml.log.ok b/test/explicit_regions/err_funty3.sml.log.ok index 88cfa81cc..d62fbf16a 100644 --- a/test/explicit_regions/err_funty3.sml.log.ok +++ b/test/explicit_regions/err_funty3.sml.log.ok @@ -1,5 +1,5 @@ [reading source file: err_funty3.sml] -> val f : string`r -> int * string +> val f : string`r -> (int * string)`r err_funty3.sml, line 4, column 41: fun f `[r] (a:string`r) : (int * string)`r = (3, a) ^ diff --git a/test/explicit_regions/err_patty1.sml.log.ok b/test/explicit_regions/err_patty1.sml.log.ok index 2cf2ae479..a534d3677 100644 --- a/test/explicit_regions/err_patty1.sml.log.ok +++ b/test/explicit_regions/err_patty1.sml.log.ok @@ -1,5 +1,5 @@ [reading source file: err_patty1.sml] -> val a : int * int +> val a : (int * int)`r0top err_patty1.sml, line 5, column 20: val a : (int * int)`r0top = (4,6) ^^^^^ From a70a53d336b0a25bd4913105357637f24b94e541 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Fri, 13 Mar 2026 10:23:41 +0100 Subject: [PATCH 08/12] support for printing auxiliary resetting information when creating nullary-constructor values --- Makefile.in | 2 +- src/Common/KitReML.sml | 1 + src/Compiler/Regions/MulExp.sml | 22 +++++++++++++++------- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Makefile.in b/Makefile.in index fc355388b..94ebf9311 100644 --- a/Makefile.in +++ b/Makefile.in @@ -66,7 +66,7 @@ mlkit_basislibs: mlkit (cd basis && SML_LIB=.. ../bin/mlkit -c -no_gc -par repl.mlb) (cd basis && SML_LIB=.. ../bin/mlkit -c -gc basis.mlb) (cd basis && SML_LIB=.. ../bin/mlkit -c -gc -prof basis.mlb) - (cd basis && SML_LIB=.. ../bin/mlkit -c -no_gc -prof -Pcee -Prfg -Ppp -print_rho_types -log_to_file basis.mlb) + (cd basis && SML_LIB=.. ../bin/mlkit -c -no_gc -prof -Pcee -Prfg -Ppp -print_rho_types -Paux -log_to_file basis.mlb) .PHONY: mlkit_kitlibs mlkit_kitlibs: diff --git a/src/Common/KitReML.sml b/src/Common/KitReML.sml index 16325ee86..d04654878 100644 --- a/src/Common/KitReML.sml +++ b/src/Common/KitReML.sml @@ -6,6 +6,7 @@ structure K = val _ = Flags.turn_on "parallelism" val _ = Flags.turn_off "tag_values" val _ = Flags.turn_on "preserve_tail_calls" + val _ = Flags.turn_on "print_aux_reset" val () = List.app Flags.block_entry ["garbage_collection", "warn_spurious", diff --git a/src/Compiler/Regions/MulExp.sml b/src/Compiler/Regions/MulExp.sml index 60257f8e6..f86c174fe 100644 --- a/src/Compiler/Regions/MulExp.sml +++ b/src/Compiler/Regions/MulExp.sml @@ -38,6 +38,13 @@ struct "Prefix infix operations with module identifier to further\n\ \indicate the type of the operation."} + val print_aux_reset = Flags.add_bool_entry + {long="print_aux_reset", short=SOME "Paux",item=ref false, neg=true, + menu=["Layout","print resetting of auxiliary regions"], + desc="Print resetting of auxiliary resetting associated with\n\ + \construction of nullary constructor values. This flag\n\ + \affects the MulExp pretty printer."} + val print_control_abbrev_layout = Flags.is_on0 "print_control_abbrev_layout" (* defined in Effect *) fun debug_parallelism_p () = Flags.is_on "debug_parallelism" @@ -1192,9 +1199,6 @@ struct (false, ([],[],[])) => LEAF (Lvars.pr_lvar lvar) | _ => lay_il(Lvars.pr_lvar lvar, il, rhos_actuals) - fun dont_lay_il (lvar_string:string, terminator: string, il) : StringTree = - LEAF(lvar_string ^ terminator) - fun wrap s opr = s ^ opr ^ s (* precedence levels: lam, case, branches : 1 @@ -1255,9 +1259,13 @@ struct | UB_RECORD args => PP.NODE{start = "(", finish = ")" , indent = 1, childsep = PP.RIGHT", ", children = map (fn trip => layTrip(trip,0)) args} - | CON0{con, il, aux_regions,alloc} => (* nullary constructor *) + | CON0{con, il, aux_regions, alloc} => (* nullary constructor *) let val alloc_s = alloc_opt_string alloc - in dont_lay_il(Con.pr_con con, maybe_prefix_space alloc_s, il) + val start = Con.pr_con con ^ maybe_prefix_space alloc_s + in if print_aux_reset() andalso not (List.null aux_regions) then + NODE{start=start ^ "[", finish="]", indent=2, childsep=PP.RIGHT ", ", + children=map (LEAF o alloc_string) aux_regions} + else LEAF start end | CON1({con, il, alloc},trip) => (* unary constructor *) let fun trylist e = @@ -1283,13 +1291,13 @@ struct end | NONE => (* not a list *) let val alloc_s = alloc_opt_string alloc - val t1 = dont_lay_il(Con.pr_con con, maybe_prefix_space alloc_s, il) + val t1 = LEAF(Con.pr_con con ^ maybe_prefix_space alloc_s) in par (n-n_fun) (PP.NODE{start = "", finish = "", indent = 0, childsep = PP.RIGHT " ", children = [t1, layTrip(trip,n_inf)]}) end end | DECON({con, il},trip) => (* destruction *) - let val t1 = dont_lay_il("decon_" ^ Con.pr_con con , "", il) + let val t1 = LEAF("decon_" ^ Con.pr_con con) in par (n-n_fun) (PP.NODE{start = "", finish = "", indent = 0, childsep = PP.RIGHT " ", children = [t1, layTrip(trip,n_inf)]}) end From 7d71ba841a55264e6c3d67ad2a0aba0f2385b9f5 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Tue, 17 Mar 2026 11:30:43 +0100 Subject: [PATCH 09/12] fixes to manual --- doc/manual/Makefile | 16 +++++++++++----- doc/manual/mlkit.tex | 21 +++++++++++---------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/doc/manual/Makefile b/doc/manual/Makefile index 42b379ebb..566973a61 100644 --- a/doc/manual/Makefile +++ b/doc/manual/Makefile @@ -1,13 +1,19 @@ +PDFLATEX=pdflatex -halt-on-error + all: mlkit.pdf mlkit.pdf: mlkit.tex Makefile sml.tex - pdflatex mlkit + $(PDFLATEX) mlkit bibtex mlkit - pdflatex mlkit - pdflatex mlkit + $(PDFLATEX) mlkit + $(PDFLATEX) mlkit makeindex mlkit - pdflatex mlkit - pdflatex mlkit + $(PDFLATEX) mlkit + $(PDFLATEX) mlkit + +.PHONY: simple +simple: + $(PDFLATEX) mlkit clean: rm -rf *~ auto *.ind *.log *.idx *.aux *.dvi *.toc *.info *.ilg *.blg .xvpics *.bbl *.out .\#* mlkit.pdf diff --git a/doc/manual/mlkit.tex b/doc/manual/mlkit.tex index 3c3030374..6a2459ce3 100644 --- a/doc/manual/mlkit.tex +++ b/doc/manual/mlkit.tex @@ -4459,9 +4459,10 @@ \section{Storage Mode Analysis} \index{region flow graph}% \label{region flow graph}% % -{\em region flow graph\/} for the entire compilation unit. (This construction -happens in a phase prior to the storage mode analysis proper.) The nodes of the -region flow graph are region variables and arrow effects that appear in the +\emph{region flow graph} for the entire compilation unit. (This construction +happens in a phase prior to the storage mode analysis proper.) The nodes +(ranged over by $n$) of the region flow graph are region variables and effect +variables, denoting the region variables and arrow effects that appear in the region-annotated compilation unit. Whenever $\rho_1$ is a formal region parameter of some function declared in the unit and $\rho_2$ is a corresponding actual region parameter in the same unit, a directed edge from $\rho_1$ to @@ -4476,9 +4477,9 @@ \section{Storage Mode Analysis} same runtime type as $\rho$ is inserted into the graph. (This is necessary, so as to cater for applications of $f$ in subsequent compilation units.) -Let $G$ be the graph thus constructed. For every node $\rho$ in the graph, we -write $\langle\rho\rangle$ to denote the set of region variables that can be -reached from $\rho$, including $\rho$ itself. The rule that replaces (B3) is: +Let $G$ be the graph thus constructed. For every node $n$ in the graph, we +write $\langle n\rangle$ to denote the set of region variables that can be +reached from $n$, including $n$ itself if $n$ is a region variable. The rule that replaces (B3) is: % \index{region parameter!formal}% % @@ -4486,10 +4487,10 @@ \section{Storage Mode Analysis} \item[B3]{\it $\rho$ is a formal parameter of a region-polymorphic function whose right-hand side is the smallest enclosing lambda abstraction:} Use \fw{sat}, if, for every variable $l$ that is locally live at the allocation - point and for every region variable $\rho'$ that occurs free in the - region-annotated type scheme with place of $l$, it is the case that - $\langle\rho\rangle\cap\langle\rho'\rangle =\emptyset$; use \fw{attop} - otherwise. + point and for every region variable or effect variable $n$ that occurs free in the + region-annotated type scheme with place of $l$, it holds that + $\langle\rho\rangle\cap\langle n \rangle =\emptyset$; + Use \fw{attop} otherwise. \end{description} \medskip From 4d0d4050e08d146615ddc99580e62763930def5d Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Tue, 17 Mar 2026 13:14:08 +0100 Subject: [PATCH 10/12] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/Compiler/Regions/MulExp.sml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compiler/Regions/MulExp.sml b/src/Compiler/Regions/MulExp.sml index f86c174fe..4ca7bea14 100644 --- a/src/Compiler/Regions/MulExp.sml +++ b/src/Compiler/Regions/MulExp.sml @@ -41,7 +41,7 @@ struct val print_aux_reset = Flags.add_bool_entry {long="print_aux_reset", short=SOME "Paux",item=ref false, neg=true, menu=["Layout","print resetting of auxiliary regions"], - desc="Print resetting of auxiliary resetting associated with\n\ + desc="Print resetting of auxiliary regions associated with\n\ \construction of nullary constructor values. This flag\n\ \affects the MulExp pretty printer."} From 6165b56fcd27ffbbf81532f8dc1058c2f18b06b0 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Tue, 17 Mar 2026 13:15:07 +0100 Subject: [PATCH 11/12] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- test/explicit_regions/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/explicit_regions/Makefile b/test/explicit_regions/Makefile index 59e23cf7d..950a8ffdb 100644 --- a/test/explicit_regions/Makefile +++ b/test/explicit_regions/Makefile @@ -2,9 +2,9 @@ FLAGS=--maximum_inline_size 0 REML=../../bin/reml $(FLAGS) SMLSOURCES=er*.sml param.sml rec.sml tup.sml call.sml call2.sml ty1.sml err_expty1.sml err_expty2.sml \ - err_expty3.sml err_patty1.sml err_funty1.sml err_funty2.sml err_funty3.sml expty1.sml expty2.sml \ - expty3.sml disputs.sml disputs2.sml server.sml err_ty2.sml err_ty3.sml err_ty4.sml mod.sml mod2.sml \ - mod3.sml mod4.sml mod5.sml + err_expty3.sml err_expty4.sml err_patty1.sml err_funty1.sml err_funty2.sml err_funty3.sml expty1.sml \ + expty2.sml expty3.sml expty4.sml disputs.sml disputs2.sml server.sml err_ty2.sml err_ty3.sml \ + err_ty4.sml mod.sml mod2.sml mod3.sml mod4.sml mod5.sml .PHONY: all all: From a0f9f7a7399f92d04de615d0521a06c869369fb9 Mon Sep 17 00:00:00 2001 From: Martin Elsman Date: Tue, 17 Mar 2026 13:31:30 +0100 Subject: [PATCH 12/12] fix --- src/Common/EfficientElab/StatObject.sml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Common/EfficientElab/StatObject.sml b/src/Common/EfficientElab/StatObject.sml index af52365d8..200d550b3 100644 --- a/src/Common/EfficientElab/StatObject.sml +++ b/src/Common/EfficientElab/StatObject.sml @@ -1701,16 +1701,16 @@ structure StatObject: STATOBJECT = fun instanceType ty = let val ty = findType ty val {TypeDesc, level} = ty - in (*if !level <> Level.GENERIC then ty - else*) case TypeDesc of - TYVAR (tv as ref (NO_TY_LINK {inst=ref(SOME ty),...})) => ty - | TYVAR (tv as ref (NO_TY_LINK {inst=ref NONE,...})) => - die "instanceType.generic tyvar not instantiated" - | TYVAR (ref (TY_LINK _)) => die "instanceType.findType doesn't work" - | ARROW (ty1,rvi0,ty2,rvi) => Type.mk_Arrow (instanceType ty1, lookRio (URef.!! rvi0), - instanceType ty2, lookRio (URef.!! rvi)) - | RECTYPE (r,rvi) => Type.from_RecType (instanceRecType r,lookRio (URef.!! rvi)) - | CONSTYPE (tys,tyname,rvis) => Type.mk_ConsType (map instanceType tys,tyname, lookPrso (URef.!! rvis)) + in case TypeDesc of + TYVAR (tv as ref (NO_TY_LINK {inst=ref(SOME ty),...})) => ty + | TYVAR (tv as ref (NO_TY_LINK {inst=ref NONE,...})) => + if !level <> Level.GENERIC then ty + else die "instanceType.generic tyvar not instantiated" + | TYVAR (ref (TY_LINK _)) => die "instanceType.findType doesn't work" + | ARROW (ty1,rvi0,ty2,rvi) => Type.mk_Arrow (instanceType ty1, lookRio (URef.!! rvi0), + instanceType ty2, lookRio (URef.!! rvi)) + | RECTYPE (r,rvi) => Type.from_RecType (instanceRecType r,lookRio (URef.!! rvi)) + | CONSTYPE (tys,tyname,rvis) => Type.mk_ConsType (map instanceType tys,tyname, lookPrso (URef.!! rvis)) end and instanceRecType r = let val r = findRecType r