From 2afdf3a15194fa689787570cccb7adef02384b7f Mon Sep 17 00:00:00 2001 From: Andreas Rossberg Date: Tue, 9 Jul 2024 12:10:54 +0200 Subject: [PATCH] Fix rendering of subscript atoms --- spectec/spec/wasm-3.0/6-typing.watsup | 3 +- spectec/src/backend-latex/render.ml | 26 +- spectec/src/el/atom.ml | 13 +- spectec/test-frontend/TEST.md | 304 ++--- spectec/test-latex/TEST.md | 392 ++++++- spectec/test-latex/test.watsup | 109 ++ spectec/test-middlend/TEST.md | 1526 ++++++++++++------------- spectec/test-prose/TEST.md | 38 +- spectec/test-splice/TEST.md | 64 +- 9 files changed, 1454 insertions(+), 1021 deletions(-) diff --git a/spectec/spec/wasm-3.0/6-typing.watsup b/spectec/spec/wasm-3.0/6-typing.watsup index 04c8e1febe..03d5be76d9 100644 --- a/spectec/spec/wasm-3.0/6-typing.watsup +++ b/spectec/spec/wasm-3.0/6-typing.watsup @@ -8,9 +8,8 @@ syntax init hint(desc "initialization status") = syntax localtype hint(desc "local type") = init valtype -;; TODO(1, rossberg): fix rendering of subscript syntax instrtype hint(desc "instruction type") = - resulttype ->_ localidx* resulttype hint(show %0 `->_ %2 %3) hint(macro "to") + resulttype ->_ localidx* resulttype hint(macro "to") syntax context hint(desc "context") hint(macro "%" "C%") = diff --git a/spectec/src/backend-latex/render.ml b/spectec/src/backend-latex/render.ml index c32cbcf186..480c51efa3 100644 --- a/spectec/src/backend-latex/render.ml +++ b/spectec/src/backend-latex/render.ml @@ -59,6 +59,11 @@ let rec ends_sub_exp e = | FuseE (_e1, e2) -> ends_sub_exp e2 | _ -> false +let as_arith_exp e = + match e.it with + | ArithE e1 -> e1 + | _ -> e + let as_paren_exp e = match e.it with | ParenE (e1, _) -> e1 @@ -1070,14 +1075,23 @@ Printf.eprintf "[render %s:X @ %s] try expansion\n%!" (Source.string_of_region e | TupE es -> "(" ^ render_exps ", " env es ^ ")" | InfixE (e1, atom, e2) -> let id = typed_id atom in - let e = AtomE atom $ atom.at in - let args = List.map arg_of_exp (as_seq_exp e1 @ [e] @ as_seq_exp e2) in + let ea = AtomE atom $ atom.at in + let args = List.map arg_of_exp ([e1; ea] @ as_seq_exp e2) in render_expand render_exp env env.show_atom env.macro_atom id args (fun () -> - (match e1.it with - | SeqE [] -> "{" ^ space (render_atom env) atom ^ "}\\;" - | _ -> render_exp env e1 ^ space (render_atom env) atom - ) ^ render_exp env e2 + (* Handle subscripting and unary uses *) + (match Atom.is_sub atom, (as_arith_exp e1).it with + | false, SeqE [] -> "{" ^ render_atom env atom ^ "}\\, " + | true, SeqE [] -> "{" ^ render_atom env atom ^ "}_" + | false, _ -> render_exp env e1 ^ space (render_atom env) atom + | true, _ -> render_exp env e1 ^ " " ^ render_atom env atom ^ "_" + ) ^ + (match Atom.is_sub atom, e2.it with + | true, SeqE (e21::e22::es2) -> + "{" ^ render_exps "," env (as_tup_exp e21) ^ "} " ^ render_exp_seq env (e22::es2) + | true, _ -> "{" ^ render_exps "," env (as_tup_exp e2) ^ "} {}" + | false, _ -> render_exp env e2 + ) ) | BrackE (l, e1, r) -> let id = typed_id l in diff --git a/spectec/src/el/atom.ml b/spectec/src/el/atom.ml index d2d3624c1c..955162cd32 100644 --- a/spectec/src/el/atom.ml +++ b/spectec/src/el/atom.ml @@ -55,8 +55,15 @@ let eq atom1 atom2 = let compare atom1 atom2 = compare atom1.it atom2.it -let sub atom1 atom2 = +let is_sub atom = + match atom.it with + | Atom id -> id <> "" && id.[String.length id - 1] = '_' + | ArrowSub | Arrow2Sub -> true + | _ -> false + +let sub atom1 atom2 = match atom1.it, atom2.it with + | Atom id1, Atom id2 -> id1 = id2 ^ "_" | ArrowSub, Arrow | Arrow2Sub, Arrow2 -> true | _, _ -> false @@ -127,8 +134,8 @@ let name atom = | Mem -> "in" | Arrow -> "arrow" (* Latex: \rightarrow *) | Arrow2 -> "darrow" (* Latex: \Rightarrow *) - | ArrowSub -> "arrowsub" (* Latex: \rightarrow with subscript *) - | Arrow2Sub -> "darrowsub" (* Latex: \Rightarrow with subscript *) + | ArrowSub -> "arrow_" (* Latex: \rightarrow with subscript *) + | Arrow2Sub -> "darrow_" (* Latex: \Rightarrow with subscript *) | Colon -> "colon" (* Latex: : *) | Sub -> "sub" (* Latex: \leq or <: *) | Sup -> "sup" (* Latex: \geq or :> *) diff --git a/spectec/test-frontend/TEST.md b/spectec/test-frontend/TEST.md index 3c75f9a690..8789e02567 100644 --- a/spectec/test-frontend/TEST.md +++ b/spectec/test-frontend/TEST.md @@ -3444,22 +3444,22 @@ syntax context = ;; 6-typing.watsup rec { -;; 6-typing.watsup:37.1-37.86 +;; 6-typing.watsup:36.1-36.86 def $with_locals(context : context, localidx*, localtype*) : context - ;; 6-typing.watsup:39.1-39.34 + ;; 6-typing.watsup:38.1-38.34 def $with_locals{C : context}(C, [], []) = C - ;; 6-typing.watsup:40.1-40.90 + ;; 6-typing.watsup:39.1-39.90 def $with_locals{C : context, x_1 : idx, x* : idx*, lct_1 : localtype, lct* : localtype*}(C, [x_1] :: x*{x : localidx}, [lct_1] :: lct*{lct : localtype}) = $with_locals(C[LOCALS_context[x_1!`%`_idx.0] = lct_1], x*{x : localidx}, lct*{lct : localtype}) } ;; 6-typing.watsup rec { -;; 6-typing.watsup:46.1-46.94 +;; 6-typing.watsup:45.1-45.94 def $clos_deftypes(deftype*) : deftype* - ;; 6-typing.watsup:53.1-53.30 + ;; 6-typing.watsup:52.1-52.30 def $clos_deftypes([]) = [] - ;; 6-typing.watsup:54.1-54.101 + ;; 6-typing.watsup:53.1-53.101 def $clos_deftypes{dt* : deftype*, dt_n : deftype, dt'* : deftype*}(dt*{dt : deftype} :: [dt_n]) = dt'*{dt' : deftype} :: [$subst_all_deftype(dt_n, (dt' : deftype <: heaptype)*{dt' : deftype})] -- if (dt'*{dt' : deftype} = $clos_deftypes(dt*{dt : deftype})) } @@ -3627,99 +3627,99 @@ relation Numtype_sub: `%|-%<:%`(context, numtype, numtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:141.1-141.107 +;; 6-typing.watsup:140.1-140.107 relation Deftype_sub: `%|-%<:%`(context, deftype, deftype) - ;; 6-typing.watsup:452.1-454.66 + ;; 6-typing.watsup:451.1-453.66 rule refl{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($clos_deftype(C, deftype_1) = $clos_deftype(C, deftype_2)) - ;; 6-typing.watsup:456.1-459.49 + ;; 6-typing.watsup:455.1-458.49 rule super{C : context, deftype_1 : deftype, deftype_2 : deftype, fin : fin, typeuse* : typeuse*, ct : comptype, i : nat}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($unrolldt(deftype_1) = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) -- Heaptype_sub: `%|-%<:%`(C, (typeuse*{typeuse : typeuse}[i] : typeuse <: heaptype), (deftype_2 : deftype <: heaptype)) -;; 6-typing.watsup:289.1-289.104 +;; 6-typing.watsup:288.1-288.104 relation Heaptype_sub: `%|-%<:%`(context, heaptype, heaptype) - ;; 6-typing.watsup:300.1-301.28 + ;; 6-typing.watsup:299.1-300.28 rule refl{C : context, heaptype : heaptype}: `%|-%<:%`(C, heaptype, heaptype) - ;; 6-typing.watsup:303.1-307.48 + ;; 6-typing.watsup:302.1-306.48 rule trans{C : context, heaptype_1 : heaptype, heaptype_2 : heaptype, heaptype' : heaptype}: `%|-%<:%`(C, heaptype_1, heaptype_2) -- Heaptype_ok: `%|-%:OK`(C, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype_1, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype', heaptype_2) - ;; 6-typing.watsup:309.1-310.17 + ;; 6-typing.watsup:308.1-309.17 rule eq-any{C : context}: `%|-%<:%`(C, EQ_heaptype, ANY_heaptype) - ;; 6-typing.watsup:312.1-313.17 + ;; 6-typing.watsup:311.1-312.17 rule i31-eq{C : context}: `%|-%<:%`(C, I31_heaptype, EQ_heaptype) - ;; 6-typing.watsup:315.1-316.20 + ;; 6-typing.watsup:314.1-315.20 rule struct-eq{C : context}: `%|-%<:%`(C, STRUCT_heaptype, EQ_heaptype) - ;; 6-typing.watsup:318.1-319.19 + ;; 6-typing.watsup:317.1-318.19 rule array-eq{C : context}: `%|-%<:%`(C, ARRAY_heaptype, EQ_heaptype) - ;; 6-typing.watsup:321.1-323.42 + ;; 6-typing.watsup:320.1-322.42 rule struct{C : context, deftype : deftype, fieldtype* : fieldtype*}: `%|-%<:%`(C, (deftype : deftype <: heaptype), STRUCT_heaptype) -- Expand: `%~~%`(deftype, STRUCT_comptype(`%`_structtype(fieldtype*{fieldtype : fieldtype}))) - ;; 6-typing.watsup:325.1-327.40 + ;; 6-typing.watsup:324.1-326.40 rule array{C : context, deftype : deftype, fieldtype : fieldtype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), ARRAY_heaptype) -- Expand: `%~~%`(deftype, ARRAY_comptype(fieldtype)) - ;; 6-typing.watsup:329.1-331.38 + ;; 6-typing.watsup:328.1-330.38 rule func{C : context, deftype : deftype, functype : functype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), FUNC_heaptype) -- Expand: `%~~%`(deftype, FUNC_comptype(functype)) - ;; 6-typing.watsup:333.1-335.46 + ;; 6-typing.watsup:332.1-334.46 rule def{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, (deftype_1 : deftype <: heaptype), (deftype_2 : deftype <: heaptype)) -- Deftype_sub: `%|-%<:%`(C, deftype_1, deftype_2) - ;; 6-typing.watsup:337.1-339.53 + ;; 6-typing.watsup:336.1-338.53 rule typeidx-l{C : context, typeidx : typeidx, heaptype : heaptype}: `%|-%<:%`(C, _IDX_heaptype(typeidx), heaptype) -- Heaptype_sub: `%|-%<:%`(C, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype), heaptype) - ;; 6-typing.watsup:341.1-343.53 + ;; 6-typing.watsup:340.1-342.53 rule typeidx-r{C : context, heaptype : heaptype, typeidx : typeidx}: `%|-%<:%`(C, heaptype, _IDX_heaptype(typeidx)) -- Heaptype_sub: `%|-%<:%`(C, heaptype, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype)) - ;; 6-typing.watsup:345.1-347.40 + ;; 6-typing.watsup:344.1-346.40 rule rec{C : context, i : nat, typeuse* : typeuse*, j : nat, fin : fin, ct : comptype}: `%|-%<:%`(C, REC_heaptype(i), (typeuse*{typeuse : typeuse}[j] : typeuse <: heaptype)) -- if (C.RECS_context[i] = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) - ;; 6-typing.watsup:349.1-351.40 + ;; 6-typing.watsup:348.1-350.40 rule none{C : context, heaptype : heaptype}: `%|-%<:%`(C, NONE_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, ANY_heaptype) - ;; 6-typing.watsup:353.1-355.41 + ;; 6-typing.watsup:352.1-354.41 rule nofunc{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOFUNC_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, FUNC_heaptype) - ;; 6-typing.watsup:357.1-359.43 + ;; 6-typing.watsup:356.1-358.43 rule noextern{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOEXTERN_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, EXTERN_heaptype) - ;; 6-typing.watsup:361.1-362.23 + ;; 6-typing.watsup:360.1-361.23 rule bot{C : context, heaptype : heaptype}: `%|-%<:%`(C, BOT_heaptype, heaptype) } @@ -3863,13 +3863,13 @@ relation Subtype_ok2: `%|-%:%`(context, subtype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:136.1-136.105 +;; 6-typing.watsup:135.1-135.105 relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) - ;; 6-typing.watsup:214.1-215.24 + ;; 6-typing.watsup:213.1-214.24 rule empty{C : context, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidxnat(x, i)) - ;; 6-typing.watsup:217.1-220.55 + ;; 6-typing.watsup:216.1-219.55 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidxnat(x, i)) -- Subtype_ok2: `%|-%:%`(C, subtype_1, OK_oktypeidxnat(x, i)) @@ -3879,19 +3879,19 @@ relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:134.1-134.102 +;; 6-typing.watsup:133.1-133.102 relation Rectype_ok: `%|-%:%`(context, rectype, oktypeidx) - ;; 6-typing.watsup:202.1-203.23 + ;; 6-typing.watsup:201.1-202.23 rule empty{C : context, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidx(x)) - ;; 6-typing.watsup:205.1-208.48 + ;; 6-typing.watsup:204.1-207.48 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Subtype_ok: `%|-%:%`(C, subtype_1, OK_oktypeidx(x)) -- Rectype_ok: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(`%`_typeidx((x!`%`_idx.0 + 1)))) - ;; 6-typing.watsup:210.1-212.60 + ;; 6-typing.watsup:209.1-211.60 rule rec2{C : context, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Rectype_ok2: `%|-%:%`({TYPES [], RECS subtype*{subtype : subtype}, FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [], RETURN ?(), REFS []} ++ C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidxnat(x, 0)) @@ -4042,83 +4042,83 @@ relation Blocktype_ok: `%|-%:%`(context, blocktype, instrtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:523.1-523.95 +;; 6-typing.watsup:522.1-522.95 relation Instr_ok: `%|-%:%`(context, instr, instrtype) - ;; 6-typing.watsup:562.1-563.24 + ;; 6-typing.watsup:561.1-562.24 rule nop{C : context}: `%|-%:%`(C, NOP_instr, `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:565.1-567.42 + ;; 6-typing.watsup:564.1-566.42 rule unreachable{C : context, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, UNREACHABLE_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:569.1-571.29 + ;; 6-typing.watsup:568.1-570.29 rule drop{C : context, t : valtype}: `%|-%:%`(C, DROP_instr, `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:574.1-576.29 + ;; 6-typing.watsup:573.1-575.29 rule select-expl{C : context, t : valtype}: `%|-%:%`(C, `SELECT()%?`_instr(?([t])), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:578.1-582.37 + ;; 6-typing.watsup:577.1-581.37 rule select-impl{C : context, t : valtype, t' : valtype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, `SELECT()%?`_instr(?()), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) -- Valtype_sub: `%|-%<:%`(C, t, t') -- if ((t' = (numtype : numtype <: valtype)) \/ (t' = (vectype : vectype <: valtype))) - ;; 6-typing.watsup:598.1-601.67 + ;; 6-typing.watsup:597.1-600.67 rule block{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, BLOCK_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:603.1-606.67 + ;; 6-typing.watsup:602.1-605.67 rule loop{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, LOOP_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_1*{t_1 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:608.1-612.71 + ;; 6-typing.watsup:607.1-611.71 rule if{C : context, bt : blocktype, instr_1* : instr*, instr_2* : instr*, t_1* : valtype*, t_2* : valtype*, x_1* : idx*, x_2* : idx*}: `%|-%:%`(C, `IF%%ELSE%`_instr(bt, instr_1*{instr_1 : instr}, instr_2*{instr_2 : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_1*{instr_1 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:617.1-620.42 + ;; 6-typing.watsup:616.1-619.42 rule br{C : context, l : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_instr(l), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:622.1-624.25 + ;; 6-typing.watsup:621.1-623.25 rule br_if{C : context, l : labelidx, t* : valtype*}: `%|-%:%`(C, BR_IF_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [I32_valtype]), [], `%`_resulttype(t*{t : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) - ;; 6-typing.watsup:626.1-630.42 + ;; 6-typing.watsup:625.1-629.42 rule br_table{C : context, l* : labelidx*, l' : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_TABLE_instr(l*{l : labelidx}, l'), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- (Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l!`%`_labelidx.0]!`%`_resulttype.0))*{l : labelidx} -- Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:632.1-635.31 + ;; 6-typing.watsup:631.1-634.31 rule br_on_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:637.1-639.34 + ;; 6-typing.watsup:636.1-638.34 rule br_on_non_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)])) - ;; 6-typing.watsup:641.1-647.34 + ;; 6-typing.watsup:640.1-646.34 rule br_on_cast{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [($diffrt(rt_1, rt_2) : reftype <: valtype)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)])) @@ -4127,7 +4127,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt) - ;; 6-typing.watsup:649.1-655.49 + ;; 6-typing.watsup:648.1-654.49 rule br_on_cast_fail{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_FAIL_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [(rt_2 : reftype <: valtype)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)])) @@ -4136,30 +4136,30 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt) - ;; 6-typing.watsup:660.1-662.47 + ;; 6-typing.watsup:659.1-661.47 rule call{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Expand: `%~~%`(C.FUNCS_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:664.1-666.47 + ;; 6-typing.watsup:663.1-665.47 rule call_ref{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:668.1-672.47 + ;; 6-typing.watsup:667.1-671.47 rule call_indirect{C : context, x : idx, y : idx, t_1* : valtype*, t_2* : valtype*, lim : limits, rt : reftype}: `%|-%:%`(C, CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) -- Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype)) -- Expand: `%~~%`(C.TYPES_context[y!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:674.1-677.42 + ;; 6-typing.watsup:673.1-676.42 rule return{C : context, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, RETURN_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.RETURN_context = ?(`%`_list(t*{t : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:680.1-685.42 + ;; 6-typing.watsup:679.1-684.42 rule return_call{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- Expand: `%~~%`(C.FUNCS_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) @@ -4167,7 +4167,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:688.1-693.42 + ;; 6-typing.watsup:687.1-692.42 rule return_call_ref{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) @@ -4175,7 +4175,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:696.1-704.42 + ;; 6-typing.watsup:695.1-703.42 rule return_call_indirect{C : context, x : idx, y : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, lim : limits, rt : reftype, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) @@ -4185,458 +4185,458 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:709.1-710.33 + ;; 6-typing.watsup:708.1-709.33 rule const{C : context, nt : numtype, c_nt : num_(nt)}: `%|-%:%`(C, CONST_instr(nt, c_nt), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:712.1-713.34 + ;; 6-typing.watsup:711.1-712.34 rule unop{C : context, nt : numtype, unop_nt : unop_(nt)}: `%|-%:%`(C, UNOP_instr(nt, unop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:715.1-716.39 + ;; 6-typing.watsup:714.1-715.39 rule binop{C : context, nt : numtype, binop_nt : binop_(nt)}: `%|-%:%`(C, BINOP_instr(nt, binop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:718.1-719.39 + ;; 6-typing.watsup:717.1-718.39 rule testop{C : context, nt : numtype, testop_nt : testop_(nt)}: `%|-%:%`(C, TESTOP_instr(nt, testop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:721.1-722.40 + ;; 6-typing.watsup:720.1-721.40 rule relop{C : context, nt : numtype, relop_nt : relop_(nt)}: `%|-%:%`(C, RELOP_instr(nt, relop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:726.1-728.34 + ;; 6-typing.watsup:725.1-727.34 rule cvtop-reinterpret{C : context, nt_1 : numtype, nt_2 : numtype}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, REINTERPRET_cvtop_, ?()), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ($size(nt_1) = $size(nt_2)) - ;; 6-typing.watsup:730.1-732.112 + ;; 6-typing.watsup:729.1-731.112 rule cvtop-convert{C : context, nt_1 : numtype, nt_2 : numtype, sx? : sx?, Inn_1 : Inn, Inn_2 : Inn, Fnn_1 : Fnn, Fnn_2 : Fnn}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, CONVERT_cvtop_, sx?{sx : sx}), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ((sx?{sx : sx} = ?()) <=> ((((nt_1 = (Inn_1 : Inn <: numtype)) /\ (nt_2 = (Inn_2 : Inn <: numtype))) /\ ($size(nt_1) > $size(nt_2))) \/ ((nt_1 = (Fnn_1 : Fnn <: numtype)) /\ (nt_2 = (Fnn_2 : Fnn <: numtype))))) - ;; 6-typing.watsup:737.1-739.31 + ;; 6-typing.watsup:736.1-738.31 rule ref.null{C : context, ht : heaptype}: `%|-%:%`(C, REF.NULL_instr(ht), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:741.1-744.20 + ;; 6-typing.watsup:740.1-743.20 rule ref.func{C : context, x : idx, dt : deftype}: `%|-%:%`(C, REF.FUNC_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), (dt : deftype <: heaptype))]))) -- if (C.FUNCS_context[x!`%`_idx.0] = dt) -- if x <- C.REFS_context - ;; 6-typing.watsup:746.1-747.34 + ;; 6-typing.watsup:745.1-746.34 rule ref.i31{C : context}: `%|-%:%`(C, REF.I31_instr, `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), I31_heaptype)]))) - ;; 6-typing.watsup:749.1-751.31 + ;; 6-typing.watsup:748.1-750.31 rule ref.is_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.IS_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([I32_valtype]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:753.1-755.31 + ;; 6-typing.watsup:752.1-754.31 rule ref.as_non_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.AS_NON_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:757.1-758.51 + ;; 6-typing.watsup:756.1-757.51 rule ref.eq{C : context}: `%|-%:%`(C, REF.EQ_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype) REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:760.1-764.33 + ;; 6-typing.watsup:759.1-763.33 rule ref.test{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.TEST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([I32_valtype]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:766.1-770.33 + ;; 6-typing.watsup:765.1-769.33 rule ref.cast{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.CAST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:775.1-776.42 + ;; 6-typing.watsup:774.1-775.42 rule i31.get{C : context, sx : sx}: `%|-%:%`(C, I31.GET_instr(sx), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), I31_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:781.1-783.44 + ;; 6-typing.watsup:780.1-782.44 rule struct.new{C : context, x : idx, zt* : storagetype*, mut* : mut*}: `%|-%:%`(C, STRUCT.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)*{zt : storagetype}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) - ;; 6-typing.watsup:785.1-788.40 + ;; 6-typing.watsup:784.1-787.40 rule struct.new_default{C : context, x : idx, mut* : mut*, zt* : storagetype*, val* : val*}: `%|-%:%`(C, STRUCT.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) -- (if ($default_($unpack(zt)) = ?(val)))*{val : val, zt : storagetype} - ;; 6-typing.watsup:790.1-794.39 + ;; 6-typing.watsup:789.1-793.39 rule struct.get{C : context, sx? : sx?, x : idx, i : nat, zt : storagetype, yt* : fieldtype*, mut : mut}: `%|-%:%`(C, STRUCT.GET_instr(sx?{sx : sx}, x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype([$unpack(zt)]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(yt*{yt : fieldtype}))) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(mut, zt)) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:796.1-799.24 + ;; 6-typing.watsup:795.1-798.24 rule struct.set{C : context, x : idx, i : nat, zt : storagetype, yt* : fieldtype*}: `%|-%:%`(C, STRUCT.SET_instr(x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) $unpack(zt)]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(yt*{yt : fieldtype}))) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(`MUT%?`_mut(?(())), zt)) - ;; 6-typing.watsup:804.1-806.42 + ;; 6-typing.watsup:803.1-805.42 rule array.new{C : context, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype([$unpack(zt) I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:808.1-811.37 + ;; 6-typing.watsup:807.1-810.37 rule array.new_default{C : context, x : idx, mut : mut, zt : storagetype, val : val}: `%|-%:%`(C, ARRAY.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ($default_($unpack(zt)) = ?(val)) - ;; 6-typing.watsup:813.1-815.42 + ;; 6-typing.watsup:812.1-814.42 rule array.new_fixed{C : context, x : idx, n : n, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_FIXED_instr(x, `%`_u32(n)), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)^n{}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:817.1-820.40 + ;; 6-typing.watsup:816.1-819.40 rule array.new_elem{C : context, x : idx, y : idx, mut : mut, rt : reftype}: `%|-%:%`(C, ARRAY.NEW_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, (rt : reftype <: storagetype)))) -- Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt) - ;; 6-typing.watsup:822.1-826.24 + ;; 6-typing.watsup:821.1-825.24 rule array.new_data{C : context, x : idx, y : idx, mut : mut, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.NEW_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:828.1-831.39 + ;; 6-typing.watsup:827.1-830.39 rule array.get{C : context, sx? : sx?, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.GET_instr(sx?{sx : sx}, x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype]), [], `%`_resulttype([$unpack(zt)]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:833.1-835.42 + ;; 6-typing.watsup:832.1-834.42 rule array.set{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt)]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:837.1-839.42 + ;; 6-typing.watsup:836.1-838.42 rule array.len{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.LEN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ARRAY_heaptype)]), [], `%`_resulttype([I32_valtype]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:841.1-843.42 + ;; 6-typing.watsup:840.1-842.42 rule array.fill{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt) I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:845.1-849.40 + ;; 6-typing.watsup:844.1-848.40 rule array.copy{C : context, x_1 : idx, x_2 : idx, zt_1 : storagetype, mut : mut, zt_2 : storagetype}: `%|-%:%`(C, ARRAY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x_1) : typevar <: heaptype)) I32_valtype REF_valtype(`NULL%?`_nul(?(())), ($idx(x_2) : typevar <: heaptype)) I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x_1!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt_1))) -- Expand: `%~~%`(C.TYPES_context[x_2!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt_2))) -- Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1) - ;; 6-typing.watsup:851.1-854.44 + ;; 6-typing.watsup:850.1-853.44 rule array.init_elem{C : context, x : idx, y : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.INIT_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) -- Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt) - ;; 6-typing.watsup:856.1-860.24 + ;; 6-typing.watsup:855.1-859.24 rule array.init_data{C : context, x : idx, y : idx, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.INIT_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:865.1-866.62 + ;; 6-typing.watsup:864.1-865.62 rule extern.convert_any{C : context, nul : nul}: `%|-%:%`(C, EXTERN.CONVERT_ANY_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, ANY_heaptype)]), [], `%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]))) - ;; 6-typing.watsup:868.1-869.62 + ;; 6-typing.watsup:867.1-868.62 rule any.convert_extern{C : context, nul : nul}: `%|-%:%`(C, ANY.CONVERT_EXTERN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]), [], `%`_resulttype([REF_valtype(nul, ANY_heaptype)]))) - ;; 6-typing.watsup:874.1-875.35 + ;; 6-typing.watsup:873.1-874.35 rule vconst{C : context, c : vec_(V128_Vnn)}: `%|-%:%`(C, VCONST_instr(V128_vectype, c), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:877.1-878.41 + ;; 6-typing.watsup:876.1-877.41 rule vvunop{C : context, vvunop : vvunop}: `%|-%:%`(C, VVUNOP_instr(V128_vectype, vvunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:880.1-881.48 + ;; 6-typing.watsup:879.1-880.48 rule vvbinop{C : context, vvbinop : vvbinop}: `%|-%:%`(C, VVBINOP_instr(V128_vectype, vvbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:883.1-884.55 + ;; 6-typing.watsup:882.1-883.55 rule vvternop{C : context, vvternop : vvternop}: `%|-%:%`(C, VVTERNOP_instr(V128_vectype, vvternop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:886.1-887.44 + ;; 6-typing.watsup:885.1-886.44 rule vvtestop{C : context, vvtestop : vvtestop}: `%|-%:%`(C, VVTESTOP_instr(V128_vectype, vvtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:889.1-890.37 + ;; 6-typing.watsup:888.1-889.37 rule vunop{C : context, sh : shape, vunop : vunop_(sh)}: `%|-%:%`(C, VUNOP_instr(sh, vunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:892.1-893.44 + ;; 6-typing.watsup:891.1-892.44 rule vbinop{C : context, sh : shape, vbinop : vbinop_(sh)}: `%|-%:%`(C, VBINOP_instr(sh, vbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:895.1-896.40 + ;; 6-typing.watsup:894.1-895.40 rule vtestop{C : context, sh : shape, vtestop : vtestop_(sh)}: `%|-%:%`(C, VTESTOP_instr(sh, vtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:898.1-899.44 + ;; 6-typing.watsup:897.1-898.44 rule vrelop{C : context, sh : shape, vrelop : vrelop_(sh)}: `%|-%:%`(C, VRELOP_instr(sh, vrelop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:901.1-902.47 + ;; 6-typing.watsup:900.1-901.47 rule vshiftop{C : context, sh : ishape, vshiftop : vshiftop_(sh)}: `%|-%:%`(C, VSHIFTOP_instr(sh, vshiftop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype I32_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:904.1-905.33 + ;; 6-typing.watsup:903.1-904.33 rule vbitmask{C : context, sh : ishape}: `%|-%:%`(C, VBITMASK_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:907.1-908.39 + ;; 6-typing.watsup:906.1-907.39 rule vswizzle{C : context, sh : ishape}: `%|-%:%`(C, VSWIZZLE_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:910.1-912.29 + ;; 6-typing.watsup:909.1-911.29 rule vshuffle{C : context, sh : ishape, i* : nat*}: `%|-%:%`(C, VSHUFFLE_instr(sh, `%`_laneidx(i)*{i : nat}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- (if (i < (2 * $dim((sh : ishape <: shape))!`%`_dim.0)))*{i : nat} - ;; 6-typing.watsup:914.1-915.44 + ;; 6-typing.watsup:913.1-914.44 rule vsplat{C : context, sh : shape}: `%|-%:%`(C, VSPLAT_instr(sh), `%->_%%`_instrtype(`%`_resulttype([($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:918.1-920.21 + ;; 6-typing.watsup:917.1-919.21 rule vextract_lane{C : context, sh : shape, sx? : sx?, i : nat}: `%|-%:%`(C, VEXTRACT_LANE_instr(sh, sx?{sx : sx}, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([($unpackshape(sh) : numtype <: valtype)]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:922.1-924.21 + ;; 6-typing.watsup:921.1-923.21 rule vreplace_lane{C : context, sh : shape, i : nat}: `%|-%:%`(C, VREPLACE_LANE_instr(sh, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype ($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:926.1-927.53 + ;; 6-typing.watsup:925.1-926.53 rule vextunop{C : context, sh_1 : ishape, sh_2 : ishape, vextunop : vextunop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTUNOP_instr(sh_1, sh_2, vextunop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:929.1-930.60 + ;; 6-typing.watsup:928.1-929.60 rule vextbinop{C : context, sh_1 : ishape, sh_2 : ishape, vextbinop : vextbinop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTBINOP_instr(sh_1, sh_2, vextbinop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:932.1-933.48 + ;; 6-typing.watsup:931.1-932.48 rule vnarrow{C : context, sh_1 : ishape, sh_2 : ishape, sx : sx}: `%|-%:%`(C, VNARROW_instr(sh_1, sh_2, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:935.1-936.62 + ;; 6-typing.watsup:934.1-935.62 rule vcvtop{C : context, sh_1 : shape, sh_2 : shape, vcvtop : vcvtop_(sh_2, sh_1), half? : half_(sh_2, sh_1)?, sx? : sx?, zero? : zero_(sh_2, sh_1)?}: `%|-%:%`(C, VCVTOP_instr(sh_1, sh_2, vcvtop, half?{half : half_(sh_2, sh_1)}, sx?{sx : sx}, zero?{zero : zero_(sh_2, sh_1)}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:941.1-943.28 + ;; 6-typing.watsup:940.1-942.28 rule local.get{C : context, x : idx, t : valtype}: `%|-%:%`(C, LOCAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(SET_init, t)) - ;; 6-typing.watsup:945.1-947.29 + ;; 6-typing.watsup:944.1-946.29 rule local.set{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:949.1-951.29 + ;; 6-typing.watsup:948.1-950.29 rule local.tee{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.TEE_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([t]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:956.1-958.29 + ;; 6-typing.watsup:955.1-957.29 rule global.get{C : context, x : idx, t : valtype, mut : mut}: `%|-%:%`(C, GLOBAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(mut, t)) - ;; 6-typing.watsup:960.1-962.29 + ;; 6-typing.watsup:959.1-961.29 rule global.set{C : context, x : idx, t : valtype}: `%|-%:%`(C, GLOBAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(`MUT%?`_mut(?(())), t)) - ;; 6-typing.watsup:967.1-969.29 + ;; 6-typing.watsup:966.1-968.29 rule table.get{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:971.1-973.29 + ;; 6-typing.watsup:970.1-972.29 rule table.set{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype)]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:975.1-977.29 + ;; 6-typing.watsup:974.1-976.29 rule table.size{C : context, x : idx, lim : limits, rt : reftype}: `%|-%:%`(C, TABLE.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:979.1-981.29 + ;; 6-typing.watsup:978.1-980.29 rule table.grow{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([(rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:983.1-985.29 + ;; 6-typing.watsup:982.1-984.29 rule table.fill{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:987.1-991.36 + ;; 6-typing.watsup:986.1-990.36 rule table.copy{C : context, x_1 : idx, x_2 : idx, lim_1 : limits, rt_1 : reftype, lim_2 : limits, rt_2 : reftype}: `%|-%:%`(C, TABLE.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x_1!`%`_idx.0] = `%%`_tabletype(lim_1, rt_1)) -- if (C.TABLES_context[x_2!`%`_idx.0] = `%%`_tabletype(lim_2, rt_2)) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:993.1-997.36 + ;; 6-typing.watsup:992.1-996.36 rule table.init{C : context, x : idx, y : idx, lim : limits, rt_1 : reftype, rt_2 : reftype}: `%|-%:%`(C, TABLE.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt_1)) -- if (C.ELEMS_context[y!`%`_idx.0] = rt_2) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:999.1-1001.24 + ;; 6-typing.watsup:998.1-1000.24 rule elem.drop{C : context, x : idx, rt : reftype}: `%|-%:%`(C, ELEM.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (C.ELEMS_context[x!`%`_idx.0] = rt) - ;; 6-typing.watsup:1006.1-1008.23 + ;; 6-typing.watsup:1005.1-1007.23 rule memory.size{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1010.1-1012.23 + ;; 6-typing.watsup:1009.1-1011.23 rule memory.grow{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1014.1-1016.23 + ;; 6-typing.watsup:1013.1-1015.23 rule memory.fill{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1018.1-1021.27 + ;; 6-typing.watsup:1017.1-1020.27 rule memory.copy{C : context, x_1 : idx, x_2 : idx, mt_1 : memtype, mt_2 : memtype}: `%|-%:%`(C, MEMORY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x_1!`%`_idx.0] = mt_1) -- if (C.MEMS_context[x_2!`%`_idx.0] = mt_2) - ;; 6-typing.watsup:1023.1-1026.24 + ;; 6-typing.watsup:1022.1-1025.24 rule memory.init{C : context, x : idx, y : idx, mt : memtype}: `%|-%:%`(C, MEMORY.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1028.1-1030.24 + ;; 6-typing.watsup:1027.1-1029.24 rule data.drop{C : context, x : idx}: `%|-%:%`(C, DATA.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (C.DATAS_context[x!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1041.1-1044.43 + ;; 6-typing.watsup:1040.1-1043.43 rule load-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(nt : numtype <: valtype)]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1046.1-1049.35 + ;; 6-typing.watsup:1045.1-1048.35 rule load-pack{C : context, Inn : Inn, M : M, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr((Inn : Inn <: numtype), ?(`%%`_loadop_(`%`_sz(M), sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(Inn : Inn <: valtype)]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1060.1-1063.43 + ;; 6-typing.watsup:1059.1-1062.43 rule store-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (nt : numtype <: valtype)]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1065.1-1068.35 + ;; 6-typing.watsup:1064.1-1067.35 rule store-pack{C : context, Inn : Inn, M : M, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr((Inn : Inn <: numtype), ?(`%`_sz(M)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (Inn : Inn <: valtype)]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1070.1-1073.46 + ;; 6-typing.watsup:1069.1-1072.46 rule vload-val{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1075.1-1078.39 + ;; 6-typing.watsup:1074.1-1077.39 rule vload-pack{C : context, M : M, N : N, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(`SHAPE%X%%`_vloadop_(`%`_sz(M), N, sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ((M / 8) * N)) - ;; 6-typing.watsup:1080.1-1083.35 + ;; 6-typing.watsup:1079.1-1082.35 rule vload-splat{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(SPLAT_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1085.1-1088.35 + ;; 6-typing.watsup:1084.1-1087.35 rule vload-zero{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(ZERO_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1090.1-1094.21 + ;; 6-typing.watsup:1089.1-1093.21 rule vload_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VLOAD_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) - ;; 6-typing.watsup:1096.1-1099.46 + ;; 6-typing.watsup:1095.1-1098.46 rule vstore{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VSTORE_instr(V128_vectype, x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1101.1-1105.21 + ;; 6-typing.watsup:1100.1-1104.21 rule vstore_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VSTORE_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) -;; 6-typing.watsup:524.1-524.96 +;; 6-typing.watsup:523.1-523.96 relation Instrs_ok: `%|-%:%`(context, instr*, instrtype) - ;; 6-typing.watsup:537.1-538.24 + ;; 6-typing.watsup:536.1-537.24 rule empty{C : context}: `%|-%:%`(C, [], `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:541.1-545.82 + ;; 6-typing.watsup:540.1-544.82 rule seq{C : context, instr_1 : instr, instr_2* : instr*, t_1* : valtype*, x_1* : idx*, x_2* : idx*, t_3* : valtype*, t_2* : valtype*, init* : init*, t* : valtype*}: `%|-%:%`(C, [instr_1] :: instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx} :: x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) -- Instr_ok: `%|-%:%`(C, instr_1, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- (if (C.LOCALS_context[x_1!`%`_idx.0] = `%%`_localtype(init, t)))*{init : init, t : valtype, x_1 : idx} -- Instrs_ok: `%|-%:%`($with_locals(C, x_1*{x_1 : localidx}, `%%`_localtype(SET_init, t)*{t : valtype}), instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_2*{t_2 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) - ;; 6-typing.watsup:547.1-551.33 + ;; 6-typing.watsup:546.1-550.33 rule sub{C : context, instr* : instr*, it' : instrtype, it : instrtype}: `%|-%:%`(C, instr*{instr : instr}, it') -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, it) -- Instrtype_sub: `%|-%<:%`(C, it, it') -- Instrtype_ok: `%|-%:OK`(C, it') - ;; 6-typing.watsup:554.1-557.33 + ;; 6-typing.watsup:553.1-556.33 rule frame{C : context, instr* : instr*, t* : valtype*, t_1* : valtype*, x* : idx*, t_2* : valtype*}: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t*{t : valtype} :: t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) @@ -4872,13 +4872,13 @@ relation Export_ok: `%|-%:%`(context, export, externtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1297.1-1297.100 +;; 6-typing.watsup:1296.1-1296.100 relation Globals_ok: `%|-%:%`(context, global*, globaltype*) - ;; 6-typing.watsup:1339.1-1340.17 + ;; 6-typing.watsup:1338.1-1339.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1342.1-1345.54 + ;; 6-typing.watsup:1341.1-1344.54 rule cons{C : context, global_1 : global, global : global, gt_1 : globaltype, gt* : globaltype*}: `%|-%:%`(C, [global_1] :: global*{}, [gt_1] :: gt*{gt : globaltype}) -- Global_ok: `%|-%:%`(C, global, gt_1) @@ -4888,13 +4888,13 @@ relation Globals_ok: `%|-%:%`(context, global*, globaltype*) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1296.1-1296.98 +;; 6-typing.watsup:1295.1-1295.98 relation Types_ok: `%|-%:%`(context, type*, deftype*) - ;; 6-typing.watsup:1331.1-1332.17 + ;; 6-typing.watsup:1330.1-1331.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1334.1-1337.49 + ;; 6-typing.watsup:1333.1-1336.49 rule cons{C : context, type_1 : type, type* : type*, dt_1* : deftype*, dt* : deftype*}: `%|-%:%`(C, [type_1] :: type*{type : type}, dt_1*{dt_1 : deftype} :: dt*{dt : deftype}) -- Type_ok: `%|-%:%`(C, type_1, dt_1*{dt_1 : deftype}) diff --git a/spectec/test-latex/TEST.md b/spectec/test-latex/TEST.md index e1b4e6e105..3a2ed0ae60 100644 --- a/spectec/test-latex/TEST.md +++ b/spectec/test-latex/TEST.md @@ -32,6 +32,158 @@ $$ \vspace{1ex} +$$ +\begin{array}{@{}lrrl@{}l@{}} +& {\mathit{InfixArrow}} &::=& {\mathbb{N}^\ast} \rightarrow_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\mathit{InfixArrow{\kern-0.1em\scriptstyle 2}}} &::=& {\mathbb{N}^\ast} \Rightarrow_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\mathit{AtomArrow}} &::=& {\mathbb{N}^?}~{\rightarrow}_{{\mathbb{N}^\ast}}\,{\mathbb{N}^\ast} \\ +& {\mathit{AtomArrow{\kern-0.1em\scriptstyle 2}}} &::=& {\mathbb{N}^?}~{\Rightarrow}_{{\mathbb{N}^\ast}}\,{\mathbb{N}^\ast} \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{InfixArrow}}(a \rightarrow_{c} {}) &=& 0 \\ +{\mathrm{InfixArrow}}(a \rightarrow_{c} b) &=& 0 \\ +{\mathrm{InfixArrow}}(a \rightarrow_{{c^\ast}} b) &=& 0 \\ +{\mathrm{InfixArrow}}(a \rightarrow_{c} b_1~b_2) &=& 0 \\ +{\mathrm{InfixArrow}}(a \rightarrow_{{c^\ast}} b_1~b_2) &=& 0 \\ +{\mathrm{InfixArrow}}(a \rightarrow_{c_1~c_2} b_1~b_2) &=& 0 \\ +{\mathrm{InfixArrow}}({\rightarrow}_{c_1~c_2} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{InfixArrow{\kern-0.1em\scriptstyle 2}}}(a \Rightarrow_{c} {}) &=& 0 \\ +{\mathrm{InfixArrow{\kern-0.1em\scriptstyle 2}}}(a \Rightarrow_{c} b) &=& 0 \\ +{\mathrm{InfixArrow{\kern-0.1em\scriptstyle 2}}}(a \Rightarrow_{{c^\ast}} b) &=& 0 \\ +{\mathrm{InfixArrow{\kern-0.1em\scriptstyle 2}}}(a \Rightarrow_{c} b_1~b_2) &=& 0 \\ +{\mathrm{InfixArrow{\kern-0.1em\scriptstyle 2}}}(a \Rightarrow_{{c^\ast}} b_1~b_2) &=& 0 \\ +{\mathrm{InfixArrow{\kern-0.1em\scriptstyle 2}}}(a \Rightarrow_{c_1~c_2} b_1~b_2) &=& 0 \\ +{\mathrm{InfixArrow{\kern-0.1em\scriptstyle 2}}}({\Rightarrow}_{c_1~c_2} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{AtomArrow}}(a~{\rightarrow}_{c}) &=& 0 \\ +{\mathrm{AtomArrow}}(a~{\rightarrow}_{c}\,b) &=& 0 \\ +{\mathrm{AtomArrow}}(a~{\rightarrow}_{{c^\ast}}\,b) &=& 0 \\ +{\mathrm{AtomArrow}}(a~{\rightarrow}_{c}\,b_1~b_2) &=& 0 \\ +{\mathrm{AtomArrow}}(a~{\rightarrow}_{{c^\ast}}\,b_1~b_2) &=& 0 \\ +{\mathrm{AtomArrow}}(a~{\rightarrow}_{c_1~c_2}\,b_1~b_2) &=& 0 \\ +{\mathrm{AtomArrow}}({\rightarrow}_{c_1~c_2}\,b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{AtomArrow{\kern-0.1em\scriptstyle 2}}}(a~{\Rightarrow}_{c}) &=& 0 \\ +{\mathrm{AtomArrow{\kern-0.1em\scriptstyle 2}}}(a~{\Rightarrow}_{c}\,b) &=& 0 \\ +{\mathrm{AtomArrow{\kern-0.1em\scriptstyle 2}}}(a~{\Rightarrow}_{{c^\ast}}\,b) &=& 0 \\ +{\mathrm{AtomArrow{\kern-0.1em\scriptstyle 2}}}(a~{\Rightarrow}_{c}\,b_1~b_2) &=& 0 \\ +{\mathrm{AtomArrow{\kern-0.1em\scriptstyle 2}}}(a~{\Rightarrow}_{{c^\ast}}\,b_1~b_2) &=& 0 \\ +{\mathrm{AtomArrow{\kern-0.1em\scriptstyle 2}}}(a~{\Rightarrow}_{c_1~c_2}\,b_1~b_2) &=& 0 \\ +{\mathrm{AtomArrow{\kern-0.1em\scriptstyle 2}}}({\Rightarrow}_{c_1~c_2}\,b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lrrl@{}l@{}} +& {\mathit{MacroInfixArrow}} &::=& {\mathbb{N}^\ast} \rightarrow_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\mathit{MacroAtomArrow}} &::=& {\mathbb{N}^\ast} \rightarrow_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{MacroInfixArrow}}(a \rightarrow_{c} {}) &=& 0 \\ +{\mathrm{MacroInfixArrow}}(a \rightarrow_{c} b) &=& 0 \\ +{\mathrm{MacroInfixArrow}}(a \rightarrow_{{c^\ast}} b) &=& 0 \\ +{\mathrm{MacroInfixArrow}}(a \rightarrow_{c} b_1~b_2) &=& 0 \\ +{\mathrm{MacroInfixArrow}}(a \rightarrow_{{c^\ast}} b_1~b_2) &=& 0 \\ +{\mathrm{MacroInfixArrow}}(a \rightarrow_{c_1~c_2} b_1~b_2) &=& 0 \\ +{\mathrm{MacroInfixArrow}}({\rightarrow}_{c_1~c_2} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{MacroAtomArrow}}(a \rightarrow_{c} {}) &=& 0 \\ +{\mathrm{MacroAtomArrow}}(a \rightarrow_{c} b) &=& 0 \\ +{\mathrm{MacroAtomArrow}}(a \rightarrow_{{c^\ast}} b) &=& 0 \\ +{\mathrm{MacroAtomArrow}}(a \rightarrow_{c} b_1~b_2) &=& 0 \\ +{\mathrm{MacroAtomArrow}}(a \rightarrow_{{c^\ast}} b_1~b_2) &=& 0 \\ +{\mathrm{MacroAtomArrow}}(a \rightarrow_{c_1~c_2} b_1~b_2) &=& 0 \\ +{\mathrm{MacroAtomArrow}}({\rightarrow}_{c_1~c_2} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lrrl@{}l@{}} +& {\mathit{ShowInfixArrow}} &::=& {\mathbb{N}^\ast} \rightarrow_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\mathit{ShowAtomArrow}} &::=& {\mathbb{N}^\ast}~{\rightarrow}_{{\mathbb{N}^\ast}}\,{\mathbb{N}^\ast} \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{ShowInfixArrow}}(a \rightarrow_{c} ) &=& 0 \\ +{\mathrm{ShowInfixArrow}}(a \rightarrow_{c} b) &=& 0 \\ +{\mathrm{ShowInfixArrow}}(a \rightarrow_{({c^\ast})} b) &=& 0 \\ +{\mathrm{ShowInfixArrow}}(a \rightarrow_{c} b_1~b_2) &=& 0 \\ +{\mathrm{ShowInfixArrow}}(a \rightarrow_{({c^\ast})} b_1~b_2) &=& 0 \\ +{\mathrm{ShowInfixArrow}}(a \rightarrow_{(c_1~c_2)} b_1~b_2) &=& 0 \\ +{\mathrm{ShowInfixArrow}}({\rightarrow}_{(c_1~c_2)} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{ShowAtomArrow}}(a~{\rightarrow}_{c}) &=& 0 \\ +{\mathrm{ShowAtomArrow}}(a~{\rightarrow}_{c}\,b) &=& 0 \\ +{\mathrm{ShowAtomArrow}}(a~{\rightarrow}_{({c^\ast})}\,b) &=& 0 \\ +{\mathrm{ShowAtomArrow}}(a~{\rightarrow}_{c}\,b_1~b_2) &=& 0 \\ +{\mathrm{ShowAtomArrow}}(a~{\rightarrow}_{({c^\ast})}\,b_1~b_2) &=& 0 \\ +{\mathrm{ShowAtomArrow}}(a~{\rightarrow}_{(c_1~c_2)}\,b_1~b_2) &=& 0 \\ +{\mathrm{ShowAtomArrow}}({\rightarrow}_{(c_1~c_2)}\,b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lrrl@{}l@{}} +& {\mathit{ShowMacroInfixArrow}} &::=& {\mathbb{N}^\ast} \rightarrow_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\mathit{ShowMacroAtomArrow}} &::=& {\mathbb{N}^\ast}~{\rightarrow}_{{\mathbb{N}^\ast}}\,{\mathbb{N}^\ast} \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{ShowMacroInfixArrow}}(a \rightarrow_{c} ) &=& 0 \\ +{\mathrm{ShowMacroInfixArrow}}(a \rightarrow_{c} b) &=& 0 \\ +{\mathrm{ShowMacroInfixArrow}}(a \rightarrow_{({c^\ast})} b) &=& 0 \\ +{\mathrm{ShowMacroInfixArrow}}(a \rightarrow_{c} b_1~b_2) &=& 0 \\ +{\mathrm{ShowMacroInfixArrow}}(a \rightarrow_{({c^\ast})} b_1~b_2) &=& 0 \\ +{\mathrm{ShowMacroInfixArrow}}(a \rightarrow_{(c_1~c_2)} b_1~b_2) &=& 0 \\ +{\mathrm{ShowMacroInfixArrow}}({\rightarrow}_{(c_1~c_2)} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\mathrm{ShowMacroAtomArrow}}(a~{\rightarrow}_{c}) &=& 0 \\ +{\mathrm{ShowMacroAtomArrow}}(a~{\rightarrow}_{c}\,b) &=& 0 \\ +{\mathrm{ShowMacroAtomArrow}}(a~{\rightarrow}_{({c^\ast})}\,b) &=& 0 \\ +{\mathrm{ShowMacroAtomArrow}}(a~{\rightarrow}_{c}\,b_1~b_2) &=& 0 \\ +{\mathrm{ShowMacroAtomArrow}}(a~{\rightarrow}_{({c^\ast})}\,b_1~b_2) &=& 0 \\ +{\mathrm{ShowMacroAtomArrow}}(a~{\rightarrow}_{(c_1~c_2)}\,b_1~b_2) &=& 0 \\ +{\mathrm{ShowMacroAtomArrow}}({\rightarrow}_{(c_1~c_2)}\,b_1~b_2) &=& 0 \\ +\end{array} +$$ + +\vspace{1ex} + \vspace{1ex} $$ @@ -663,6 +815,158 @@ $$ \vspace{1ex} +$$ +\begin{array}{@{}lrrl@{}l@{}} +& {\InfixArrow} &::=& {\mathbb{N}^\ast} \rightarrow_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\InfixArrow2} &::=& {\mathbb{N}^\ast} \Rightarrow_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\AtomArrow} &::=& {\mathbb{N}^?}~{\rightarrow}_{{\mathbb{N}^\ast}}\,{\mathbb{N}^\ast} \\ +& {\AtomArrow2} &::=& {\mathbb{N}^?}~{\Rightarrow}_{{\mathbb{N}^\ast}}\,{\mathbb{N}^\ast} \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\InfixArrow}(a \rightarrow_{c} {}) &=& 0 \\ +{\InfixArrow}(a \rightarrow_{c} b) &=& 0 \\ +{\InfixArrow}(a \rightarrow_{{c^\ast}} b) &=& 0 \\ +{\InfixArrow}(a \rightarrow_{c} b_1~b_2) &=& 0 \\ +{\InfixArrow}(a \rightarrow_{{c^\ast}} b_1~b_2) &=& 0 \\ +{\InfixArrow}(a \rightarrow_{c_1~c_2} b_1~b_2) &=& 0 \\ +{\InfixArrow}({\rightarrow}_{c_1~c_2} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\InfixArrow2}(a \Rightarrow_{c} {}) &=& 0 \\ +{\InfixArrow2}(a \Rightarrow_{c} b) &=& 0 \\ +{\InfixArrow2}(a \Rightarrow_{{c^\ast}} b) &=& 0 \\ +{\InfixArrow2}(a \Rightarrow_{c} b_1~b_2) &=& 0 \\ +{\InfixArrow2}(a \Rightarrow_{{c^\ast}} b_1~b_2) &=& 0 \\ +{\InfixArrow2}(a \Rightarrow_{c_1~c_2} b_1~b_2) &=& 0 \\ +{\InfixArrow2}({\Rightarrow}_{c_1~c_2} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\AtomArrow}(a~{\rightarrow}_{c}) &=& 0 \\ +{\AtomArrow}(a~{\rightarrow}_{c}\,b) &=& 0 \\ +{\AtomArrow}(a~{\rightarrow}_{{c^\ast}}\,b) &=& 0 \\ +{\AtomArrow}(a~{\rightarrow}_{c}\,b_1~b_2) &=& 0 \\ +{\AtomArrow}(a~{\rightarrow}_{{c^\ast}}\,b_1~b_2) &=& 0 \\ +{\AtomArrow}(a~{\rightarrow}_{c_1~c_2}\,b_1~b_2) &=& 0 \\ +{\AtomArrow}({\rightarrow}_{c_1~c_2}\,b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\AtomArrow2}(a~{\Rightarrow}_{c}) &=& 0 \\ +{\AtomArrow2}(a~{\Rightarrow}_{c}\,b) &=& 0 \\ +{\AtomArrow2}(a~{\Rightarrow}_{{c^\ast}}\,b) &=& 0 \\ +{\AtomArrow2}(a~{\Rightarrow}_{c}\,b_1~b_2) &=& 0 \\ +{\AtomArrow2}(a~{\Rightarrow}_{{c^\ast}}\,b_1~b_2) &=& 0 \\ +{\AtomArrow2}(a~{\Rightarrow}_{c_1~c_2}\,b_1~b_2) &=& 0 \\ +{\AtomArrow2}({\Rightarrow}_{c_1~c_2}\,b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lrrl@{}l@{}} +& {\MacroInfixArrow} &::=& {\mathbb{N}^\ast} \to_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\MacroAtomArrow} &::=& {\mathbb{N}^\ast} \to_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\MacroInfixArrow}(a \to_{c} {}) &=& 0 \\ +{\MacroInfixArrow}(a \to_{c} b) &=& 0 \\ +{\MacroInfixArrow}(a \to_{{c^\ast}} b) &=& 0 \\ +{\MacroInfixArrow}(a \to_{c} b_1~b_2) &=& 0 \\ +{\MacroInfixArrow}(a \to_{{c^\ast}} b_1~b_2) &=& 0 \\ +{\MacroInfixArrow}(a \to_{c_1~c_2} b_1~b_2) &=& 0 \\ +{\MacroInfixArrow}({\to}_{c_1~c_2} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\MacroAtomArrow}(a \to_{c} {}) &=& 0 \\ +{\MacroAtomArrow}(a \to_{c} b) &=& 0 \\ +{\MacroAtomArrow}(a \to_{{c^\ast}} b) &=& 0 \\ +{\MacroAtomArrow}(a \to_{c} b_1~b_2) &=& 0 \\ +{\MacroAtomArrow}(a \to_{{c^\ast}} b_1~b_2) &=& 0 \\ +{\MacroAtomArrow}(a \to_{c_1~c_2} b_1~b_2) &=& 0 \\ +{\MacroAtomArrow}({\to}_{c_1~c_2} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lrrl@{}l@{}} +& {\ShowInfixArrow} &::=& {\mathbb{N}^\ast} \rightarrow_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\ShowAtomArrow} &::=& {\mathbb{N}^\ast}~{\rightarrow}_{{\mathbb{N}^\ast}}\,{\mathbb{N}^\ast} \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\ShowInfixArrow}(a \rightarrow_{c} ) &=& 0 \\ +{\ShowInfixArrow}(a \rightarrow_{c} b) &=& 0 \\ +{\ShowInfixArrow}(a \rightarrow_{({c^\ast})} b) &=& 0 \\ +{\ShowInfixArrow}(a \rightarrow_{c} b_1~b_2) &=& 0 \\ +{\ShowInfixArrow}(a \rightarrow_{({c^\ast})} b_1~b_2) &=& 0 \\ +{\ShowInfixArrow}(a \rightarrow_{(c_1~c_2)} b_1~b_2) &=& 0 \\ +{\ShowInfixArrow}({\rightarrow}_{(c_1~c_2)} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\ShowAtomArrow}(a~{\rightarrow}_{c}) &=& 0 \\ +{\ShowAtomArrow}(a~{\rightarrow}_{c}\,b) &=& 0 \\ +{\ShowAtomArrow}(a~{\rightarrow}_{({c^\ast})}\,b) &=& 0 \\ +{\ShowAtomArrow}(a~{\rightarrow}_{c}\,b_1~b_2) &=& 0 \\ +{\ShowAtomArrow}(a~{\rightarrow}_{({c^\ast})}\,b_1~b_2) &=& 0 \\ +{\ShowAtomArrow}(a~{\rightarrow}_{(c_1~c_2)}\,b_1~b_2) &=& 0 \\ +{\ShowAtomArrow}({\rightarrow}_{(c_1~c_2)}\,b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lrrl@{}l@{}} +& {\ShowMacroInfixArrow} &::=& {\mathbb{N}^\ast} \to_{{\mathbb{N}^\ast}} {\mathbb{N}^\ast} \\ +& {\ShowMacroAtomArrow} &::=& {\mathbb{N}^\ast}~{\to}_{{\mathbb{N}^\ast}}\,{\mathbb{N}^\ast} \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\ShowMacroInfixArrow}(a \to_{c} ) &=& 0 \\ +{\ShowMacroInfixArrow}(a \to_{c} b) &=& 0 \\ +{\ShowMacroInfixArrow}(a \to_{({c^\ast})} b) &=& 0 \\ +{\ShowMacroInfixArrow}(a \to_{c} b_1~b_2) &=& 0 \\ +{\ShowMacroInfixArrow}(a \to_{({c^\ast})} b_1~b_2) &=& 0 \\ +{\ShowMacroInfixArrow}(a \to_{(c_1~c_2)} b_1~b_2) &=& 0 \\ +{\ShowMacroInfixArrow}({\to}_{(c_1~c_2)} b_1~b_2) &=& 0 \\ +\end{array} +$$ + +$$ +\begin{array}{@{}lcl@{}l@{}} +{\ShowMacroAtomArrow}(a~{\to}_{c}) &=& 0 \\ +{\ShowMacroAtomArrow}(a~{\to}_{c}\,b) &=& 0 \\ +{\ShowMacroAtomArrow}(a~{\to}_{({c^\ast})}\,b) &=& 0 \\ +{\ShowMacroAtomArrow}(a~{\to}_{c}\,b_1~b_2) &=& 0 \\ +{\ShowMacroAtomArrow}(a~{\to}_{({c^\ast})}\,b_1~b_2) &=& 0 \\ +{\ShowMacroAtomArrow}(a~{\to}_{(c_1~c_2)}\,b_1~b_2) &=& 0 \\ +{\ShowMacroAtomArrow}({\to}_{(c_1~c_2)}\,b_1~b_2) &=& 0 \\ +\end{array} +$$ + +\vspace{1ex} + \vspace{1ex} $$ @@ -1299,8 +1603,8 @@ $$ $$ \begin{array}{@{}lcl@{}l@{}} -{ \Sigma }\;\epsilon &=& 0 \\ -{ \Sigma }\;n~{{n'}^\ast} &=& n + { \Sigma }\;{{n'}^\ast} \\ +{\Sigma}\, \epsilon &=& 0 \\ +{\Sigma}\, n~{{n'}^\ast} &=& n + {\Sigma}\, {{n'}^\ast} \\ \end{array} $$ @@ -1308,8 +1612,8 @@ $$ $$ \begin{array}{@{}lcl@{}l@{}} -{ \bigoplus }\;\epsilon &=& \epsilon \\ -{ \bigoplus }\;({w^\ast})~{({{w'}^\ast})^\ast} &=& {w^\ast}~{ \bigoplus }\;{({{w'}^\ast})^\ast} \\ +{\bigoplus}\, \epsilon &=& \epsilon \\ +{\bigoplus}\, ({w^\ast})~{({{w'}^\ast})^\ast} &=& {w^\ast}~{\bigoplus}\, {({{w'}^\ast})^\ast} \\ \end{array} $$ @@ -2917,32 +3221,32 @@ $$ $$ \begin{array}{@{}lcl@{}l@{}} -{t}{{}[ { := }\;{{\mathit{tu}}^{n}} ]} &=& {t}{{}[ {i^{i {|z{.}\mathsf{datas}{}[y]{.}\mathsf{bytes}|}} \\ {[\textsc{\scriptsize E{-}array.new\_data{-}num}]} \quad & z ; (\mathsf{i{\scriptstyle 32}}{.}\mathsf{const}~i)~(\mathsf{i{\scriptstyle 32}}{.}\mathsf{const}~n)~(\mathsf{array{.}new\_data}~x~y) &\hookrightarrow& \multicolumn{2}{l@{}}{ {({\mathrm{unpack}}({\mathit{zt}}){.}\mathsf{const}~{{\mathrm{unpack}}}_{{\mathit{zt}}}(c))^{n}}~(\mathsf{array{.}new\_fixed}~x~n) } \\ &&& \multicolumn{2}{l@{}}{\quad \mbox{if}~z{.}\mathsf{types}{}[x] \approx \mathsf{array}~({\mathsf{mut}^?}~{\mathit{zt}})} \\ - &&& \multicolumn{2}{l@{}}{\quad {\land}~{ \bigoplus }\;{{{\mathrm{bytes}}}_{{\mathit{zt}}}(c)^{n}} = z{.}\mathsf{datas}{}[y]{.}\mathsf{bytes}{}[i : n \cdot {|{\mathit{zt}}|} / 8]} \\ + &&& \multicolumn{2}{l@{}}{\quad {\land}~{\bigoplus}\, {{{\mathrm{bytes}}}_{{\mathit{zt}}}(c)^{n}} = z{.}\mathsf{datas}{}[y]{.}\mathsf{bytes}{}[i : n \cdot {|{\mathit{zt}}|} / 8]} \\ \end{array} $$ @@ -8451,7 +8755,7 @@ $$ {{{\mathrm{alloctype}}^\ast}}{({{\mathit{type}'}^\ast}~{\mathit{type}})} &=& {{\mathit{deftype}'}^\ast}~{{\mathit{deftype}}^\ast} &\qquad \mbox{if}~{{\mathit{deftype}'}^\ast} = {{{\mathrm{alloctype}}^\ast}}{({{\mathit{type}'}^\ast})} \\ &&&\qquad {\land}~{\mathit{type}} = \mathsf{type}~{\mathit{rectype}} \\ - &&&\qquad {\land}~{{\mathit{deftype}}^\ast} = {{{{{\mathrm{roll}}}_{x}^\ast}}{({\mathit{rectype}})}}{{}[ { := }\;{{\mathit{deftype}'}^\ast} ]} \\ + &&&\qquad {\land}~{{\mathit{deftype}}^\ast} = {{{{{\mathrm{roll}}}_{x}^\ast}}{({\mathit{rectype}})}}{{}[ {:=}\, {{\mathit{deftype}'}^\ast} ]} \\ &&&\qquad {\land}~x = {|{{\mathit{deftype}'}^\ast}|} \\ \end{array} $$ @@ -8661,8 +8965,8 @@ $$ \multicolumn{4}{@{}l@{}}{\qquad\quad {\land}~({s'}, {\mathit{moduleinst}}) = {\mathrm{allocmodule}}(s, {\mathit{module}}, {{\mathit{externval}}^\ast}, {{\mathit{val}}_{\mathsf{g}}^\ast}, {{\mathit{ref}}_{\mathsf{t}}^\ast}, {({{\mathit{ref}}_{\mathsf{e}}^\ast})^\ast})} \\ \multicolumn{4}{@{}l@{}}{\qquad\quad {\land}~f = \{ \begin{array}[t]{@{}l@{}} \mathsf{module}~{\mathit{moduleinst}} \}\end{array}} \\ - \multicolumn{4}{@{}l@{}}{\qquad\quad {\land}~{{\mathit{instr}}_{\mathsf{e}}^\ast} = { \bigoplus }\;{{{\mathrm{runelem}}}_{i_{\mathsf{e}}}({{\mathit{elem}}^\ast}{}[i_{\mathsf{e}}])^{i_{\mathsf{e}}<{|{{\mathit{elem}}^\ast}|}}}} \\ - \multicolumn{4}{@{}l@{}}{\qquad\quad {\land}~{{\mathit{instr}}_{\mathsf{d}}^\ast} = { \bigoplus }\;{{{\mathrm{rundata}}}_{i_{\mathsf{d}}}({{\mathit{data}}^\ast}{}[i_{\mathsf{d}}])^{i_{\mathsf{d}}<{|{{\mathit{data}}^\ast}|}}}} \\ + \multicolumn{4}{@{}l@{}}{\qquad\quad {\land}~{{\mathit{instr}}_{\mathsf{e}}^\ast} = {\bigoplus}\, {{{\mathrm{runelem}}}_{i_{\mathsf{e}}}({{\mathit{elem}}^\ast}{}[i_{\mathsf{e}}])^{i_{\mathsf{e}}<{|{{\mathit{elem}}^\ast}|}}}} \\ + \multicolumn{4}{@{}l@{}}{\qquad\quad {\land}~{{\mathit{instr}}_{\mathsf{d}}^\ast} = {\bigoplus}\, {{{\mathrm{rundata}}}_{i_{\mathsf{d}}}({{\mathit{data}}^\ast}{}[i_{\mathsf{d}}])^{i_{\mathsf{d}}<{|{{\mathit{data}}^\ast}|}}}} \\ \multicolumn{4}{@{}l@{}}{\qquad\quad {\land}~{{\mathit{instr}}_{\mathsf{s}}^?} = {(\mathsf{call}~x)^?}} \\ \end{array} $$ @@ -8739,7 +9043,7 @@ $$ $$ \begin{array}{@{}lcl@{}l@{}} -{\mathrm{utf{\kern-0.1em\scriptstyle 8}}}({{\mathit{ch}}^\ast}) &=& { \bigoplus }\;{{\mathrm{utf{\kern-0.1em\scriptstyle 8}}}({\mathit{ch}})^\ast} \\ +{\mathrm{utf{\kern-0.1em\scriptstyle 8}}}({{\mathit{ch}}^\ast}) &=& {\bigoplus}\, {{\mathrm{utf{\kern-0.1em\scriptstyle 8}}}({\mathit{ch}})^\ast} \\ {\mathrm{utf{\kern-0.1em\scriptstyle 8}}}({\mathit{ch}}) &=& b &\qquad \mbox{if}~{\mathit{ch}} < \mathrm{U{+}80} \\ &&&\qquad {\land}~{\mathit{ch}} = b \\ @@ -9594,8 +9898,8 @@ $$ $$ \begin{array}{@{}l@{}rrl@{}l@{}l@{}l@{}} & {\mathtt{locals}} &::=& n{:}{\mathtt{u32}}~~t{:}{\mathtt{valtype}} &\quad\Rightarrow&\quad {(\mathsf{local}~t)^{n}} \\ -& {\mathtt{func}} &::=& {{{\mathit{loc}}^\ast}^\ast}{:}{\mathtt{list}}({\mathtt{locals}})~~e{:}{\mathtt{expr}} &\quad\Rightarrow&\quad ({ \bigoplus }\;{{{\mathit{loc}}^\ast}^\ast}, e) - &\qquad \mbox{if}~{|{ \bigoplus }\;{{{\mathit{loc}}^\ast}^\ast}|} < {2^{32}} \\ +& {\mathtt{func}} &::=& {{{\mathit{loc}}^\ast}^\ast}{:}{\mathtt{list}}({\mathtt{locals}})~~e{:}{\mathtt{expr}} &\quad\Rightarrow&\quad ({\bigoplus}\, {{{\mathit{loc}}^\ast}^\ast}, e) + &\qquad \mbox{if}~{|{\bigoplus}\, {{{\mathit{loc}}^\ast}^\ast}|} < {2^{32}} \\ & {\mathtt{code}} &::=& {\mathit{len}}{:}{\mathtt{u32}}~~{\mathit{code}}{:}{\mathtt{func}} &\quad\Rightarrow&\quad {\mathit{code}} &\qquad \mbox{if}~{\mathit{len}} = ||{\mathtt{func}}|| \\ & {\mathtt{codesec}} &::=& {{\mathit{code}}^\ast}{:}{{\mathtt{section}}}_{10}({\mathtt{list}}({\mathtt{code}})) &\quad\Rightarrow&\quad {{\mathit{code}}^\ast} \\ @@ -9631,7 +9935,7 @@ $$ & {\mathtt{module}} &::=& {\mathtt{magic}}~~{\mathtt{version}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{type}}^\ast}{:}{\mathtt{typesec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{import}}^\ast}{:}{\mathtt{importsec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{typeidx}}^{n}}{:}{\mathtt{funcsec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{table}}^\ast}{:}{\mathtt{tablesec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{mem}}^\ast}{:}{\mathtt{memsec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{global}}^\ast}{:}{\mathtt{globalsec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{export}}^\ast}{:}{\mathtt{exportsec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{start}}^\ast}{:}{\mathtt{startsec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{elem}}^\ast}{:}{\mathtt{elemsec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{m'}^\ast}{:}{\mathtt{datacntsec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{({{\mathit{local}}^\ast}, {\mathit{expr}})^{n}}{:}{\mathtt{codesec}} \\ &&& {{\mathtt{customsec}}^\ast}~~{{\mathit{data}}^{m}}{:}{\mathtt{datasec}} \\ &&& {{\mathtt{customsec}}^\ast} &\quad\Rightarrow&\quad \\ &&& \multicolumn{3}{@{}l@{}}{\qquad \mathsf{module}~{{\mathit{type}}^\ast}~{{\mathit{import}}^\ast}~{{\mathit{func}}^{n}}~{{\mathit{global}}^\ast}~{{\mathit{table}}^\ast}~{{\mathit{mem}}^\ast}~{{\mathit{elem}}^\ast}~{{\mathit{data}}^{m}}~{{\mathit{start}}^\ast}~{{\mathit{export}}^\ast} } \\ &&&&& \multicolumn{2}{l@{}}{\quad \mbox{if}~{{m'}^\ast} \neq \epsilon \lor {\mathrm{dataidx}}({{\mathit{func}}^{n}}) = \epsilon} \\ - &&&&& \multicolumn{2}{l@{}}{\quad {\land}~m = { \Sigma }\;{{m'}^\ast}} \\ + &&&&& \multicolumn{2}{l@{}}{\quad {\land}~m = {\Sigma}\, {{m'}^\ast}} \\ &&&&& \multicolumn{2}{l@{}}{\quad {\land}~({\mathit{func}} = \mathsf{func}~{\mathit{typeidx}}~{{\mathit{local}}^\ast}~{\mathit{expr}})^{n}} \\ \end{array} $$ @@ -9721,7 +10025,7 @@ $$ \vspace{1ex} -$\boxed{{ \hookrightarrow }\;{{\mathit{instr}}^\ast}}$ +$\boxed{{\hookrightarrow}\, {{\mathit{instr}}^\ast}}$ $$ \begin{array}{@{}l@{}rcl@{}l@{}} diff --git a/spectec/test-latex/test.watsup b/spectec/test-latex/test.watsup index 41bf2fb269..59e5f2d85c 100644 --- a/spectec/test-latex/test.watsup +++ b/spectec/test-latex/test.watsup @@ -24,6 +24,115 @@ syntax testfuse = | QR nat nat nat hint(show QR_%#AB % %) ;; {\QR}_{...}{\AB} ... ... +;; +;; Atoms with subscripts +;; + +syntax InfixArrow = nat* ->_(nat*) nat* hint(macro none) +syntax InfixArrow2 = nat* =>_(nat*) nat* hint(macro none) +syntax AtomArrow = nat? `->_(nat*) nat* hint(macro none) +syntax AtomArrow2 = nat? `=>_(nat*) nat* hint(macro none) + +def $InfixArrow(InfixArrow) : nat +def $InfixArrow(a ->_c) = 0 +def $InfixArrow(a ->_c b) = 0 +def $InfixArrow(a ->_(c*) b) = 0 +def $InfixArrow(a ->_c b_1 b_2) = 0 +def $InfixArrow(a ->_(c*) b_1 b_2) = 0 +def $InfixArrow(a ->_(c_1 c_2) b_1 b_2) = 0 +def $InfixArrow(->_(c_1 c_2) b_1 b_2) = 0 + +def $InfixArrow2(InfixArrow2) : nat +def $InfixArrow2(a =>_c) = 0 +def $InfixArrow2(a =>_c b) = 0 +def $InfixArrow2(a =>_(c*) b) = 0 +def $InfixArrow2(a =>_c b_1 b_2) = 0 +def $InfixArrow2(a =>_(c*) b_1 b_2) = 0 +def $InfixArrow2(a =>_(c_1 c_2) b_1 b_2) = 0 +def $InfixArrow2(=>_(c_1 c_2) b_1 b_2) = 0 + +def $AtomArrow(AtomArrow) : nat +def $AtomArrow(a `->_c) = 0 +def $AtomArrow(a `->_c b) = 0 +def $AtomArrow(a `->_(c*) b) = 0 +def $AtomArrow(a `->_c b_1 b_2) = 0 +def $AtomArrow(a `->_(c*) b_1 b_2) = 0 +def $AtomArrow(a `->_(c_1 c_2) b_1 b_2) = 0 +def $AtomArrow(`->_(c_1 c_2) b_1 b_2) = 0 + +def $AtomArrow2(AtomArrow2) : nat +def $AtomArrow2(a `=>_c) = 0 +def $AtomArrow2(a `=>_c b) = 0 +def $AtomArrow2(a `=>_(c*) b) = 0 +def $AtomArrow2(a `=>_c b_1 b_2) = 0 +def $AtomArrow2(a `=>_(c*) b_1 b_2) = 0 +def $AtomArrow2(a `=>_(c_1 c_2) b_1 b_2) = 0 +def $AtomArrow2(`=>_(c_1 c_2) b_1 b_2) = 0 + +syntax MacroInfixArrow = nat* ->_nat* nat* hint(macro "to") +syntax MacroAtomArrow = nat* ->_nat* nat* hint(macro "to") + +def $MacroInfixArrow(MacroInfixArrow) : nat +def $MacroInfixArrow(a ->_c) = 0 +def $MacroInfixArrow(a ->_c b) = 0 +def $MacroInfixArrow(a ->_(c*) b) = 0 +def $MacroInfixArrow(a ->_c b_1 b_2) = 0 +def $MacroInfixArrow(a ->_(c*) b_1 b_2) = 0 +def $MacroInfixArrow(a ->_(c_1 c_2) b_1 b_2) = 0 +def $MacroInfixArrow(->_(c_1 c_2) b_1 b_2) = 0 + +def $MacroAtomArrow(MacroAtomArrow) : nat +def $MacroAtomArrow(a ->_c) = 0 +def $MacroAtomArrow(a ->_c b) = 0 +def $MacroAtomArrow(a ->_(c*) b) = 0 +def $MacroAtomArrow(a ->_c b_1 b_2) = 0 +def $MacroAtomArrow(a ->_(c*) b_1 b_2) = 0 +def $MacroAtomArrow(a ->_(c_1 c_2) b_1 b_2) = 0 +def $MacroAtomArrow(->_(c_1 c_2) b_1 b_2) = 0 + +syntax ShowInfixArrow = nat* ->_nat* nat* hint(show %0 ->_%2 %%) hint(macro none) +syntax ShowAtomArrow = nat* ->_nat* nat* hint(show %0 `->_%2 %%) hint(macro none) + +def $ShowInfixArrow(ShowInfixArrow) : nat +def $ShowInfixArrow(a ->_c) = 0 +def $ShowInfixArrow(a ->_c b) = 0 +def $ShowInfixArrow(a ->_(c*) b) = 0 +def $ShowInfixArrow(a ->_c b_1 b_2) = 0 +def $ShowInfixArrow(a ->_(c*) b_1 b_2) = 0 +def $ShowInfixArrow(a ->_(c_1 c_2) b_1 b_2) = 0 +def $ShowInfixArrow(->_(c_1 c_2) b_1 b_2) = 0 + +def $ShowAtomArrow(ShowAtomArrow) : nat +def $ShowAtomArrow(a ->_c) = 0 +def $ShowAtomArrow(a ->_c b) = 0 +def $ShowAtomArrow(a ->_(c*) b) = 0 +def $ShowAtomArrow(a ->_c b_1 b_2) = 0 +def $ShowAtomArrow(a ->_(c*) b_1 b_2) = 0 +def $ShowAtomArrow(a ->_(c_1 c_2) b_1 b_2) = 0 +def $ShowAtomArrow(->_(c_1 c_2) b_1 b_2) = 0 + +syntax ShowMacroInfixArrow = nat* ->_nat* nat* hint(show %0 ->_%2 %%) hint(macro "to") +syntax ShowMacroAtomArrow = nat* ->_nat* nat* hint(show %0 `->_%2 %%) hint(macro "to") + +def $ShowMacroInfixArrow(ShowMacroInfixArrow) : nat +def $ShowMacroInfixArrow(a ->_c) = 0 +def $ShowMacroInfixArrow(a ->_c b) = 0 +def $ShowMacroInfixArrow(a ->_(c*) b) = 0 +def $ShowMacroInfixArrow(a ->_c b_1 b_2) = 0 +def $ShowMacroInfixArrow(a ->_(c*) b_1 b_2) = 0 +def $ShowMacroInfixArrow(a ->_(c_1 c_2) b_1 b_2) = 0 +def $ShowMacroInfixArrow(->_(c_1 c_2) b_1 b_2) = 0 + +def $ShowMacroAtomArrow(ShowMacroAtomArrow) : nat +def $ShowMacroAtomArrow(a ->_c) = 0 +def $ShowMacroAtomArrow(a ->_c b) = 0 +def $ShowMacroAtomArrow(a ->_(c*) b) = 0 +def $ShowMacroAtomArrow(a ->_c b_1 b_2) = 0 +def $ShowMacroAtomArrow(a ->_(c*) b_1 b_2) = 0 +def $ShowMacroAtomArrow(a ->_(c_1 c_2) b_1 b_2) = 0 +def $ShowMacroAtomArrow(->_(c_1 c_2) b_1 b_2) = 0 + + ;; ;; Macro hints ;; diff --git a/spectec/test-middlend/TEST.md b/spectec/test-middlend/TEST.md index b1c6e7afa5..952c8f689b 100644 --- a/spectec/test-middlend/TEST.md +++ b/spectec/test-middlend/TEST.md @@ -3434,22 +3434,22 @@ syntax context = ;; 6-typing.watsup rec { -;; 6-typing.watsup:37.1-37.86 +;; 6-typing.watsup:36.1-36.86 def $with_locals(context : context, localidx*, localtype*) : context - ;; 6-typing.watsup:39.1-39.34 + ;; 6-typing.watsup:38.1-38.34 def $with_locals{C : context}(C, [], []) = C - ;; 6-typing.watsup:40.1-40.90 + ;; 6-typing.watsup:39.1-39.90 def $with_locals{C : context, x_1 : idx, x* : idx*, lct_1 : localtype, lct* : localtype*}(C, [x_1] :: x*{x : localidx}, [lct_1] :: lct*{lct : localtype}) = $with_locals(C[LOCALS_context[x_1!`%`_idx.0] = lct_1], x*{x : localidx}, lct*{lct : localtype}) } ;; 6-typing.watsup rec { -;; 6-typing.watsup:46.1-46.94 +;; 6-typing.watsup:45.1-45.94 def $clos_deftypes(deftype*) : deftype* - ;; 6-typing.watsup:53.1-53.30 + ;; 6-typing.watsup:52.1-52.30 def $clos_deftypes([]) = [] - ;; 6-typing.watsup:54.1-54.101 + ;; 6-typing.watsup:53.1-53.101 def $clos_deftypes{dt* : deftype*, dt_n : deftype, dt'* : deftype*}(dt*{dt : deftype} :: [dt_n]) = dt'*{dt' : deftype} :: [$subst_all_deftype(dt_n, (dt' : deftype <: heaptype)*{dt' : deftype})] -- if (dt'*{dt' : deftype} = $clos_deftypes(dt*{dt : deftype})) } @@ -3617,99 +3617,99 @@ relation Numtype_sub: `%|-%<:%`(context, numtype, numtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:141.1-141.107 +;; 6-typing.watsup:140.1-140.107 relation Deftype_sub: `%|-%<:%`(context, deftype, deftype) - ;; 6-typing.watsup:452.1-454.66 + ;; 6-typing.watsup:451.1-453.66 rule refl{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($clos_deftype(C, deftype_1) = $clos_deftype(C, deftype_2)) - ;; 6-typing.watsup:456.1-459.49 + ;; 6-typing.watsup:455.1-458.49 rule super{C : context, deftype_1 : deftype, deftype_2 : deftype, fin : fin, typeuse* : typeuse*, ct : comptype, i : nat}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($unrolldt(deftype_1) = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) -- Heaptype_sub: `%|-%<:%`(C, (typeuse*{typeuse : typeuse}[i] : typeuse <: heaptype), (deftype_2 : deftype <: heaptype)) -;; 6-typing.watsup:289.1-289.104 +;; 6-typing.watsup:288.1-288.104 relation Heaptype_sub: `%|-%<:%`(context, heaptype, heaptype) - ;; 6-typing.watsup:300.1-301.28 + ;; 6-typing.watsup:299.1-300.28 rule refl{C : context, heaptype : heaptype}: `%|-%<:%`(C, heaptype, heaptype) - ;; 6-typing.watsup:303.1-307.48 + ;; 6-typing.watsup:302.1-306.48 rule trans{C : context, heaptype_1 : heaptype, heaptype_2 : heaptype, heaptype' : heaptype}: `%|-%<:%`(C, heaptype_1, heaptype_2) -- Heaptype_ok: `%|-%:OK`(C, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype_1, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype', heaptype_2) - ;; 6-typing.watsup:309.1-310.17 + ;; 6-typing.watsup:308.1-309.17 rule eq-any{C : context}: `%|-%<:%`(C, EQ_heaptype, ANY_heaptype) - ;; 6-typing.watsup:312.1-313.17 + ;; 6-typing.watsup:311.1-312.17 rule i31-eq{C : context}: `%|-%<:%`(C, I31_heaptype, EQ_heaptype) - ;; 6-typing.watsup:315.1-316.20 + ;; 6-typing.watsup:314.1-315.20 rule struct-eq{C : context}: `%|-%<:%`(C, STRUCT_heaptype, EQ_heaptype) - ;; 6-typing.watsup:318.1-319.19 + ;; 6-typing.watsup:317.1-318.19 rule array-eq{C : context}: `%|-%<:%`(C, ARRAY_heaptype, EQ_heaptype) - ;; 6-typing.watsup:321.1-323.42 + ;; 6-typing.watsup:320.1-322.42 rule struct{C : context, deftype : deftype, fieldtype* : fieldtype*}: `%|-%<:%`(C, (deftype : deftype <: heaptype), STRUCT_heaptype) -- Expand: `%~~%`(deftype, STRUCT_comptype(`%`_structtype(fieldtype*{fieldtype : fieldtype}))) - ;; 6-typing.watsup:325.1-327.40 + ;; 6-typing.watsup:324.1-326.40 rule array{C : context, deftype : deftype, fieldtype : fieldtype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), ARRAY_heaptype) -- Expand: `%~~%`(deftype, ARRAY_comptype(fieldtype)) - ;; 6-typing.watsup:329.1-331.38 + ;; 6-typing.watsup:328.1-330.38 rule func{C : context, deftype : deftype, functype : functype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), FUNC_heaptype) -- Expand: `%~~%`(deftype, FUNC_comptype(functype)) - ;; 6-typing.watsup:333.1-335.46 + ;; 6-typing.watsup:332.1-334.46 rule def{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, (deftype_1 : deftype <: heaptype), (deftype_2 : deftype <: heaptype)) -- Deftype_sub: `%|-%<:%`(C, deftype_1, deftype_2) - ;; 6-typing.watsup:337.1-339.53 + ;; 6-typing.watsup:336.1-338.53 rule typeidx-l{C : context, typeidx : typeidx, heaptype : heaptype}: `%|-%<:%`(C, _IDX_heaptype(typeidx), heaptype) -- Heaptype_sub: `%|-%<:%`(C, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype), heaptype) - ;; 6-typing.watsup:341.1-343.53 + ;; 6-typing.watsup:340.1-342.53 rule typeidx-r{C : context, heaptype : heaptype, typeidx : typeidx}: `%|-%<:%`(C, heaptype, _IDX_heaptype(typeidx)) -- Heaptype_sub: `%|-%<:%`(C, heaptype, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype)) - ;; 6-typing.watsup:345.1-347.40 + ;; 6-typing.watsup:344.1-346.40 rule rec{C : context, i : nat, typeuse* : typeuse*, j : nat, fin : fin, ct : comptype}: `%|-%<:%`(C, REC_heaptype(i), (typeuse*{typeuse : typeuse}[j] : typeuse <: heaptype)) -- if (C.RECS_context[i] = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) - ;; 6-typing.watsup:349.1-351.40 + ;; 6-typing.watsup:348.1-350.40 rule none{C : context, heaptype : heaptype}: `%|-%<:%`(C, NONE_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, ANY_heaptype) - ;; 6-typing.watsup:353.1-355.41 + ;; 6-typing.watsup:352.1-354.41 rule nofunc{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOFUNC_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, FUNC_heaptype) - ;; 6-typing.watsup:357.1-359.43 + ;; 6-typing.watsup:356.1-358.43 rule noextern{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOEXTERN_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, EXTERN_heaptype) - ;; 6-typing.watsup:361.1-362.23 + ;; 6-typing.watsup:360.1-361.23 rule bot{C : context, heaptype : heaptype}: `%|-%<:%`(C, BOT_heaptype, heaptype) } @@ -3853,13 +3853,13 @@ relation Subtype_ok2: `%|-%:%`(context, subtype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:136.1-136.105 +;; 6-typing.watsup:135.1-135.105 relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) - ;; 6-typing.watsup:214.1-215.24 + ;; 6-typing.watsup:213.1-214.24 rule empty{C : context, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidxnat(x, i)) - ;; 6-typing.watsup:217.1-220.55 + ;; 6-typing.watsup:216.1-219.55 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidxnat(x, i)) -- Subtype_ok2: `%|-%:%`(C, subtype_1, OK_oktypeidxnat(x, i)) @@ -3869,19 +3869,19 @@ relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:134.1-134.102 +;; 6-typing.watsup:133.1-133.102 relation Rectype_ok: `%|-%:%`(context, rectype, oktypeidx) - ;; 6-typing.watsup:202.1-203.23 + ;; 6-typing.watsup:201.1-202.23 rule empty{C : context, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidx(x)) - ;; 6-typing.watsup:205.1-208.48 + ;; 6-typing.watsup:204.1-207.48 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Subtype_ok: `%|-%:%`(C, subtype_1, OK_oktypeidx(x)) -- Rectype_ok: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(`%`_typeidx((x!`%`_idx.0 + 1)))) - ;; 6-typing.watsup:210.1-212.60 + ;; 6-typing.watsup:209.1-211.60 rule rec2{C : context, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Rectype_ok2: `%|-%:%`({TYPES [], RECS subtype*{subtype : subtype}, FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [], RETURN ?(), REFS []} ++ C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidxnat(x, 0)) @@ -4032,83 +4032,83 @@ relation Blocktype_ok: `%|-%:%`(context, blocktype, instrtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:523.1-523.95 +;; 6-typing.watsup:522.1-522.95 relation Instr_ok: `%|-%:%`(context, instr, instrtype) - ;; 6-typing.watsup:562.1-563.24 + ;; 6-typing.watsup:561.1-562.24 rule nop{C : context}: `%|-%:%`(C, NOP_instr, `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:565.1-567.42 + ;; 6-typing.watsup:564.1-566.42 rule unreachable{C : context, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, UNREACHABLE_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:569.1-571.29 + ;; 6-typing.watsup:568.1-570.29 rule drop{C : context, t : valtype}: `%|-%:%`(C, DROP_instr, `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:574.1-576.29 + ;; 6-typing.watsup:573.1-575.29 rule select-expl{C : context, t : valtype}: `%|-%:%`(C, `SELECT()%?`_instr(?([t])), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:578.1-582.37 + ;; 6-typing.watsup:577.1-581.37 rule select-impl{C : context, t : valtype, t' : valtype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, `SELECT()%?`_instr(?()), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) -- Valtype_sub: `%|-%<:%`(C, t, t') -- if ((t' = (numtype : numtype <: valtype)) \/ (t' = (vectype : vectype <: valtype))) - ;; 6-typing.watsup:598.1-601.67 + ;; 6-typing.watsup:597.1-600.67 rule block{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, BLOCK_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:603.1-606.67 + ;; 6-typing.watsup:602.1-605.67 rule loop{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, LOOP_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_1*{t_1 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:608.1-612.71 + ;; 6-typing.watsup:607.1-611.71 rule if{C : context, bt : blocktype, instr_1* : instr*, instr_2* : instr*, t_1* : valtype*, t_2* : valtype*, x_1* : idx*, x_2* : idx*}: `%|-%:%`(C, `IF%%ELSE%`_instr(bt, instr_1*{instr_1 : instr}, instr_2*{instr_2 : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_1*{instr_1 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:617.1-620.42 + ;; 6-typing.watsup:616.1-619.42 rule br{C : context, l : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_instr(l), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:622.1-624.25 + ;; 6-typing.watsup:621.1-623.25 rule br_if{C : context, l : labelidx, t* : valtype*}: `%|-%:%`(C, BR_IF_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [I32_valtype]), [], `%`_resulttype(t*{t : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) - ;; 6-typing.watsup:626.1-630.42 + ;; 6-typing.watsup:625.1-629.42 rule br_table{C : context, l* : labelidx*, l' : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_TABLE_instr(l*{l : labelidx}, l'), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- (Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l!`%`_labelidx.0]!`%`_resulttype.0))*{l : labelidx} -- Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:632.1-635.31 + ;; 6-typing.watsup:631.1-634.31 rule br_on_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:637.1-639.34 + ;; 6-typing.watsup:636.1-638.34 rule br_on_non_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)])) - ;; 6-typing.watsup:641.1-647.34 + ;; 6-typing.watsup:640.1-646.34 rule br_on_cast{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [($diffrt(rt_1, rt_2) : reftype <: valtype)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)])) @@ -4117,7 +4117,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt) - ;; 6-typing.watsup:649.1-655.49 + ;; 6-typing.watsup:648.1-654.49 rule br_on_cast_fail{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_FAIL_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [(rt_2 : reftype <: valtype)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)])) @@ -4126,30 +4126,30 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt) - ;; 6-typing.watsup:660.1-662.47 + ;; 6-typing.watsup:659.1-661.47 rule call{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Expand: `%~~%`(C.FUNCS_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:664.1-666.47 + ;; 6-typing.watsup:663.1-665.47 rule call_ref{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:668.1-672.47 + ;; 6-typing.watsup:667.1-671.47 rule call_indirect{C : context, x : idx, y : idx, t_1* : valtype*, t_2* : valtype*, lim : limits, rt : reftype}: `%|-%:%`(C, CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) -- Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype)) -- Expand: `%~~%`(C.TYPES_context[y!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:674.1-677.42 + ;; 6-typing.watsup:673.1-676.42 rule return{C : context, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, RETURN_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.RETURN_context = ?(`%`_list(t*{t : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:680.1-685.42 + ;; 6-typing.watsup:679.1-684.42 rule return_call{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- Expand: `%~~%`(C.FUNCS_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) @@ -4157,7 +4157,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:688.1-693.42 + ;; 6-typing.watsup:687.1-692.42 rule return_call_ref{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) @@ -4165,7 +4165,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:696.1-704.42 + ;; 6-typing.watsup:695.1-703.42 rule return_call_indirect{C : context, x : idx, y : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, lim : limits, rt : reftype, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) @@ -4175,458 +4175,458 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:709.1-710.33 + ;; 6-typing.watsup:708.1-709.33 rule const{C : context, nt : numtype, c_nt : num_(nt)}: `%|-%:%`(C, CONST_instr(nt, c_nt), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:712.1-713.34 + ;; 6-typing.watsup:711.1-712.34 rule unop{C : context, nt : numtype, unop_nt : unop_(nt)}: `%|-%:%`(C, UNOP_instr(nt, unop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:715.1-716.39 + ;; 6-typing.watsup:714.1-715.39 rule binop{C : context, nt : numtype, binop_nt : binop_(nt)}: `%|-%:%`(C, BINOP_instr(nt, binop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:718.1-719.39 + ;; 6-typing.watsup:717.1-718.39 rule testop{C : context, nt : numtype, testop_nt : testop_(nt)}: `%|-%:%`(C, TESTOP_instr(nt, testop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:721.1-722.40 + ;; 6-typing.watsup:720.1-721.40 rule relop{C : context, nt : numtype, relop_nt : relop_(nt)}: `%|-%:%`(C, RELOP_instr(nt, relop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:726.1-728.34 + ;; 6-typing.watsup:725.1-727.34 rule cvtop-reinterpret{C : context, nt_1 : numtype, nt_2 : numtype}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, REINTERPRET_cvtop_, ?()), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ($size(nt_1) = $size(nt_2)) - ;; 6-typing.watsup:730.1-732.112 + ;; 6-typing.watsup:729.1-731.112 rule cvtop-convert{C : context, nt_1 : numtype, nt_2 : numtype, sx? : sx?, Inn_1 : Inn, Inn_2 : Inn, Fnn_1 : Fnn, Fnn_2 : Fnn}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, CONVERT_cvtop_, sx?{sx : sx}), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ((sx?{sx : sx} = ?()) <=> ((((nt_1 = (Inn_1 : Inn <: numtype)) /\ (nt_2 = (Inn_2 : Inn <: numtype))) /\ ($size(nt_1) > $size(nt_2))) \/ ((nt_1 = (Fnn_1 : Fnn <: numtype)) /\ (nt_2 = (Fnn_2 : Fnn <: numtype))))) - ;; 6-typing.watsup:737.1-739.31 + ;; 6-typing.watsup:736.1-738.31 rule ref.null{C : context, ht : heaptype}: `%|-%:%`(C, REF.NULL_instr(ht), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:741.1-744.20 + ;; 6-typing.watsup:740.1-743.20 rule ref.func{C : context, x : idx, dt : deftype}: `%|-%:%`(C, REF.FUNC_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), (dt : deftype <: heaptype))]))) -- if (C.FUNCS_context[x!`%`_idx.0] = dt) -- if x <- C.REFS_context - ;; 6-typing.watsup:746.1-747.34 + ;; 6-typing.watsup:745.1-746.34 rule ref.i31{C : context}: `%|-%:%`(C, REF.I31_instr, `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), I31_heaptype)]))) - ;; 6-typing.watsup:749.1-751.31 + ;; 6-typing.watsup:748.1-750.31 rule ref.is_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.IS_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([I32_valtype]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:753.1-755.31 + ;; 6-typing.watsup:752.1-754.31 rule ref.as_non_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.AS_NON_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:757.1-758.51 + ;; 6-typing.watsup:756.1-757.51 rule ref.eq{C : context}: `%|-%:%`(C, REF.EQ_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype) REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:760.1-764.33 + ;; 6-typing.watsup:759.1-763.33 rule ref.test{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.TEST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([I32_valtype]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:766.1-770.33 + ;; 6-typing.watsup:765.1-769.33 rule ref.cast{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.CAST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:775.1-776.42 + ;; 6-typing.watsup:774.1-775.42 rule i31.get{C : context, sx : sx}: `%|-%:%`(C, I31.GET_instr(sx), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), I31_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:781.1-783.44 + ;; 6-typing.watsup:780.1-782.44 rule struct.new{C : context, x : idx, zt* : storagetype*, mut* : mut*}: `%|-%:%`(C, STRUCT.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)*{zt : storagetype}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) - ;; 6-typing.watsup:785.1-788.40 + ;; 6-typing.watsup:784.1-787.40 rule struct.new_default{C : context, x : idx, mut* : mut*, zt* : storagetype*, val* : val*}: `%|-%:%`(C, STRUCT.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) -- (if ($default_($unpack(zt)) = ?(val)))*{val : val, zt : storagetype} - ;; 6-typing.watsup:790.1-794.39 + ;; 6-typing.watsup:789.1-793.39 rule struct.get{C : context, sx? : sx?, x : idx, i : nat, zt : storagetype, yt* : fieldtype*, mut : mut}: `%|-%:%`(C, STRUCT.GET_instr(sx?{sx : sx}, x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype([$unpack(zt)]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(yt*{yt : fieldtype}))) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(mut, zt)) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:796.1-799.24 + ;; 6-typing.watsup:795.1-798.24 rule struct.set{C : context, x : idx, i : nat, zt : storagetype, yt* : fieldtype*}: `%|-%:%`(C, STRUCT.SET_instr(x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) $unpack(zt)]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(yt*{yt : fieldtype}))) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(`MUT%?`_mut(?(())), zt)) - ;; 6-typing.watsup:804.1-806.42 + ;; 6-typing.watsup:803.1-805.42 rule array.new{C : context, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype([$unpack(zt) I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:808.1-811.37 + ;; 6-typing.watsup:807.1-810.37 rule array.new_default{C : context, x : idx, mut : mut, zt : storagetype, val : val}: `%|-%:%`(C, ARRAY.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ($default_($unpack(zt)) = ?(val)) - ;; 6-typing.watsup:813.1-815.42 + ;; 6-typing.watsup:812.1-814.42 rule array.new_fixed{C : context, x : idx, n : n, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_FIXED_instr(x, `%`_u32(n)), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)^n{}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:817.1-820.40 + ;; 6-typing.watsup:816.1-819.40 rule array.new_elem{C : context, x : idx, y : idx, mut : mut, rt : reftype}: `%|-%:%`(C, ARRAY.NEW_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, (rt : reftype <: storagetype)))) -- Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt) - ;; 6-typing.watsup:822.1-826.24 + ;; 6-typing.watsup:821.1-825.24 rule array.new_data{C : context, x : idx, y : idx, mut : mut, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.NEW_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:828.1-831.39 + ;; 6-typing.watsup:827.1-830.39 rule array.get{C : context, sx? : sx?, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.GET_instr(sx?{sx : sx}, x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype]), [], `%`_resulttype([$unpack(zt)]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:833.1-835.42 + ;; 6-typing.watsup:832.1-834.42 rule array.set{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt)]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:837.1-839.42 + ;; 6-typing.watsup:836.1-838.42 rule array.len{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.LEN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ARRAY_heaptype)]), [], `%`_resulttype([I32_valtype]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:841.1-843.42 + ;; 6-typing.watsup:840.1-842.42 rule array.fill{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt) I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:845.1-849.40 + ;; 6-typing.watsup:844.1-848.40 rule array.copy{C : context, x_1 : idx, x_2 : idx, zt_1 : storagetype, mut : mut, zt_2 : storagetype}: `%|-%:%`(C, ARRAY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x_1) : typevar <: heaptype)) I32_valtype REF_valtype(`NULL%?`_nul(?(())), ($idx(x_2) : typevar <: heaptype)) I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x_1!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt_1))) -- Expand: `%~~%`(C.TYPES_context[x_2!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt_2))) -- Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1) - ;; 6-typing.watsup:851.1-854.44 + ;; 6-typing.watsup:850.1-853.44 rule array.init_elem{C : context, x : idx, y : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.INIT_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) -- Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt) - ;; 6-typing.watsup:856.1-860.24 + ;; 6-typing.watsup:855.1-859.24 rule array.init_data{C : context, x : idx, y : idx, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.INIT_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:865.1-866.62 + ;; 6-typing.watsup:864.1-865.62 rule extern.convert_any{C : context, nul : nul}: `%|-%:%`(C, EXTERN.CONVERT_ANY_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, ANY_heaptype)]), [], `%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]))) - ;; 6-typing.watsup:868.1-869.62 + ;; 6-typing.watsup:867.1-868.62 rule any.convert_extern{C : context, nul : nul}: `%|-%:%`(C, ANY.CONVERT_EXTERN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]), [], `%`_resulttype([REF_valtype(nul, ANY_heaptype)]))) - ;; 6-typing.watsup:874.1-875.35 + ;; 6-typing.watsup:873.1-874.35 rule vconst{C : context, c : vec_(V128_Vnn)}: `%|-%:%`(C, VCONST_instr(V128_vectype, c), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:877.1-878.41 + ;; 6-typing.watsup:876.1-877.41 rule vvunop{C : context, vvunop : vvunop}: `%|-%:%`(C, VVUNOP_instr(V128_vectype, vvunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:880.1-881.48 + ;; 6-typing.watsup:879.1-880.48 rule vvbinop{C : context, vvbinop : vvbinop}: `%|-%:%`(C, VVBINOP_instr(V128_vectype, vvbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:883.1-884.55 + ;; 6-typing.watsup:882.1-883.55 rule vvternop{C : context, vvternop : vvternop}: `%|-%:%`(C, VVTERNOP_instr(V128_vectype, vvternop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:886.1-887.44 + ;; 6-typing.watsup:885.1-886.44 rule vvtestop{C : context, vvtestop : vvtestop}: `%|-%:%`(C, VVTESTOP_instr(V128_vectype, vvtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:889.1-890.37 + ;; 6-typing.watsup:888.1-889.37 rule vunop{C : context, sh : shape, vunop : vunop_(sh)}: `%|-%:%`(C, VUNOP_instr(sh, vunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:892.1-893.44 + ;; 6-typing.watsup:891.1-892.44 rule vbinop{C : context, sh : shape, vbinop : vbinop_(sh)}: `%|-%:%`(C, VBINOP_instr(sh, vbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:895.1-896.40 + ;; 6-typing.watsup:894.1-895.40 rule vtestop{C : context, sh : shape, vtestop : vtestop_(sh)}: `%|-%:%`(C, VTESTOP_instr(sh, vtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:898.1-899.44 + ;; 6-typing.watsup:897.1-898.44 rule vrelop{C : context, sh : shape, vrelop : vrelop_(sh)}: `%|-%:%`(C, VRELOP_instr(sh, vrelop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:901.1-902.47 + ;; 6-typing.watsup:900.1-901.47 rule vshiftop{C : context, sh : ishape, vshiftop : vshiftop_(sh)}: `%|-%:%`(C, VSHIFTOP_instr(sh, vshiftop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype I32_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:904.1-905.33 + ;; 6-typing.watsup:903.1-904.33 rule vbitmask{C : context, sh : ishape}: `%|-%:%`(C, VBITMASK_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:907.1-908.39 + ;; 6-typing.watsup:906.1-907.39 rule vswizzle{C : context, sh : ishape}: `%|-%:%`(C, VSWIZZLE_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:910.1-912.29 + ;; 6-typing.watsup:909.1-911.29 rule vshuffle{C : context, sh : ishape, i* : nat*}: `%|-%:%`(C, VSHUFFLE_instr(sh, `%`_laneidx(i)*{i : nat}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- (if (i < (2 * $dim((sh : ishape <: shape))!`%`_dim.0)))*{i : nat} - ;; 6-typing.watsup:914.1-915.44 + ;; 6-typing.watsup:913.1-914.44 rule vsplat{C : context, sh : shape}: `%|-%:%`(C, VSPLAT_instr(sh), `%->_%%`_instrtype(`%`_resulttype([($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:918.1-920.21 + ;; 6-typing.watsup:917.1-919.21 rule vextract_lane{C : context, sh : shape, sx? : sx?, i : nat}: `%|-%:%`(C, VEXTRACT_LANE_instr(sh, sx?{sx : sx}, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([($unpackshape(sh) : numtype <: valtype)]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:922.1-924.21 + ;; 6-typing.watsup:921.1-923.21 rule vreplace_lane{C : context, sh : shape, i : nat}: `%|-%:%`(C, VREPLACE_LANE_instr(sh, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype ($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:926.1-927.53 + ;; 6-typing.watsup:925.1-926.53 rule vextunop{C : context, sh_1 : ishape, sh_2 : ishape, vextunop : vextunop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTUNOP_instr(sh_1, sh_2, vextunop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:929.1-930.60 + ;; 6-typing.watsup:928.1-929.60 rule vextbinop{C : context, sh_1 : ishape, sh_2 : ishape, vextbinop : vextbinop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTBINOP_instr(sh_1, sh_2, vextbinop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:932.1-933.48 + ;; 6-typing.watsup:931.1-932.48 rule vnarrow{C : context, sh_1 : ishape, sh_2 : ishape, sx : sx}: `%|-%:%`(C, VNARROW_instr(sh_1, sh_2, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:935.1-936.62 + ;; 6-typing.watsup:934.1-935.62 rule vcvtop{C : context, sh_1 : shape, sh_2 : shape, vcvtop : vcvtop_(sh_2, sh_1), half? : half_(sh_2, sh_1)?, sx? : sx?, zero? : zero_(sh_2, sh_1)?}: `%|-%:%`(C, VCVTOP_instr(sh_1, sh_2, vcvtop, half?{half : half_(sh_2, sh_1)}, sx?{sx : sx}, zero?{zero : zero_(sh_2, sh_1)}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:941.1-943.28 + ;; 6-typing.watsup:940.1-942.28 rule local.get{C : context, x : idx, t : valtype}: `%|-%:%`(C, LOCAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(SET_init, t)) - ;; 6-typing.watsup:945.1-947.29 + ;; 6-typing.watsup:944.1-946.29 rule local.set{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:949.1-951.29 + ;; 6-typing.watsup:948.1-950.29 rule local.tee{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.TEE_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([t]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:956.1-958.29 + ;; 6-typing.watsup:955.1-957.29 rule global.get{C : context, x : idx, t : valtype, mut : mut}: `%|-%:%`(C, GLOBAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(mut, t)) - ;; 6-typing.watsup:960.1-962.29 + ;; 6-typing.watsup:959.1-961.29 rule global.set{C : context, x : idx, t : valtype}: `%|-%:%`(C, GLOBAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(`MUT%?`_mut(?(())), t)) - ;; 6-typing.watsup:967.1-969.29 + ;; 6-typing.watsup:966.1-968.29 rule table.get{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:971.1-973.29 + ;; 6-typing.watsup:970.1-972.29 rule table.set{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype)]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:975.1-977.29 + ;; 6-typing.watsup:974.1-976.29 rule table.size{C : context, x : idx, lim : limits, rt : reftype}: `%|-%:%`(C, TABLE.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:979.1-981.29 + ;; 6-typing.watsup:978.1-980.29 rule table.grow{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([(rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:983.1-985.29 + ;; 6-typing.watsup:982.1-984.29 rule table.fill{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:987.1-991.36 + ;; 6-typing.watsup:986.1-990.36 rule table.copy{C : context, x_1 : idx, x_2 : idx, lim_1 : limits, rt_1 : reftype, lim_2 : limits, rt_2 : reftype}: `%|-%:%`(C, TABLE.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x_1!`%`_idx.0] = `%%`_tabletype(lim_1, rt_1)) -- if (C.TABLES_context[x_2!`%`_idx.0] = `%%`_tabletype(lim_2, rt_2)) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:993.1-997.36 + ;; 6-typing.watsup:992.1-996.36 rule table.init{C : context, x : idx, y : idx, lim : limits, rt_1 : reftype, rt_2 : reftype}: `%|-%:%`(C, TABLE.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt_1)) -- if (C.ELEMS_context[y!`%`_idx.0] = rt_2) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:999.1-1001.24 + ;; 6-typing.watsup:998.1-1000.24 rule elem.drop{C : context, x : idx, rt : reftype}: `%|-%:%`(C, ELEM.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (C.ELEMS_context[x!`%`_idx.0] = rt) - ;; 6-typing.watsup:1006.1-1008.23 + ;; 6-typing.watsup:1005.1-1007.23 rule memory.size{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1010.1-1012.23 + ;; 6-typing.watsup:1009.1-1011.23 rule memory.grow{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1014.1-1016.23 + ;; 6-typing.watsup:1013.1-1015.23 rule memory.fill{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1018.1-1021.27 + ;; 6-typing.watsup:1017.1-1020.27 rule memory.copy{C : context, x_1 : idx, x_2 : idx, mt_1 : memtype, mt_2 : memtype}: `%|-%:%`(C, MEMORY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x_1!`%`_idx.0] = mt_1) -- if (C.MEMS_context[x_2!`%`_idx.0] = mt_2) - ;; 6-typing.watsup:1023.1-1026.24 + ;; 6-typing.watsup:1022.1-1025.24 rule memory.init{C : context, x : idx, y : idx, mt : memtype}: `%|-%:%`(C, MEMORY.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1028.1-1030.24 + ;; 6-typing.watsup:1027.1-1029.24 rule data.drop{C : context, x : idx}: `%|-%:%`(C, DATA.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (C.DATAS_context[x!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1041.1-1044.43 + ;; 6-typing.watsup:1040.1-1043.43 rule load-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(nt : numtype <: valtype)]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1046.1-1049.35 + ;; 6-typing.watsup:1045.1-1048.35 rule load-pack{C : context, Inn : Inn, M : M, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr((Inn : Inn <: numtype), ?(`%%`_loadop_(`%`_sz(M), sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(Inn : Inn <: valtype)]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1060.1-1063.43 + ;; 6-typing.watsup:1059.1-1062.43 rule store-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (nt : numtype <: valtype)]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1065.1-1068.35 + ;; 6-typing.watsup:1064.1-1067.35 rule store-pack{C : context, Inn : Inn, M : M, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr((Inn : Inn <: numtype), ?(`%`_sz(M)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (Inn : Inn <: valtype)]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1070.1-1073.46 + ;; 6-typing.watsup:1069.1-1072.46 rule vload-val{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1075.1-1078.39 + ;; 6-typing.watsup:1074.1-1077.39 rule vload-pack{C : context, M : M, N : N, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(`SHAPE%X%%`_vloadop_(`%`_sz(M), N, sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ((M / 8) * N)) - ;; 6-typing.watsup:1080.1-1083.35 + ;; 6-typing.watsup:1079.1-1082.35 rule vload-splat{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(SPLAT_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1085.1-1088.35 + ;; 6-typing.watsup:1084.1-1087.35 rule vload-zero{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(ZERO_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1090.1-1094.21 + ;; 6-typing.watsup:1089.1-1093.21 rule vload_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VLOAD_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) - ;; 6-typing.watsup:1096.1-1099.46 + ;; 6-typing.watsup:1095.1-1098.46 rule vstore{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VSTORE_instr(V128_vectype, x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1101.1-1105.21 + ;; 6-typing.watsup:1100.1-1104.21 rule vstore_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VSTORE_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) -;; 6-typing.watsup:524.1-524.96 +;; 6-typing.watsup:523.1-523.96 relation Instrs_ok: `%|-%:%`(context, instr*, instrtype) - ;; 6-typing.watsup:537.1-538.24 + ;; 6-typing.watsup:536.1-537.24 rule empty{C : context}: `%|-%:%`(C, [], `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:541.1-545.82 + ;; 6-typing.watsup:540.1-544.82 rule seq{C : context, instr_1 : instr, instr_2* : instr*, t_1* : valtype*, x_1* : idx*, x_2* : idx*, t_3* : valtype*, t_2* : valtype*, init* : init*, t* : valtype*}: `%|-%:%`(C, [instr_1] :: instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx} :: x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) -- Instr_ok: `%|-%:%`(C, instr_1, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- (if (C.LOCALS_context[x_1!`%`_idx.0] = `%%`_localtype(init, t)))*{init : init, t : valtype, x_1 : idx} -- Instrs_ok: `%|-%:%`($with_locals(C, x_1*{x_1 : localidx}, `%%`_localtype(SET_init, t)*{t : valtype}), instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_2*{t_2 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) - ;; 6-typing.watsup:547.1-551.33 + ;; 6-typing.watsup:546.1-550.33 rule sub{C : context, instr* : instr*, it' : instrtype, it : instrtype}: `%|-%:%`(C, instr*{instr : instr}, it') -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, it) -- Instrtype_sub: `%|-%<:%`(C, it, it') -- Instrtype_ok: `%|-%:OK`(C, it') - ;; 6-typing.watsup:554.1-557.33 + ;; 6-typing.watsup:553.1-556.33 rule frame{C : context, instr* : instr*, t* : valtype*, t_1* : valtype*, x* : idx*, t_2* : valtype*}: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t*{t : valtype} :: t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) @@ -4862,13 +4862,13 @@ relation Export_ok: `%|-%:%`(context, export, externtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1297.1-1297.100 +;; 6-typing.watsup:1296.1-1296.100 relation Globals_ok: `%|-%:%`(context, global*, globaltype*) - ;; 6-typing.watsup:1339.1-1340.17 + ;; 6-typing.watsup:1338.1-1339.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1342.1-1345.54 + ;; 6-typing.watsup:1341.1-1344.54 rule cons{C : context, global_1 : global, global : global, gt_1 : globaltype, gt* : globaltype*}: `%|-%:%`(C, [global_1] :: global*{}, [gt_1] :: gt*{gt : globaltype}) -- Global_ok: `%|-%:%`(C, global, gt_1) @@ -4878,13 +4878,13 @@ relation Globals_ok: `%|-%:%`(context, global*, globaltype*) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1296.1-1296.98 +;; 6-typing.watsup:1295.1-1295.98 relation Types_ok: `%|-%:%`(context, type*, deftype*) - ;; 6-typing.watsup:1331.1-1332.17 + ;; 6-typing.watsup:1330.1-1331.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1334.1-1337.49 + ;; 6-typing.watsup:1333.1-1336.49 rule cons{C : context, type_1 : type, type* : type*, dt_1* : deftype*, dt* : deftype*}: `%|-%:%`(C, [type_1] :: type*{type : type}, dt_1*{dt_1 : deftype} :: dt*{dt : deftype}) -- Type_ok: `%|-%:%`(C, type_1, dt_1*{dt_1 : deftype}) @@ -9847,22 +9847,22 @@ syntax context = ;; 6-typing.watsup rec { -;; 6-typing.watsup:37.1-37.86 +;; 6-typing.watsup:36.1-36.86 def $with_locals(context : context, localidx*, localtype*) : context - ;; 6-typing.watsup:39.1-39.34 + ;; 6-typing.watsup:38.1-38.34 def $with_locals{C : context}(C, [], []) = C - ;; 6-typing.watsup:40.1-40.90 + ;; 6-typing.watsup:39.1-39.90 def $with_locals{C : context, x_1 : idx, x* : idx*, lct_1 : localtype, lct* : localtype*}(C, [x_1] :: x*{x : localidx}, [lct_1] :: lct*{lct : localtype}) = $with_locals(C[LOCALS_context[x_1!`%`_idx.0] = lct_1], x*{x : localidx}, lct*{lct : localtype}) } ;; 6-typing.watsup rec { -;; 6-typing.watsup:46.1-46.94 +;; 6-typing.watsup:45.1-45.94 def $clos_deftypes(deftype*) : deftype* - ;; 6-typing.watsup:53.1-53.30 + ;; 6-typing.watsup:52.1-52.30 def $clos_deftypes([]) = [] - ;; 6-typing.watsup:54.1-54.101 + ;; 6-typing.watsup:53.1-53.101 def $clos_deftypes{dt* : deftype*, dt_n : deftype, dt'* : deftype*}(dt*{dt : deftype} :: [dt_n]) = dt'*{dt' : deftype} :: [$subst_all_deftype(dt_n, (dt' : deftype <: heaptype)*{dt' : deftype})] -- if (dt'*{dt' : deftype} = $clos_deftypes(dt*{dt : deftype})) } @@ -10030,99 +10030,99 @@ relation Numtype_sub: `%|-%<:%`(context, numtype, numtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:141.1-141.107 +;; 6-typing.watsup:140.1-140.107 relation Deftype_sub: `%|-%<:%`(context, deftype, deftype) - ;; 6-typing.watsup:452.1-454.66 + ;; 6-typing.watsup:451.1-453.66 rule refl{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($clos_deftype(C, deftype_1) = $clos_deftype(C, deftype_2)) - ;; 6-typing.watsup:456.1-459.49 + ;; 6-typing.watsup:455.1-458.49 rule super{C : context, deftype_1 : deftype, deftype_2 : deftype, fin : fin, typeuse* : typeuse*, ct : comptype, i : nat}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($unrolldt(deftype_1) = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) -- Heaptype_sub: `%|-%<:%`(C, (typeuse*{typeuse : typeuse}[i] : typeuse <: heaptype), (deftype_2 : deftype <: heaptype)) -;; 6-typing.watsup:289.1-289.104 +;; 6-typing.watsup:288.1-288.104 relation Heaptype_sub: `%|-%<:%`(context, heaptype, heaptype) - ;; 6-typing.watsup:300.1-301.28 + ;; 6-typing.watsup:299.1-300.28 rule refl{C : context, heaptype : heaptype}: `%|-%<:%`(C, heaptype, heaptype) - ;; 6-typing.watsup:303.1-307.48 + ;; 6-typing.watsup:302.1-306.48 rule trans{C : context, heaptype_1 : heaptype, heaptype_2 : heaptype, heaptype' : heaptype}: `%|-%<:%`(C, heaptype_1, heaptype_2) -- Heaptype_ok: `%|-%:OK`(C, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype_1, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype', heaptype_2) - ;; 6-typing.watsup:309.1-310.17 + ;; 6-typing.watsup:308.1-309.17 rule eq-any{C : context}: `%|-%<:%`(C, EQ_heaptype, ANY_heaptype) - ;; 6-typing.watsup:312.1-313.17 + ;; 6-typing.watsup:311.1-312.17 rule i31-eq{C : context}: `%|-%<:%`(C, I31_heaptype, EQ_heaptype) - ;; 6-typing.watsup:315.1-316.20 + ;; 6-typing.watsup:314.1-315.20 rule struct-eq{C : context}: `%|-%<:%`(C, STRUCT_heaptype, EQ_heaptype) - ;; 6-typing.watsup:318.1-319.19 + ;; 6-typing.watsup:317.1-318.19 rule array-eq{C : context}: `%|-%<:%`(C, ARRAY_heaptype, EQ_heaptype) - ;; 6-typing.watsup:321.1-323.42 + ;; 6-typing.watsup:320.1-322.42 rule struct{C : context, deftype : deftype, fieldtype* : fieldtype*}: `%|-%<:%`(C, (deftype : deftype <: heaptype), STRUCT_heaptype) -- Expand: `%~~%`(deftype, STRUCT_comptype(`%`_structtype(fieldtype*{fieldtype : fieldtype}))) - ;; 6-typing.watsup:325.1-327.40 + ;; 6-typing.watsup:324.1-326.40 rule array{C : context, deftype : deftype, fieldtype : fieldtype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), ARRAY_heaptype) -- Expand: `%~~%`(deftype, ARRAY_comptype(fieldtype)) - ;; 6-typing.watsup:329.1-331.38 + ;; 6-typing.watsup:328.1-330.38 rule func{C : context, deftype : deftype, functype : functype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), FUNC_heaptype) -- Expand: `%~~%`(deftype, FUNC_comptype(functype)) - ;; 6-typing.watsup:333.1-335.46 + ;; 6-typing.watsup:332.1-334.46 rule def{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, (deftype_1 : deftype <: heaptype), (deftype_2 : deftype <: heaptype)) -- Deftype_sub: `%|-%<:%`(C, deftype_1, deftype_2) - ;; 6-typing.watsup:337.1-339.53 + ;; 6-typing.watsup:336.1-338.53 rule typeidx-l{C : context, typeidx : typeidx, heaptype : heaptype}: `%|-%<:%`(C, _IDX_heaptype(typeidx), heaptype) -- Heaptype_sub: `%|-%<:%`(C, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype), heaptype) - ;; 6-typing.watsup:341.1-343.53 + ;; 6-typing.watsup:340.1-342.53 rule typeidx-r{C : context, heaptype : heaptype, typeidx : typeidx}: `%|-%<:%`(C, heaptype, _IDX_heaptype(typeidx)) -- Heaptype_sub: `%|-%<:%`(C, heaptype, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype)) - ;; 6-typing.watsup:345.1-347.40 + ;; 6-typing.watsup:344.1-346.40 rule rec{C : context, i : nat, typeuse* : typeuse*, j : nat, fin : fin, ct : comptype}: `%|-%<:%`(C, REC_heaptype(i), (typeuse*{typeuse : typeuse}[j] : typeuse <: heaptype)) -- if (C.RECS_context[i] = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) - ;; 6-typing.watsup:349.1-351.40 + ;; 6-typing.watsup:348.1-350.40 rule none{C : context, heaptype : heaptype}: `%|-%<:%`(C, NONE_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, ANY_heaptype) - ;; 6-typing.watsup:353.1-355.41 + ;; 6-typing.watsup:352.1-354.41 rule nofunc{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOFUNC_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, FUNC_heaptype) - ;; 6-typing.watsup:357.1-359.43 + ;; 6-typing.watsup:356.1-358.43 rule noextern{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOEXTERN_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, EXTERN_heaptype) - ;; 6-typing.watsup:361.1-362.23 + ;; 6-typing.watsup:360.1-361.23 rule bot{C : context, heaptype : heaptype}: `%|-%<:%`(C, BOT_heaptype, heaptype) } @@ -10266,13 +10266,13 @@ relation Subtype_ok2: `%|-%:%`(context, subtype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:136.1-136.105 +;; 6-typing.watsup:135.1-135.105 relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) - ;; 6-typing.watsup:214.1-215.24 + ;; 6-typing.watsup:213.1-214.24 rule empty{C : context, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidxnat(x, i)) - ;; 6-typing.watsup:217.1-220.55 + ;; 6-typing.watsup:216.1-219.55 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidxnat(x, i)) -- Subtype_ok2: `%|-%:%`(C, subtype_1, OK_oktypeidxnat(x, i)) @@ -10282,19 +10282,19 @@ relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:134.1-134.102 +;; 6-typing.watsup:133.1-133.102 relation Rectype_ok: `%|-%:%`(context, rectype, oktypeidx) - ;; 6-typing.watsup:202.1-203.23 + ;; 6-typing.watsup:201.1-202.23 rule empty{C : context, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidx(x)) - ;; 6-typing.watsup:205.1-208.48 + ;; 6-typing.watsup:204.1-207.48 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Subtype_ok: `%|-%:%`(C, subtype_1, OK_oktypeidx(x)) -- Rectype_ok: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(`%`_typeidx((x!`%`_idx.0 + 1)))) - ;; 6-typing.watsup:210.1-212.60 + ;; 6-typing.watsup:209.1-211.60 rule rec2{C : context, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Rectype_ok2: `%|-%:%`({TYPES [], RECS subtype*{subtype : subtype}, FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [], RETURN ?(), REFS []} ++ C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidxnat(x, 0)) @@ -10445,83 +10445,83 @@ relation Blocktype_ok: `%|-%:%`(context, blocktype, instrtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:523.1-523.95 +;; 6-typing.watsup:522.1-522.95 relation Instr_ok: `%|-%:%`(context, instr, instrtype) - ;; 6-typing.watsup:562.1-563.24 + ;; 6-typing.watsup:561.1-562.24 rule nop{C : context}: `%|-%:%`(C, NOP_instr, `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:565.1-567.42 + ;; 6-typing.watsup:564.1-566.42 rule unreachable{C : context, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, UNREACHABLE_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:569.1-571.29 + ;; 6-typing.watsup:568.1-570.29 rule drop{C : context, t : valtype}: `%|-%:%`(C, DROP_instr, `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:574.1-576.29 + ;; 6-typing.watsup:573.1-575.29 rule select-expl{C : context, t : valtype}: `%|-%:%`(C, `SELECT()%?`_instr(?([t])), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:578.1-582.37 + ;; 6-typing.watsup:577.1-581.37 rule select-impl{C : context, t : valtype, t' : valtype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, `SELECT()%?`_instr(?()), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) -- Valtype_sub: `%|-%<:%`(C, t, t') -- if ((t' = (numtype : numtype <: valtype)) \/ (t' = (vectype : vectype <: valtype))) - ;; 6-typing.watsup:598.1-601.67 + ;; 6-typing.watsup:597.1-600.67 rule block{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, BLOCK_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:603.1-606.67 + ;; 6-typing.watsup:602.1-605.67 rule loop{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, LOOP_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_1*{t_1 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:608.1-612.71 + ;; 6-typing.watsup:607.1-611.71 rule if{C : context, bt : blocktype, instr_1* : instr*, instr_2* : instr*, t_1* : valtype*, t_2* : valtype*, x_1* : idx*, x_2* : idx*}: `%|-%:%`(C, `IF%%ELSE%`_instr(bt, instr_1*{instr_1 : instr}, instr_2*{instr_2 : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_1*{instr_1 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:617.1-620.42 + ;; 6-typing.watsup:616.1-619.42 rule br{C : context, l : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_instr(l), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:622.1-624.25 + ;; 6-typing.watsup:621.1-623.25 rule br_if{C : context, l : labelidx, t* : valtype*}: `%|-%:%`(C, BR_IF_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [I32_valtype]), [], `%`_resulttype(t*{t : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) - ;; 6-typing.watsup:626.1-630.42 + ;; 6-typing.watsup:625.1-629.42 rule br_table{C : context, l* : labelidx*, l' : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_TABLE_instr(l*{l : labelidx}, l'), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- (Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l!`%`_labelidx.0]!`%`_resulttype.0))*{l : labelidx} -- Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:632.1-635.31 + ;; 6-typing.watsup:631.1-634.31 rule br_on_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:637.1-639.34 + ;; 6-typing.watsup:636.1-638.34 rule br_on_non_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)])) - ;; 6-typing.watsup:641.1-647.34 + ;; 6-typing.watsup:640.1-646.34 rule br_on_cast{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [($diffrt(rt_1, rt_2) : reftype <: valtype)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)])) @@ -10530,7 +10530,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt) - ;; 6-typing.watsup:649.1-655.49 + ;; 6-typing.watsup:648.1-654.49 rule br_on_cast_fail{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_FAIL_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [(rt_2 : reftype <: valtype)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)])) @@ -10539,30 +10539,30 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt) - ;; 6-typing.watsup:660.1-662.47 + ;; 6-typing.watsup:659.1-661.47 rule call{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Expand: `%~~%`(C.FUNCS_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:664.1-666.47 + ;; 6-typing.watsup:663.1-665.47 rule call_ref{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:668.1-672.47 + ;; 6-typing.watsup:667.1-671.47 rule call_indirect{C : context, x : idx, y : idx, t_1* : valtype*, t_2* : valtype*, lim : limits, rt : reftype}: `%|-%:%`(C, CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) -- Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype)) -- Expand: `%~~%`(C.TYPES_context[y!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:674.1-677.42 + ;; 6-typing.watsup:673.1-676.42 rule return{C : context, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, RETURN_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.RETURN_context = ?(`%`_list(t*{t : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:680.1-685.42 + ;; 6-typing.watsup:679.1-684.42 rule return_call{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- Expand: `%~~%`(C.FUNCS_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) @@ -10570,7 +10570,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:688.1-693.42 + ;; 6-typing.watsup:687.1-692.42 rule return_call_ref{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) @@ -10578,7 +10578,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:696.1-704.42 + ;; 6-typing.watsup:695.1-703.42 rule return_call_indirect{C : context, x : idx, y : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, lim : limits, rt : reftype, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) @@ -10588,458 +10588,458 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:709.1-710.33 + ;; 6-typing.watsup:708.1-709.33 rule const{C : context, nt : numtype, c_nt : num_(nt)}: `%|-%:%`(C, CONST_instr(nt, c_nt), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:712.1-713.34 + ;; 6-typing.watsup:711.1-712.34 rule unop{C : context, nt : numtype, unop_nt : unop_(nt)}: `%|-%:%`(C, UNOP_instr(nt, unop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:715.1-716.39 + ;; 6-typing.watsup:714.1-715.39 rule binop{C : context, nt : numtype, binop_nt : binop_(nt)}: `%|-%:%`(C, BINOP_instr(nt, binop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:718.1-719.39 + ;; 6-typing.watsup:717.1-718.39 rule testop{C : context, nt : numtype, testop_nt : testop_(nt)}: `%|-%:%`(C, TESTOP_instr(nt, testop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:721.1-722.40 + ;; 6-typing.watsup:720.1-721.40 rule relop{C : context, nt : numtype, relop_nt : relop_(nt)}: `%|-%:%`(C, RELOP_instr(nt, relop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:726.1-728.34 + ;; 6-typing.watsup:725.1-727.34 rule cvtop-reinterpret{C : context, nt_1 : numtype, nt_2 : numtype}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, REINTERPRET_cvtop_, ?()), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ($size(nt_1) = $size(nt_2)) - ;; 6-typing.watsup:730.1-732.112 + ;; 6-typing.watsup:729.1-731.112 rule cvtop-convert{C : context, nt_1 : numtype, nt_2 : numtype, sx? : sx?, Inn_1 : Inn, Inn_2 : Inn, Fnn_1 : Fnn, Fnn_2 : Fnn}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, CONVERT_cvtop_, sx?{sx : sx}), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ((sx?{sx : sx} = ?()) <=> ((((nt_1 = (Inn_1 : Inn <: numtype)) /\ (nt_2 = (Inn_2 : Inn <: numtype))) /\ ($size(nt_1) > $size(nt_2))) \/ ((nt_1 = (Fnn_1 : Fnn <: numtype)) /\ (nt_2 = (Fnn_2 : Fnn <: numtype))))) - ;; 6-typing.watsup:737.1-739.31 + ;; 6-typing.watsup:736.1-738.31 rule ref.null{C : context, ht : heaptype}: `%|-%:%`(C, REF.NULL_instr(ht), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:741.1-744.20 + ;; 6-typing.watsup:740.1-743.20 rule ref.func{C : context, x : idx, dt : deftype}: `%|-%:%`(C, REF.FUNC_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), (dt : deftype <: heaptype))]))) -- if (C.FUNCS_context[x!`%`_idx.0] = dt) -- if x <- C.REFS_context - ;; 6-typing.watsup:746.1-747.34 + ;; 6-typing.watsup:745.1-746.34 rule ref.i31{C : context}: `%|-%:%`(C, REF.I31_instr, `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), I31_heaptype)]))) - ;; 6-typing.watsup:749.1-751.31 + ;; 6-typing.watsup:748.1-750.31 rule ref.is_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.IS_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([I32_valtype]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:753.1-755.31 + ;; 6-typing.watsup:752.1-754.31 rule ref.as_non_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.AS_NON_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:757.1-758.51 + ;; 6-typing.watsup:756.1-757.51 rule ref.eq{C : context}: `%|-%:%`(C, REF.EQ_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype) REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:760.1-764.33 + ;; 6-typing.watsup:759.1-763.33 rule ref.test{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.TEST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([I32_valtype]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:766.1-770.33 + ;; 6-typing.watsup:765.1-769.33 rule ref.cast{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.CAST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:775.1-776.42 + ;; 6-typing.watsup:774.1-775.42 rule i31.get{C : context, sx : sx}: `%|-%:%`(C, I31.GET_instr(sx), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), I31_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:781.1-783.44 + ;; 6-typing.watsup:780.1-782.44 rule struct.new{C : context, x : idx, zt* : storagetype*, mut* : mut*}: `%|-%:%`(C, STRUCT.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)*{zt : storagetype}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) - ;; 6-typing.watsup:785.1-788.40 + ;; 6-typing.watsup:784.1-787.40 rule struct.new_default{C : context, x : idx, mut* : mut*, zt* : storagetype*, val* : val*}: `%|-%:%`(C, STRUCT.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) -- (if ($default_($unpack(zt)) = ?(val)))*{val : val, zt : storagetype} - ;; 6-typing.watsup:790.1-794.39 + ;; 6-typing.watsup:789.1-793.39 rule struct.get{C : context, sx? : sx?, x : idx, i : nat, zt : storagetype, yt* : fieldtype*, mut : mut}: `%|-%:%`(C, STRUCT.GET_instr(sx?{sx : sx}, x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype([$unpack(zt)]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(yt*{yt : fieldtype}))) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(mut, zt)) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:796.1-799.24 + ;; 6-typing.watsup:795.1-798.24 rule struct.set{C : context, x : idx, i : nat, zt : storagetype, yt* : fieldtype*}: `%|-%:%`(C, STRUCT.SET_instr(x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) $unpack(zt)]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(yt*{yt : fieldtype}))) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(`MUT%?`_mut(?(())), zt)) - ;; 6-typing.watsup:804.1-806.42 + ;; 6-typing.watsup:803.1-805.42 rule array.new{C : context, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype([$unpack(zt) I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:808.1-811.37 + ;; 6-typing.watsup:807.1-810.37 rule array.new_default{C : context, x : idx, mut : mut, zt : storagetype, val : val}: `%|-%:%`(C, ARRAY.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ($default_($unpack(zt)) = ?(val)) - ;; 6-typing.watsup:813.1-815.42 + ;; 6-typing.watsup:812.1-814.42 rule array.new_fixed{C : context, x : idx, n : n, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_FIXED_instr(x, `%`_u32(n)), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)^n{}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:817.1-820.40 + ;; 6-typing.watsup:816.1-819.40 rule array.new_elem{C : context, x : idx, y : idx, mut : mut, rt : reftype}: `%|-%:%`(C, ARRAY.NEW_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, (rt : reftype <: storagetype)))) -- Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt) - ;; 6-typing.watsup:822.1-826.24 + ;; 6-typing.watsup:821.1-825.24 rule array.new_data{C : context, x : idx, y : idx, mut : mut, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.NEW_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:828.1-831.39 + ;; 6-typing.watsup:827.1-830.39 rule array.get{C : context, sx? : sx?, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.GET_instr(sx?{sx : sx}, x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype]), [], `%`_resulttype([$unpack(zt)]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:833.1-835.42 + ;; 6-typing.watsup:832.1-834.42 rule array.set{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt)]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:837.1-839.42 + ;; 6-typing.watsup:836.1-838.42 rule array.len{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.LEN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ARRAY_heaptype)]), [], `%`_resulttype([I32_valtype]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:841.1-843.42 + ;; 6-typing.watsup:840.1-842.42 rule array.fill{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt) I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:845.1-849.40 + ;; 6-typing.watsup:844.1-848.40 rule array.copy{C : context, x_1 : idx, x_2 : idx, zt_1 : storagetype, mut : mut, zt_2 : storagetype}: `%|-%:%`(C, ARRAY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x_1) : typevar <: heaptype)) I32_valtype REF_valtype(`NULL%?`_nul(?(())), ($idx(x_2) : typevar <: heaptype)) I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x_1!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt_1))) -- Expand: `%~~%`(C.TYPES_context[x_2!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt_2))) -- Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1) - ;; 6-typing.watsup:851.1-854.44 + ;; 6-typing.watsup:850.1-853.44 rule array.init_elem{C : context, x : idx, y : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.INIT_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) -- Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt) - ;; 6-typing.watsup:856.1-860.24 + ;; 6-typing.watsup:855.1-859.24 rule array.init_data{C : context, x : idx, y : idx, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.INIT_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:865.1-866.62 + ;; 6-typing.watsup:864.1-865.62 rule extern.convert_any{C : context, nul : nul}: `%|-%:%`(C, EXTERN.CONVERT_ANY_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, ANY_heaptype)]), [], `%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]))) - ;; 6-typing.watsup:868.1-869.62 + ;; 6-typing.watsup:867.1-868.62 rule any.convert_extern{C : context, nul : nul}: `%|-%:%`(C, ANY.CONVERT_EXTERN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]), [], `%`_resulttype([REF_valtype(nul, ANY_heaptype)]))) - ;; 6-typing.watsup:874.1-875.35 + ;; 6-typing.watsup:873.1-874.35 rule vconst{C : context, c : vec_(V128_Vnn)}: `%|-%:%`(C, VCONST_instr(V128_vectype, c), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:877.1-878.41 + ;; 6-typing.watsup:876.1-877.41 rule vvunop{C : context, vvunop : vvunop}: `%|-%:%`(C, VVUNOP_instr(V128_vectype, vvunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:880.1-881.48 + ;; 6-typing.watsup:879.1-880.48 rule vvbinop{C : context, vvbinop : vvbinop}: `%|-%:%`(C, VVBINOP_instr(V128_vectype, vvbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:883.1-884.55 + ;; 6-typing.watsup:882.1-883.55 rule vvternop{C : context, vvternop : vvternop}: `%|-%:%`(C, VVTERNOP_instr(V128_vectype, vvternop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:886.1-887.44 + ;; 6-typing.watsup:885.1-886.44 rule vvtestop{C : context, vvtestop : vvtestop}: `%|-%:%`(C, VVTESTOP_instr(V128_vectype, vvtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:889.1-890.37 + ;; 6-typing.watsup:888.1-889.37 rule vunop{C : context, sh : shape, vunop : vunop_(sh)}: `%|-%:%`(C, VUNOP_instr(sh, vunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:892.1-893.44 + ;; 6-typing.watsup:891.1-892.44 rule vbinop{C : context, sh : shape, vbinop : vbinop_(sh)}: `%|-%:%`(C, VBINOP_instr(sh, vbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:895.1-896.40 + ;; 6-typing.watsup:894.1-895.40 rule vtestop{C : context, sh : shape, vtestop : vtestop_(sh)}: `%|-%:%`(C, VTESTOP_instr(sh, vtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:898.1-899.44 + ;; 6-typing.watsup:897.1-898.44 rule vrelop{C : context, sh : shape, vrelop : vrelop_(sh)}: `%|-%:%`(C, VRELOP_instr(sh, vrelop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:901.1-902.47 + ;; 6-typing.watsup:900.1-901.47 rule vshiftop{C : context, sh : ishape, vshiftop : vshiftop_(sh)}: `%|-%:%`(C, VSHIFTOP_instr(sh, vshiftop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype I32_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:904.1-905.33 + ;; 6-typing.watsup:903.1-904.33 rule vbitmask{C : context, sh : ishape}: `%|-%:%`(C, VBITMASK_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:907.1-908.39 + ;; 6-typing.watsup:906.1-907.39 rule vswizzle{C : context, sh : ishape}: `%|-%:%`(C, VSWIZZLE_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:910.1-912.29 + ;; 6-typing.watsup:909.1-911.29 rule vshuffle{C : context, sh : ishape, i* : nat*}: `%|-%:%`(C, VSHUFFLE_instr(sh, `%`_laneidx(i)*{i : nat}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- (if (i < (2 * $dim((sh : ishape <: shape))!`%`_dim.0)))*{i : nat} - ;; 6-typing.watsup:914.1-915.44 + ;; 6-typing.watsup:913.1-914.44 rule vsplat{C : context, sh : shape}: `%|-%:%`(C, VSPLAT_instr(sh), `%->_%%`_instrtype(`%`_resulttype([($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:918.1-920.21 + ;; 6-typing.watsup:917.1-919.21 rule vextract_lane{C : context, sh : shape, sx? : sx?, i : nat}: `%|-%:%`(C, VEXTRACT_LANE_instr(sh, sx?{sx : sx}, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([($unpackshape(sh) : numtype <: valtype)]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:922.1-924.21 + ;; 6-typing.watsup:921.1-923.21 rule vreplace_lane{C : context, sh : shape, i : nat}: `%|-%:%`(C, VREPLACE_LANE_instr(sh, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype ($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:926.1-927.53 + ;; 6-typing.watsup:925.1-926.53 rule vextunop{C : context, sh_1 : ishape, sh_2 : ishape, vextunop : vextunop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTUNOP_instr(sh_1, sh_2, vextunop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:929.1-930.60 + ;; 6-typing.watsup:928.1-929.60 rule vextbinop{C : context, sh_1 : ishape, sh_2 : ishape, vextbinop : vextbinop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTBINOP_instr(sh_1, sh_2, vextbinop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:932.1-933.48 + ;; 6-typing.watsup:931.1-932.48 rule vnarrow{C : context, sh_1 : ishape, sh_2 : ishape, sx : sx}: `%|-%:%`(C, VNARROW_instr(sh_1, sh_2, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:935.1-936.62 + ;; 6-typing.watsup:934.1-935.62 rule vcvtop{C : context, sh_1 : shape, sh_2 : shape, vcvtop : vcvtop_(sh_2, sh_1), half? : half_(sh_2, sh_1)?, sx? : sx?, zero? : zero_(sh_2, sh_1)?}: `%|-%:%`(C, VCVTOP_instr(sh_1, sh_2, vcvtop, half?{half : half_(sh_2, sh_1)}, sx?{sx : sx}, zero?{zero : zero_(sh_2, sh_1)}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:941.1-943.28 + ;; 6-typing.watsup:940.1-942.28 rule local.get{C : context, x : idx, t : valtype}: `%|-%:%`(C, LOCAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(SET_init, t)) - ;; 6-typing.watsup:945.1-947.29 + ;; 6-typing.watsup:944.1-946.29 rule local.set{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:949.1-951.29 + ;; 6-typing.watsup:948.1-950.29 rule local.tee{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.TEE_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([t]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:956.1-958.29 + ;; 6-typing.watsup:955.1-957.29 rule global.get{C : context, x : idx, t : valtype, mut : mut}: `%|-%:%`(C, GLOBAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(mut, t)) - ;; 6-typing.watsup:960.1-962.29 + ;; 6-typing.watsup:959.1-961.29 rule global.set{C : context, x : idx, t : valtype}: `%|-%:%`(C, GLOBAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(`MUT%?`_mut(?(())), t)) - ;; 6-typing.watsup:967.1-969.29 + ;; 6-typing.watsup:966.1-968.29 rule table.get{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:971.1-973.29 + ;; 6-typing.watsup:970.1-972.29 rule table.set{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype)]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:975.1-977.29 + ;; 6-typing.watsup:974.1-976.29 rule table.size{C : context, x : idx, lim : limits, rt : reftype}: `%|-%:%`(C, TABLE.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:979.1-981.29 + ;; 6-typing.watsup:978.1-980.29 rule table.grow{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([(rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:983.1-985.29 + ;; 6-typing.watsup:982.1-984.29 rule table.fill{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:987.1-991.36 + ;; 6-typing.watsup:986.1-990.36 rule table.copy{C : context, x_1 : idx, x_2 : idx, lim_1 : limits, rt_1 : reftype, lim_2 : limits, rt_2 : reftype}: `%|-%:%`(C, TABLE.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x_1!`%`_idx.0] = `%%`_tabletype(lim_1, rt_1)) -- if (C.TABLES_context[x_2!`%`_idx.0] = `%%`_tabletype(lim_2, rt_2)) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:993.1-997.36 + ;; 6-typing.watsup:992.1-996.36 rule table.init{C : context, x : idx, y : idx, lim : limits, rt_1 : reftype, rt_2 : reftype}: `%|-%:%`(C, TABLE.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt_1)) -- if (C.ELEMS_context[y!`%`_idx.0] = rt_2) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:999.1-1001.24 + ;; 6-typing.watsup:998.1-1000.24 rule elem.drop{C : context, x : idx, rt : reftype}: `%|-%:%`(C, ELEM.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (C.ELEMS_context[x!`%`_idx.0] = rt) - ;; 6-typing.watsup:1006.1-1008.23 + ;; 6-typing.watsup:1005.1-1007.23 rule memory.size{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1010.1-1012.23 + ;; 6-typing.watsup:1009.1-1011.23 rule memory.grow{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1014.1-1016.23 + ;; 6-typing.watsup:1013.1-1015.23 rule memory.fill{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1018.1-1021.27 + ;; 6-typing.watsup:1017.1-1020.27 rule memory.copy{C : context, x_1 : idx, x_2 : idx, mt_1 : memtype, mt_2 : memtype}: `%|-%:%`(C, MEMORY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x_1!`%`_idx.0] = mt_1) -- if (C.MEMS_context[x_2!`%`_idx.0] = mt_2) - ;; 6-typing.watsup:1023.1-1026.24 + ;; 6-typing.watsup:1022.1-1025.24 rule memory.init{C : context, x : idx, y : idx, mt : memtype}: `%|-%:%`(C, MEMORY.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1028.1-1030.24 + ;; 6-typing.watsup:1027.1-1029.24 rule data.drop{C : context, x : idx}: `%|-%:%`(C, DATA.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (C.DATAS_context[x!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1041.1-1044.43 + ;; 6-typing.watsup:1040.1-1043.43 rule load-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(nt : numtype <: valtype)]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1046.1-1049.35 + ;; 6-typing.watsup:1045.1-1048.35 rule load-pack{C : context, Inn : Inn, M : M, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr((Inn : Inn <: numtype), ?(`%%`_loadop_(`%`_sz(M), sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(Inn : Inn <: valtype)]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1060.1-1063.43 + ;; 6-typing.watsup:1059.1-1062.43 rule store-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (nt : numtype <: valtype)]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1065.1-1068.35 + ;; 6-typing.watsup:1064.1-1067.35 rule store-pack{C : context, Inn : Inn, M : M, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr((Inn : Inn <: numtype), ?(`%`_sz(M)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (Inn : Inn <: valtype)]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1070.1-1073.46 + ;; 6-typing.watsup:1069.1-1072.46 rule vload-val{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1075.1-1078.39 + ;; 6-typing.watsup:1074.1-1077.39 rule vload-pack{C : context, M : M, N : N, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(`SHAPE%X%%`_vloadop_(`%`_sz(M), N, sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ((M / 8) * N)) - ;; 6-typing.watsup:1080.1-1083.35 + ;; 6-typing.watsup:1079.1-1082.35 rule vload-splat{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(SPLAT_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1085.1-1088.35 + ;; 6-typing.watsup:1084.1-1087.35 rule vload-zero{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(ZERO_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1090.1-1094.21 + ;; 6-typing.watsup:1089.1-1093.21 rule vload_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VLOAD_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) - ;; 6-typing.watsup:1096.1-1099.46 + ;; 6-typing.watsup:1095.1-1098.46 rule vstore{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VSTORE_instr(V128_vectype, x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1101.1-1105.21 + ;; 6-typing.watsup:1100.1-1104.21 rule vstore_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VSTORE_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) -;; 6-typing.watsup:524.1-524.96 +;; 6-typing.watsup:523.1-523.96 relation Instrs_ok: `%|-%:%`(context, instr*, instrtype) - ;; 6-typing.watsup:537.1-538.24 + ;; 6-typing.watsup:536.1-537.24 rule empty{C : context}: `%|-%:%`(C, [], `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:541.1-545.82 + ;; 6-typing.watsup:540.1-544.82 rule seq{C : context, instr_1 : instr, instr_2* : instr*, t_1* : valtype*, x_1* : idx*, x_2* : idx*, t_3* : valtype*, t_2* : valtype*, init* : init*, t* : valtype*}: `%|-%:%`(C, [instr_1] :: instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx} :: x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) -- Instr_ok: `%|-%:%`(C, instr_1, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- (if (C.LOCALS_context[x_1!`%`_idx.0] = `%%`_localtype(init, t)))*{init : init, t : valtype, x_1 : idx} -- Instrs_ok: `%|-%:%`($with_locals(C, x_1*{x_1 : localidx}, `%%`_localtype(SET_init, t)*{t : valtype}), instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_2*{t_2 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) - ;; 6-typing.watsup:547.1-551.33 + ;; 6-typing.watsup:546.1-550.33 rule sub{C : context, instr* : instr*, it' : instrtype, it : instrtype}: `%|-%:%`(C, instr*{instr : instr}, it') -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, it) -- Instrtype_sub: `%|-%<:%`(C, it, it') -- Instrtype_ok: `%|-%:OK`(C, it') - ;; 6-typing.watsup:554.1-557.33 + ;; 6-typing.watsup:553.1-556.33 rule frame{C : context, instr* : instr*, t* : valtype*, t_1* : valtype*, x* : idx*, t_2* : valtype*}: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t*{t : valtype} :: t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) @@ -11275,13 +11275,13 @@ relation Export_ok: `%|-%:%`(context, export, externtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1297.1-1297.100 +;; 6-typing.watsup:1296.1-1296.100 relation Globals_ok: `%|-%:%`(context, global*, globaltype*) - ;; 6-typing.watsup:1339.1-1340.17 + ;; 6-typing.watsup:1338.1-1339.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1342.1-1345.54 + ;; 6-typing.watsup:1341.1-1344.54 rule cons{C : context, global_1 : global, global : global, gt_1 : globaltype, gt* : globaltype*}: `%|-%:%`(C, [global_1] :: global*{}, [gt_1] :: gt*{gt : globaltype}) -- Global_ok: `%|-%:%`(C, global, gt_1) @@ -11291,13 +11291,13 @@ relation Globals_ok: `%|-%:%`(context, global*, globaltype*) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1296.1-1296.98 +;; 6-typing.watsup:1295.1-1295.98 relation Types_ok: `%|-%:%`(context, type*, deftype*) - ;; 6-typing.watsup:1331.1-1332.17 + ;; 6-typing.watsup:1330.1-1331.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1334.1-1337.49 + ;; 6-typing.watsup:1333.1-1336.49 rule cons{C : context, type_1 : type, type* : type*, dt_1* : deftype*, dt* : deftype*}: `%|-%:%`(C, [type_1] :: type*{type : type}, dt_1*{dt_1 : deftype} :: dt*{dt : deftype}) -- Type_ok: `%|-%:%`(C, type_1, dt_1*{dt_1 : deftype}) @@ -16260,22 +16260,22 @@ syntax context = ;; 6-typing.watsup rec { -;; 6-typing.watsup:37.1-37.86 +;; 6-typing.watsup:36.1-36.86 def $with_locals(context : context, localidx*, localtype*) : context - ;; 6-typing.watsup:39.1-39.34 + ;; 6-typing.watsup:38.1-38.34 def $with_locals{C : context}(C, [], []) = C - ;; 6-typing.watsup:40.1-40.90 + ;; 6-typing.watsup:39.1-39.90 def $with_locals{C : context, x_1 : idx, x* : idx*, lct_1 : localtype, lct* : localtype*}(C, [x_1] :: x*{x : localidx}, [lct_1] :: lct*{lct : localtype}) = $with_locals(C[LOCALS_context[x_1!`%`_idx.0] = lct_1], x*{x : localidx}, lct*{lct : localtype}) } ;; 6-typing.watsup rec { -;; 6-typing.watsup:46.1-46.94 +;; 6-typing.watsup:45.1-45.94 def $clos_deftypes(deftype*) : deftype* - ;; 6-typing.watsup:53.1-53.30 + ;; 6-typing.watsup:52.1-52.30 def $clos_deftypes([]) = [] - ;; 6-typing.watsup:54.1-54.101 + ;; 6-typing.watsup:53.1-53.101 def $clos_deftypes{dt* : deftype*, dt_n : deftype, dt'* : deftype*}(dt*{dt : deftype} :: [dt_n]) = dt'*{dt' : deftype} :: [$subst_all_deftype(dt_n, (dt' : deftype <: heaptype)*{dt' : deftype})] -- if (dt'*{dt' : deftype} = $clos_deftypes(dt*{dt : deftype})) } @@ -16443,99 +16443,99 @@ relation Numtype_sub: `%|-%<:%`(context, numtype, numtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:141.1-141.107 +;; 6-typing.watsup:140.1-140.107 relation Deftype_sub: `%|-%<:%`(context, deftype, deftype) - ;; 6-typing.watsup:452.1-454.66 + ;; 6-typing.watsup:451.1-453.66 rule refl{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($clos_deftype(C, deftype_1) = $clos_deftype(C, deftype_2)) - ;; 6-typing.watsup:456.1-459.49 + ;; 6-typing.watsup:455.1-458.49 rule super{C : context, deftype_1 : deftype, deftype_2 : deftype, fin : fin, typeuse* : typeuse*, ct : comptype, i : nat}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($unrolldt(deftype_1) = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) -- Heaptype_sub: `%|-%<:%`(C, (typeuse*{typeuse : typeuse}[i] : typeuse <: heaptype), (deftype_2 : deftype <: heaptype)) -;; 6-typing.watsup:289.1-289.104 +;; 6-typing.watsup:288.1-288.104 relation Heaptype_sub: `%|-%<:%`(context, heaptype, heaptype) - ;; 6-typing.watsup:300.1-301.28 + ;; 6-typing.watsup:299.1-300.28 rule refl{C : context, heaptype : heaptype}: `%|-%<:%`(C, heaptype, heaptype) - ;; 6-typing.watsup:303.1-307.48 + ;; 6-typing.watsup:302.1-306.48 rule trans{C : context, heaptype_1 : heaptype, heaptype_2 : heaptype, heaptype' : heaptype}: `%|-%<:%`(C, heaptype_1, heaptype_2) -- Heaptype_ok: `%|-%:OK`(C, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype_1, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype', heaptype_2) - ;; 6-typing.watsup:309.1-310.17 + ;; 6-typing.watsup:308.1-309.17 rule eq-any{C : context}: `%|-%<:%`(C, EQ_heaptype, ANY_heaptype) - ;; 6-typing.watsup:312.1-313.17 + ;; 6-typing.watsup:311.1-312.17 rule i31-eq{C : context}: `%|-%<:%`(C, I31_heaptype, EQ_heaptype) - ;; 6-typing.watsup:315.1-316.20 + ;; 6-typing.watsup:314.1-315.20 rule struct-eq{C : context}: `%|-%<:%`(C, STRUCT_heaptype, EQ_heaptype) - ;; 6-typing.watsup:318.1-319.19 + ;; 6-typing.watsup:317.1-318.19 rule array-eq{C : context}: `%|-%<:%`(C, ARRAY_heaptype, EQ_heaptype) - ;; 6-typing.watsup:321.1-323.42 + ;; 6-typing.watsup:320.1-322.42 rule struct{C : context, deftype : deftype, fieldtype* : fieldtype*}: `%|-%<:%`(C, (deftype : deftype <: heaptype), STRUCT_heaptype) -- Expand: `%~~%`(deftype, STRUCT_comptype(`%`_structtype(fieldtype*{fieldtype : fieldtype}))) - ;; 6-typing.watsup:325.1-327.40 + ;; 6-typing.watsup:324.1-326.40 rule array{C : context, deftype : deftype, fieldtype : fieldtype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), ARRAY_heaptype) -- Expand: `%~~%`(deftype, ARRAY_comptype(fieldtype)) - ;; 6-typing.watsup:329.1-331.38 + ;; 6-typing.watsup:328.1-330.38 rule func{C : context, deftype : deftype, functype : functype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), FUNC_heaptype) -- Expand: `%~~%`(deftype, FUNC_comptype(functype)) - ;; 6-typing.watsup:333.1-335.46 + ;; 6-typing.watsup:332.1-334.46 rule def{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, (deftype_1 : deftype <: heaptype), (deftype_2 : deftype <: heaptype)) -- Deftype_sub: `%|-%<:%`(C, deftype_1, deftype_2) - ;; 6-typing.watsup:337.1-339.53 + ;; 6-typing.watsup:336.1-338.53 rule typeidx-l{C : context, typeidx : typeidx, heaptype : heaptype}: `%|-%<:%`(C, _IDX_heaptype(typeidx), heaptype) -- Heaptype_sub: `%|-%<:%`(C, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype), heaptype) - ;; 6-typing.watsup:341.1-343.53 + ;; 6-typing.watsup:340.1-342.53 rule typeidx-r{C : context, heaptype : heaptype, typeidx : typeidx}: `%|-%<:%`(C, heaptype, _IDX_heaptype(typeidx)) -- Heaptype_sub: `%|-%<:%`(C, heaptype, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype)) - ;; 6-typing.watsup:345.1-347.40 + ;; 6-typing.watsup:344.1-346.40 rule rec{C : context, i : nat, typeuse* : typeuse*, j : nat, fin : fin, ct : comptype}: `%|-%<:%`(C, REC_heaptype(i), (typeuse*{typeuse : typeuse}[j] : typeuse <: heaptype)) -- if (C.RECS_context[i] = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) - ;; 6-typing.watsup:349.1-351.40 + ;; 6-typing.watsup:348.1-350.40 rule none{C : context, heaptype : heaptype}: `%|-%<:%`(C, NONE_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, ANY_heaptype) - ;; 6-typing.watsup:353.1-355.41 + ;; 6-typing.watsup:352.1-354.41 rule nofunc{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOFUNC_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, FUNC_heaptype) - ;; 6-typing.watsup:357.1-359.43 + ;; 6-typing.watsup:356.1-358.43 rule noextern{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOEXTERN_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, EXTERN_heaptype) - ;; 6-typing.watsup:361.1-362.23 + ;; 6-typing.watsup:360.1-361.23 rule bot{C : context, heaptype : heaptype}: `%|-%<:%`(C, BOT_heaptype, heaptype) } @@ -16679,13 +16679,13 @@ relation Subtype_ok2: `%|-%:%`(context, subtype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:136.1-136.105 +;; 6-typing.watsup:135.1-135.105 relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) - ;; 6-typing.watsup:214.1-215.24 + ;; 6-typing.watsup:213.1-214.24 rule empty{C : context, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidxnat(x, i)) - ;; 6-typing.watsup:217.1-220.55 + ;; 6-typing.watsup:216.1-219.55 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidxnat(x, i)) -- Subtype_ok2: `%|-%:%`(C, subtype_1, OK_oktypeidxnat(x, i)) @@ -16695,19 +16695,19 @@ relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:134.1-134.102 +;; 6-typing.watsup:133.1-133.102 relation Rectype_ok: `%|-%:%`(context, rectype, oktypeidx) - ;; 6-typing.watsup:202.1-203.23 + ;; 6-typing.watsup:201.1-202.23 rule empty{C : context, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidx(x)) - ;; 6-typing.watsup:205.1-208.48 + ;; 6-typing.watsup:204.1-207.48 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Subtype_ok: `%|-%:%`(C, subtype_1, OK_oktypeidx(x)) -- Rectype_ok: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(`%`_typeidx((x!`%`_idx.0 + 1)))) - ;; 6-typing.watsup:210.1-212.60 + ;; 6-typing.watsup:209.1-211.60 rule rec2{C : context, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Rectype_ok2: `%|-%:%`({TYPES [], RECS subtype*{subtype : subtype}, FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [], RETURN ?(), REFS []} ++ C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidxnat(x, 0)) @@ -16858,83 +16858,83 @@ relation Blocktype_ok: `%|-%:%`(context, blocktype, instrtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:523.1-523.95 +;; 6-typing.watsup:522.1-522.95 relation Instr_ok: `%|-%:%`(context, instr, instrtype) - ;; 6-typing.watsup:562.1-563.24 + ;; 6-typing.watsup:561.1-562.24 rule nop{C : context}: `%|-%:%`(C, NOP_instr, `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:565.1-567.42 + ;; 6-typing.watsup:564.1-566.42 rule unreachable{C : context, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, UNREACHABLE_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:569.1-571.29 + ;; 6-typing.watsup:568.1-570.29 rule drop{C : context, t : valtype}: `%|-%:%`(C, DROP_instr, `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:574.1-576.29 + ;; 6-typing.watsup:573.1-575.29 rule select-expl{C : context, t : valtype}: `%|-%:%`(C, `SELECT()%?`_instr(?([t])), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:578.1-582.37 + ;; 6-typing.watsup:577.1-581.37 rule select-impl{C : context, t : valtype, t' : valtype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, `SELECT()%?`_instr(?()), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) -- Valtype_sub: `%|-%<:%`(C, t, t') -- if ((t' = (numtype : numtype <: valtype)) \/ (t' = (vectype : vectype <: valtype))) - ;; 6-typing.watsup:598.1-601.67 + ;; 6-typing.watsup:597.1-600.67 rule block{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, BLOCK_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:603.1-606.67 + ;; 6-typing.watsup:602.1-605.67 rule loop{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, LOOP_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_1*{t_1 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:608.1-612.71 + ;; 6-typing.watsup:607.1-611.71 rule if{C : context, bt : blocktype, instr_1* : instr*, instr_2* : instr*, t_1* : valtype*, t_2* : valtype*, x_1* : idx*, x_2* : idx*}: `%|-%:%`(C, `IF%%ELSE%`_instr(bt, instr_1*{instr_1 : instr}, instr_2*{instr_2 : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_1*{instr_1 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:617.1-620.42 + ;; 6-typing.watsup:616.1-619.42 rule br{C : context, l : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_instr(l), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:622.1-624.25 + ;; 6-typing.watsup:621.1-623.25 rule br_if{C : context, l : labelidx, t* : valtype*}: `%|-%:%`(C, BR_IF_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [I32_valtype]), [], `%`_resulttype(t*{t : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) - ;; 6-typing.watsup:626.1-630.42 + ;; 6-typing.watsup:625.1-629.42 rule br_table{C : context, l* : labelidx*, l' : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_TABLE_instr(l*{l : labelidx}, l'), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- (Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l!`%`_labelidx.0]!`%`_resulttype.0))*{l : labelidx} -- Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:632.1-635.31 + ;; 6-typing.watsup:631.1-634.31 rule br_on_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:637.1-639.34 + ;; 6-typing.watsup:636.1-638.34 rule br_on_non_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype}))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)])) - ;; 6-typing.watsup:641.1-647.34 + ;; 6-typing.watsup:640.1-646.34 rule br_on_cast{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [($diffrt(rt_1, rt_2) : reftype <: valtype)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)])) @@ -16943,7 +16943,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt) - ;; 6-typing.watsup:649.1-655.49 + ;; 6-typing.watsup:648.1-654.49 rule br_on_cast_fail{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_FAIL_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [(rt_2 : reftype <: valtype)]))) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)])) @@ -16952,30 +16952,30 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt) - ;; 6-typing.watsup:660.1-662.47 + ;; 6-typing.watsup:659.1-661.47 rule call{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Expand: `%~~%`(C.FUNCS_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:664.1-666.47 + ;; 6-typing.watsup:663.1-665.47 rule call_ref{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:668.1-672.47 + ;; 6-typing.watsup:667.1-671.47 rule call_indirect{C : context, x : idx, y : idx, t_1* : valtype*, t_2* : valtype*, lim : limits, rt : reftype}: `%|-%:%`(C, CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) -- Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype)) -- Expand: `%~~%`(C.TYPES_context[y!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:674.1-677.42 + ;; 6-typing.watsup:673.1-676.42 rule return{C : context, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, RETURN_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.RETURN_context = ?(`%`_list(t*{t : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:680.1-685.42 + ;; 6-typing.watsup:679.1-684.42 rule return_call{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- Expand: `%~~%`(C.FUNCS_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) @@ -16983,7 +16983,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:688.1-693.42 + ;; 6-typing.watsup:687.1-692.42 rule return_call_ref{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) @@ -16991,7 +16991,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:696.1-704.42 + ;; 6-typing.watsup:695.1-703.42 rule return_call_indirect{C : context, x : idx, y : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, lim : limits, rt : reftype, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) @@ -17001,458 +17001,458 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:709.1-710.33 + ;; 6-typing.watsup:708.1-709.33 rule const{C : context, nt : numtype, c_nt : num_(nt)}: `%|-%:%`(C, CONST_instr(nt, c_nt), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:712.1-713.34 + ;; 6-typing.watsup:711.1-712.34 rule unop{C : context, nt : numtype, unop_nt : unop_(nt)}: `%|-%:%`(C, UNOP_instr(nt, unop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:715.1-716.39 + ;; 6-typing.watsup:714.1-715.39 rule binop{C : context, nt : numtype, binop_nt : binop_(nt)}: `%|-%:%`(C, BINOP_instr(nt, binop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:718.1-719.39 + ;; 6-typing.watsup:717.1-718.39 rule testop{C : context, nt : numtype, testop_nt : testop_(nt)}: `%|-%:%`(C, TESTOP_instr(nt, testop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:721.1-722.40 + ;; 6-typing.watsup:720.1-721.40 rule relop{C : context, nt : numtype, relop_nt : relop_(nt)}: `%|-%:%`(C, RELOP_instr(nt, relop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:726.1-728.34 + ;; 6-typing.watsup:725.1-727.34 rule cvtop-reinterpret{C : context, nt_1 : numtype, nt_2 : numtype}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, REINTERPRET_cvtop_, ?()), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ($size(nt_1) = $size(nt_2)) - ;; 6-typing.watsup:730.1-732.112 + ;; 6-typing.watsup:729.1-731.112 rule cvtop-convert{C : context, nt_1 : numtype, nt_2 : numtype, sx? : sx?, Inn_1 : Inn, Inn_2 : Inn, Fnn_1 : Fnn, Fnn_2 : Fnn}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, CONVERT_cvtop_, sx?{sx : sx}), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ((sx?{sx : sx} = ?()) <=> ((((nt_1 = (Inn_1 : Inn <: numtype)) /\ (nt_2 = (Inn_2 : Inn <: numtype))) /\ ($size(nt_1) > $size(nt_2))) \/ ((nt_1 = (Fnn_1 : Fnn <: numtype)) /\ (nt_2 = (Fnn_2 : Fnn <: numtype))))) - ;; 6-typing.watsup:737.1-739.31 + ;; 6-typing.watsup:736.1-738.31 rule ref.null{C : context, ht : heaptype}: `%|-%:%`(C, REF.NULL_instr(ht), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:741.1-744.20 + ;; 6-typing.watsup:740.1-743.20 rule ref.func{C : context, x : idx, dt : deftype}: `%|-%:%`(C, REF.FUNC_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), (dt : deftype <: heaptype))]))) -- if (C.FUNCS_context[x!`%`_idx.0] = dt) -- if x <- C.REFS_context - ;; 6-typing.watsup:746.1-747.34 + ;; 6-typing.watsup:745.1-746.34 rule ref.i31{C : context}: `%|-%:%`(C, REF.I31_instr, `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), I31_heaptype)]))) - ;; 6-typing.watsup:749.1-751.31 + ;; 6-typing.watsup:748.1-750.31 rule ref.is_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.IS_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([I32_valtype]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:753.1-755.31 + ;; 6-typing.watsup:752.1-754.31 rule ref.as_non_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.AS_NON_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:757.1-758.51 + ;; 6-typing.watsup:756.1-757.51 rule ref.eq{C : context}: `%|-%:%`(C, REF.EQ_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype) REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:760.1-764.33 + ;; 6-typing.watsup:759.1-763.33 rule ref.test{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.TEST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([I32_valtype]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:766.1-770.33 + ;; 6-typing.watsup:765.1-769.33 rule ref.cast{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.CAST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:775.1-776.42 + ;; 6-typing.watsup:774.1-775.42 rule i31.get{C : context, sx : sx}: `%|-%:%`(C, I31.GET_instr(sx), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), I31_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:781.1-783.44 + ;; 6-typing.watsup:780.1-782.44 rule struct.new{C : context, x : idx, zt* : storagetype*, mut* : mut*}: `%|-%:%`(C, STRUCT.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)*{zt : storagetype}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) - ;; 6-typing.watsup:785.1-788.40 + ;; 6-typing.watsup:784.1-787.40 rule struct.new_default{C : context, x : idx, mut* : mut*, zt* : storagetype*, val* : val*}: `%|-%:%`(C, STRUCT.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) -- (if ($default_($unpack(zt)) = ?(val)))*{val : val, zt : storagetype} - ;; 6-typing.watsup:790.1-794.39 + ;; 6-typing.watsup:789.1-793.39 rule struct.get{C : context, sx? : sx?, x : idx, i : nat, zt : storagetype, yt* : fieldtype*, mut : mut}: `%|-%:%`(C, STRUCT.GET_instr(sx?{sx : sx}, x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype([$unpack(zt)]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(yt*{yt : fieldtype}))) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(mut, zt)) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:796.1-799.24 + ;; 6-typing.watsup:795.1-798.24 rule struct.set{C : context, x : idx, i : nat, zt : storagetype, yt* : fieldtype*}: `%|-%:%`(C, STRUCT.SET_instr(x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) $unpack(zt)]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(yt*{yt : fieldtype}))) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(`MUT%?`_mut(?(())), zt)) - ;; 6-typing.watsup:804.1-806.42 + ;; 6-typing.watsup:803.1-805.42 rule array.new{C : context, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype([$unpack(zt) I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:808.1-811.37 + ;; 6-typing.watsup:807.1-810.37 rule array.new_default{C : context, x : idx, mut : mut, zt : storagetype, val : val}: `%|-%:%`(C, ARRAY.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ($default_($unpack(zt)) = ?(val)) - ;; 6-typing.watsup:813.1-815.42 + ;; 6-typing.watsup:812.1-814.42 rule array.new_fixed{C : context, x : idx, n : n, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_FIXED_instr(x, `%`_u32(n)), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)^n{}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:817.1-820.40 + ;; 6-typing.watsup:816.1-819.40 rule array.new_elem{C : context, x : idx, y : idx, mut : mut, rt : reftype}: `%|-%:%`(C, ARRAY.NEW_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, (rt : reftype <: storagetype)))) -- Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt) - ;; 6-typing.watsup:822.1-826.24 + ;; 6-typing.watsup:821.1-825.24 rule array.new_data{C : context, x : idx, y : idx, mut : mut, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.NEW_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:828.1-831.39 + ;; 6-typing.watsup:827.1-830.39 rule array.get{C : context, sx? : sx?, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.GET_instr(sx?{sx : sx}, x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype]), [], `%`_resulttype([$unpack(zt)]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:833.1-835.42 + ;; 6-typing.watsup:832.1-834.42 rule array.set{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt)]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:837.1-839.42 + ;; 6-typing.watsup:836.1-838.42 rule array.len{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.LEN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ARRAY_heaptype)]), [], `%`_resulttype([I32_valtype]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:841.1-843.42 + ;; 6-typing.watsup:840.1-842.42 rule array.fill{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt) I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:845.1-849.40 + ;; 6-typing.watsup:844.1-848.40 rule array.copy{C : context, x_1 : idx, x_2 : idx, zt_1 : storagetype, mut : mut, zt_2 : storagetype}: `%|-%:%`(C, ARRAY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x_1) : typevar <: heaptype)) I32_valtype REF_valtype(`NULL%?`_nul(?(())), ($idx(x_2) : typevar <: heaptype)) I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x_1!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt_1))) -- Expand: `%~~%`(C.TYPES_context[x_2!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt_2))) -- Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1) - ;; 6-typing.watsup:851.1-854.44 + ;; 6-typing.watsup:850.1-853.44 rule array.init_elem{C : context, x : idx, y : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.INIT_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) -- Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt) - ;; 6-typing.watsup:856.1-860.24 + ;; 6-typing.watsup:855.1-859.24 rule array.init_data{C : context, x : idx, y : idx, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.INIT_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:865.1-866.62 + ;; 6-typing.watsup:864.1-865.62 rule extern.convert_any{C : context, nul : nul}: `%|-%:%`(C, EXTERN.CONVERT_ANY_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, ANY_heaptype)]), [], `%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]))) - ;; 6-typing.watsup:868.1-869.62 + ;; 6-typing.watsup:867.1-868.62 rule any.convert_extern{C : context, nul : nul}: `%|-%:%`(C, ANY.CONVERT_EXTERN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]), [], `%`_resulttype([REF_valtype(nul, ANY_heaptype)]))) - ;; 6-typing.watsup:874.1-875.35 + ;; 6-typing.watsup:873.1-874.35 rule vconst{C : context, c : vec_(V128_Vnn)}: `%|-%:%`(C, VCONST_instr(V128_vectype, c), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:877.1-878.41 + ;; 6-typing.watsup:876.1-877.41 rule vvunop{C : context, vvunop : vvunop}: `%|-%:%`(C, VVUNOP_instr(V128_vectype, vvunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:880.1-881.48 + ;; 6-typing.watsup:879.1-880.48 rule vvbinop{C : context, vvbinop : vvbinop}: `%|-%:%`(C, VVBINOP_instr(V128_vectype, vvbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:883.1-884.55 + ;; 6-typing.watsup:882.1-883.55 rule vvternop{C : context, vvternop : vvternop}: `%|-%:%`(C, VVTERNOP_instr(V128_vectype, vvternop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:886.1-887.44 + ;; 6-typing.watsup:885.1-886.44 rule vvtestop{C : context, vvtestop : vvtestop}: `%|-%:%`(C, VVTESTOP_instr(V128_vectype, vvtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:889.1-890.37 + ;; 6-typing.watsup:888.1-889.37 rule vunop{C : context, sh : shape, vunop : vunop_(sh)}: `%|-%:%`(C, VUNOP_instr(sh, vunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:892.1-893.44 + ;; 6-typing.watsup:891.1-892.44 rule vbinop{C : context, sh : shape, vbinop : vbinop_(sh)}: `%|-%:%`(C, VBINOP_instr(sh, vbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:895.1-896.40 + ;; 6-typing.watsup:894.1-895.40 rule vtestop{C : context, sh : shape, vtestop : vtestop_(sh)}: `%|-%:%`(C, VTESTOP_instr(sh, vtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:898.1-899.44 + ;; 6-typing.watsup:897.1-898.44 rule vrelop{C : context, sh : shape, vrelop : vrelop_(sh)}: `%|-%:%`(C, VRELOP_instr(sh, vrelop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:901.1-902.47 + ;; 6-typing.watsup:900.1-901.47 rule vshiftop{C : context, sh : ishape, vshiftop : vshiftop_(sh)}: `%|-%:%`(C, VSHIFTOP_instr(sh, vshiftop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype I32_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:904.1-905.33 + ;; 6-typing.watsup:903.1-904.33 rule vbitmask{C : context, sh : ishape}: `%|-%:%`(C, VBITMASK_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:907.1-908.39 + ;; 6-typing.watsup:906.1-907.39 rule vswizzle{C : context, sh : ishape}: `%|-%:%`(C, VSWIZZLE_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:910.1-912.29 + ;; 6-typing.watsup:909.1-911.29 rule vshuffle{C : context, sh : ishape, i* : nat*}: `%|-%:%`(C, VSHUFFLE_instr(sh, `%`_laneidx(i)*{i : nat}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- (if (i < (2 * $dim((sh : ishape <: shape))!`%`_dim.0)))*{i : nat} - ;; 6-typing.watsup:914.1-915.44 + ;; 6-typing.watsup:913.1-914.44 rule vsplat{C : context, sh : shape}: `%|-%:%`(C, VSPLAT_instr(sh), `%->_%%`_instrtype(`%`_resulttype([($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:918.1-920.21 + ;; 6-typing.watsup:917.1-919.21 rule vextract_lane{C : context, sh : shape, sx? : sx?, i : nat}: `%|-%:%`(C, VEXTRACT_LANE_instr(sh, sx?{sx : sx}, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([($unpackshape(sh) : numtype <: valtype)]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:922.1-924.21 + ;; 6-typing.watsup:921.1-923.21 rule vreplace_lane{C : context, sh : shape, i : nat}: `%|-%:%`(C, VREPLACE_LANE_instr(sh, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype ($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:926.1-927.53 + ;; 6-typing.watsup:925.1-926.53 rule vextunop{C : context, sh_1 : ishape, sh_2 : ishape, vextunop : vextunop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTUNOP_instr(sh_1, sh_2, vextunop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:929.1-930.60 + ;; 6-typing.watsup:928.1-929.60 rule vextbinop{C : context, sh_1 : ishape, sh_2 : ishape, vextbinop : vextbinop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTBINOP_instr(sh_1, sh_2, vextbinop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:932.1-933.48 + ;; 6-typing.watsup:931.1-932.48 rule vnarrow{C : context, sh_1 : ishape, sh_2 : ishape, sx : sx}: `%|-%:%`(C, VNARROW_instr(sh_1, sh_2, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:935.1-936.62 + ;; 6-typing.watsup:934.1-935.62 rule vcvtop{C : context, sh_1 : shape, sh_2 : shape, vcvtop : vcvtop_(sh_2, sh_1), half? : half_(sh_2, sh_1)?, sx? : sx?, zero? : zero_(sh_2, sh_1)?}: `%|-%:%`(C, VCVTOP_instr(sh_1, sh_2, vcvtop, half?{half : half_(sh_2, sh_1)}, sx?{sx : sx}, zero?{zero : zero_(sh_2, sh_1)}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:941.1-943.28 + ;; 6-typing.watsup:940.1-942.28 rule local.get{C : context, x : idx, t : valtype}: `%|-%:%`(C, LOCAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(SET_init, t)) - ;; 6-typing.watsup:945.1-947.29 + ;; 6-typing.watsup:944.1-946.29 rule local.set{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:949.1-951.29 + ;; 6-typing.watsup:948.1-950.29 rule local.tee{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.TEE_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([t]))) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:956.1-958.29 + ;; 6-typing.watsup:955.1-957.29 rule global.get{C : context, x : idx, t : valtype, mut : mut}: `%|-%:%`(C, GLOBAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(mut, t)) - ;; 6-typing.watsup:960.1-962.29 + ;; 6-typing.watsup:959.1-961.29 rule global.set{C : context, x : idx, t : valtype}: `%|-%:%`(C, GLOBAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(`MUT%?`_mut(?(())), t)) - ;; 6-typing.watsup:967.1-969.29 + ;; 6-typing.watsup:966.1-968.29 rule table.get{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:971.1-973.29 + ;; 6-typing.watsup:970.1-972.29 rule table.set{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype)]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:975.1-977.29 + ;; 6-typing.watsup:974.1-976.29 rule table.size{C : context, x : idx, lim : limits, rt : reftype}: `%|-%:%`(C, TABLE.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:979.1-981.29 + ;; 6-typing.watsup:978.1-980.29 rule table.grow{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([(rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:983.1-985.29 + ;; 6-typing.watsup:982.1-984.29 rule table.fill{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:987.1-991.36 + ;; 6-typing.watsup:986.1-990.36 rule table.copy{C : context, x_1 : idx, x_2 : idx, lim_1 : limits, rt_1 : reftype, lim_2 : limits, rt_2 : reftype}: `%|-%:%`(C, TABLE.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x_1!`%`_idx.0] = `%%`_tabletype(lim_1, rt_1)) -- if (C.TABLES_context[x_2!`%`_idx.0] = `%%`_tabletype(lim_2, rt_2)) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:993.1-997.36 + ;; 6-typing.watsup:992.1-996.36 rule table.init{C : context, x : idx, y : idx, lim : limits, rt_1 : reftype, rt_2 : reftype}: `%|-%:%`(C, TABLE.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt_1)) -- if (C.ELEMS_context[y!`%`_idx.0] = rt_2) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:999.1-1001.24 + ;; 6-typing.watsup:998.1-1000.24 rule elem.drop{C : context, x : idx, rt : reftype}: `%|-%:%`(C, ELEM.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (C.ELEMS_context[x!`%`_idx.0] = rt) - ;; 6-typing.watsup:1006.1-1008.23 + ;; 6-typing.watsup:1005.1-1007.23 rule memory.size{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1010.1-1012.23 + ;; 6-typing.watsup:1009.1-1011.23 rule memory.grow{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1014.1-1016.23 + ;; 6-typing.watsup:1013.1-1015.23 rule memory.fill{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1018.1-1021.27 + ;; 6-typing.watsup:1017.1-1020.27 rule memory.copy{C : context, x_1 : idx, x_2 : idx, mt_1 : memtype, mt_2 : memtype}: `%|-%:%`(C, MEMORY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x_1!`%`_idx.0] = mt_1) -- if (C.MEMS_context[x_2!`%`_idx.0] = mt_2) - ;; 6-typing.watsup:1023.1-1026.24 + ;; 6-typing.watsup:1022.1-1025.24 rule memory.init{C : context, x : idx, y : idx, mt : memtype}: `%|-%:%`(C, MEMORY.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1028.1-1030.24 + ;; 6-typing.watsup:1027.1-1029.24 rule data.drop{C : context, x : idx}: `%|-%:%`(C, DATA.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (C.DATAS_context[x!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1041.1-1044.43 + ;; 6-typing.watsup:1040.1-1043.43 rule load-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(nt : numtype <: valtype)]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1046.1-1049.35 + ;; 6-typing.watsup:1045.1-1048.35 rule load-pack{C : context, Inn : Inn, M : M, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr((Inn : Inn <: numtype), ?(`%%`_loadop_(`%`_sz(M), sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(Inn : Inn <: valtype)]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1060.1-1063.43 + ;; 6-typing.watsup:1059.1-1062.43 rule store-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (nt : numtype <: valtype)]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1065.1-1068.35 + ;; 6-typing.watsup:1064.1-1067.35 rule store-pack{C : context, Inn : Inn, M : M, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr((Inn : Inn <: numtype), ?(`%`_sz(M)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (Inn : Inn <: valtype)]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1070.1-1073.46 + ;; 6-typing.watsup:1069.1-1072.46 rule vload-val{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1075.1-1078.39 + ;; 6-typing.watsup:1074.1-1077.39 rule vload-pack{C : context, M : M, N : N, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(`SHAPE%X%%`_vloadop_(`%`_sz(M), N, sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ((M / 8) * N)) - ;; 6-typing.watsup:1080.1-1083.35 + ;; 6-typing.watsup:1079.1-1082.35 rule vload-splat{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(SPLAT_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1085.1-1088.35 + ;; 6-typing.watsup:1084.1-1087.35 rule vload-zero{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(ZERO_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1090.1-1094.21 + ;; 6-typing.watsup:1089.1-1093.21 rule vload_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VLOAD_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) - ;; 6-typing.watsup:1096.1-1099.46 + ;; 6-typing.watsup:1095.1-1098.46 rule vstore{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VSTORE_instr(V128_vectype, x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1101.1-1105.21 + ;; 6-typing.watsup:1100.1-1104.21 rule vstore_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VSTORE_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) -;; 6-typing.watsup:524.1-524.96 +;; 6-typing.watsup:523.1-523.96 relation Instrs_ok: `%|-%:%`(context, instr*, instrtype) - ;; 6-typing.watsup:537.1-538.24 + ;; 6-typing.watsup:536.1-537.24 rule empty{C : context}: `%|-%:%`(C, [], `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:541.1-545.82 + ;; 6-typing.watsup:540.1-544.82 rule seq{C : context, instr_1 : instr, instr_2* : instr*, t_1* : valtype*, x_1* : idx*, x_2* : idx*, t_3* : valtype*, t_2* : valtype*, init* : init*, t* : valtype*}: `%|-%:%`(C, [instr_1] :: instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx} :: x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) -- Instr_ok: `%|-%:%`(C, instr_1, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- (if (C.LOCALS_context[x_1!`%`_idx.0] = `%%`_localtype(init, t)))*{init : init, t : valtype, x_1 : idx} -- Instrs_ok: `%|-%:%`($with_locals(C, x_1*{x_1 : localidx}, `%%`_localtype(SET_init, t)*{t : valtype}), instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_2*{t_2 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) - ;; 6-typing.watsup:547.1-551.33 + ;; 6-typing.watsup:546.1-550.33 rule sub{C : context, instr* : instr*, it' : instrtype, it : instrtype}: `%|-%:%`(C, instr*{instr : instr}, it') -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, it) -- Instrtype_sub: `%|-%<:%`(C, it, it') -- Instrtype_ok: `%|-%:OK`(C, it') - ;; 6-typing.watsup:554.1-557.33 + ;; 6-typing.watsup:553.1-556.33 rule frame{C : context, instr* : instr*, t* : valtype*, t_1* : valtype*, x* : idx*, t_2* : valtype*}: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t*{t : valtype} :: t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) @@ -17688,13 +17688,13 @@ relation Export_ok: `%|-%:%`(context, export, externtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1297.1-1297.100 +;; 6-typing.watsup:1296.1-1296.100 relation Globals_ok: `%|-%:%`(context, global*, globaltype*) - ;; 6-typing.watsup:1339.1-1340.17 + ;; 6-typing.watsup:1338.1-1339.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1342.1-1345.54 + ;; 6-typing.watsup:1341.1-1344.54 rule cons{C : context, global_1 : global, global : global, gt_1 : globaltype, gt* : globaltype*}: `%|-%:%`(C, [global_1] :: global*{}, [gt_1] :: gt*{gt : globaltype}) -- Global_ok: `%|-%:%`(C, global, gt_1) @@ -17704,13 +17704,13 @@ relation Globals_ok: `%|-%:%`(context, global*, globaltype*) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1296.1-1296.98 +;; 6-typing.watsup:1295.1-1295.98 relation Types_ok: `%|-%:%`(context, type*, deftype*) - ;; 6-typing.watsup:1331.1-1332.17 + ;; 6-typing.watsup:1330.1-1331.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1334.1-1337.49 + ;; 6-typing.watsup:1333.1-1336.49 rule cons{C : context, type_1 : type, type* : type*, dt_1* : deftype*, dt* : deftype*}: `%|-%:%`(C, [type_1] :: type*{type : type}, dt_1*{dt_1 : deftype} :: dt*{dt : deftype}) -- Type_ok: `%|-%:%`(C, type_1, dt_1*{dt_1 : deftype}) @@ -22673,22 +22673,22 @@ syntax context = ;; 6-typing.watsup rec { -;; 6-typing.watsup:37.1-37.86 +;; 6-typing.watsup:36.1-36.86 def $with_locals(context : context, localidx*, localtype*) : context - ;; 6-typing.watsup:39.1-39.34 + ;; 6-typing.watsup:38.1-38.34 def $with_locals{C : context}(C, [], []) = C - ;; 6-typing.watsup:40.1-40.90 + ;; 6-typing.watsup:39.1-39.90 def $with_locals{C : context, x_1 : idx, x* : idx*, lct_1 : localtype, lct* : localtype*}(C, [x_1] :: x*{x : localidx}, [lct_1] :: lct*{lct : localtype}) = $with_locals(C[LOCALS_context[x_1!`%`_idx.0] = lct_1], x*{x : localidx}, lct*{lct : localtype}) } ;; 6-typing.watsup rec { -;; 6-typing.watsup:46.1-46.94 +;; 6-typing.watsup:45.1-45.94 def $clos_deftypes(deftype*) : deftype* - ;; 6-typing.watsup:53.1-53.30 + ;; 6-typing.watsup:52.1-52.30 def $clos_deftypes([]) = [] - ;; 6-typing.watsup:54.1-54.101 + ;; 6-typing.watsup:53.1-53.101 def $clos_deftypes{dt* : deftype*, dt_n : deftype, dt'* : deftype*}(dt*{dt : deftype} :: [dt_n]) = dt'*{dt' : deftype} :: [$subst_all_deftype(dt_n, (dt' : deftype <: heaptype)*{dt' : deftype})] -- if (dt'*{dt' : deftype} = $clos_deftypes(dt*{dt : deftype})) } @@ -22860,104 +22860,104 @@ relation Numtype_sub: `%|-%<:%`(context, numtype, numtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:141.1-141.107 +;; 6-typing.watsup:140.1-140.107 relation Deftype_sub: `%|-%<:%`(context, deftype, deftype) - ;; 6-typing.watsup:452.1-454.66 + ;; 6-typing.watsup:451.1-453.66 rule refl{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($clos_deftype(C, deftype_1) = $clos_deftype(C, deftype_2)) - ;; 6-typing.watsup:456.1-459.49 + ;; 6-typing.watsup:455.1-458.49 rule super{C : context, deftype_1 : deftype, deftype_2 : deftype, fin : fin, typeuse* : typeuse*, ct : comptype, i : nat}: `%|-%<:%`(C, deftype_1, deftype_2) -- if (i < |typeuse*{typeuse : typeuse}|) -- if ($unrolldt(deftype_1) = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) -- Heaptype_sub: `%|-%<:%`(C, (typeuse*{typeuse : typeuse}[i] : typeuse <: heaptype), (deftype_2 : deftype <: heaptype)) -;; 6-typing.watsup:289.1-289.104 +;; 6-typing.watsup:288.1-288.104 relation Heaptype_sub: `%|-%<:%`(context, heaptype, heaptype) - ;; 6-typing.watsup:300.1-301.28 + ;; 6-typing.watsup:299.1-300.28 rule refl{C : context, heaptype : heaptype}: `%|-%<:%`(C, heaptype, heaptype) - ;; 6-typing.watsup:303.1-307.48 + ;; 6-typing.watsup:302.1-306.48 rule trans{C : context, heaptype_1 : heaptype, heaptype_2 : heaptype, heaptype' : heaptype}: `%|-%<:%`(C, heaptype_1, heaptype_2) -- Heaptype_ok: `%|-%:OK`(C, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype_1, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype', heaptype_2) - ;; 6-typing.watsup:309.1-310.17 + ;; 6-typing.watsup:308.1-309.17 rule eq-any{C : context}: `%|-%<:%`(C, EQ_heaptype, ANY_heaptype) - ;; 6-typing.watsup:312.1-313.17 + ;; 6-typing.watsup:311.1-312.17 rule i31-eq{C : context}: `%|-%<:%`(C, I31_heaptype, EQ_heaptype) - ;; 6-typing.watsup:315.1-316.20 + ;; 6-typing.watsup:314.1-315.20 rule struct-eq{C : context}: `%|-%<:%`(C, STRUCT_heaptype, EQ_heaptype) - ;; 6-typing.watsup:318.1-319.19 + ;; 6-typing.watsup:317.1-318.19 rule array-eq{C : context}: `%|-%<:%`(C, ARRAY_heaptype, EQ_heaptype) - ;; 6-typing.watsup:321.1-323.42 + ;; 6-typing.watsup:320.1-322.42 rule struct{C : context, deftype : deftype, fieldtype* : fieldtype*}: `%|-%<:%`(C, (deftype : deftype <: heaptype), STRUCT_heaptype) -- Expand: `%~~%`(deftype, STRUCT_comptype(`%`_structtype(fieldtype*{fieldtype : fieldtype}))) - ;; 6-typing.watsup:325.1-327.40 + ;; 6-typing.watsup:324.1-326.40 rule array{C : context, deftype : deftype, fieldtype : fieldtype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), ARRAY_heaptype) -- Expand: `%~~%`(deftype, ARRAY_comptype(fieldtype)) - ;; 6-typing.watsup:329.1-331.38 + ;; 6-typing.watsup:328.1-330.38 rule func{C : context, deftype : deftype, functype : functype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), FUNC_heaptype) -- Expand: `%~~%`(deftype, FUNC_comptype(functype)) - ;; 6-typing.watsup:333.1-335.46 + ;; 6-typing.watsup:332.1-334.46 rule def{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, (deftype_1 : deftype <: heaptype), (deftype_2 : deftype <: heaptype)) -- Deftype_sub: `%|-%<:%`(C, deftype_1, deftype_2) - ;; 6-typing.watsup:337.1-339.53 + ;; 6-typing.watsup:336.1-338.53 rule typeidx-l{C : context, typeidx : typeidx, heaptype : heaptype}: `%|-%<:%`(C, _IDX_heaptype(typeidx), heaptype) -- if (typeidx!`%`_typeidx.0 < |C.TYPES_context|) -- Heaptype_sub: `%|-%<:%`(C, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype), heaptype) - ;; 6-typing.watsup:341.1-343.53 + ;; 6-typing.watsup:340.1-342.53 rule typeidx-r{C : context, heaptype : heaptype, typeidx : typeidx}: `%|-%<:%`(C, heaptype, _IDX_heaptype(typeidx)) -- if (typeidx!`%`_typeidx.0 < |C.TYPES_context|) -- Heaptype_sub: `%|-%<:%`(C, heaptype, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype)) - ;; 6-typing.watsup:345.1-347.40 + ;; 6-typing.watsup:344.1-346.40 rule rec{C : context, i : nat, typeuse* : typeuse*, j : nat, fin : fin, ct : comptype}: `%|-%<:%`(C, REC_heaptype(i), (typeuse*{typeuse : typeuse}[j] : typeuse <: heaptype)) -- if (i < |C.RECS_context|) -- if (j < |typeuse*{typeuse : typeuse}|) -- if (C.RECS_context[i] = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) - ;; 6-typing.watsup:349.1-351.40 + ;; 6-typing.watsup:348.1-350.40 rule none{C : context, heaptype : heaptype}: `%|-%<:%`(C, NONE_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, ANY_heaptype) - ;; 6-typing.watsup:353.1-355.41 + ;; 6-typing.watsup:352.1-354.41 rule nofunc{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOFUNC_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, FUNC_heaptype) - ;; 6-typing.watsup:357.1-359.43 + ;; 6-typing.watsup:356.1-358.43 rule noextern{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOEXTERN_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, EXTERN_heaptype) - ;; 6-typing.watsup:361.1-362.23 + ;; 6-typing.watsup:360.1-361.23 rule bot{C : context, heaptype : heaptype}: `%|-%<:%`(C, BOT_heaptype, heaptype) } @@ -23108,13 +23108,13 @@ relation Subtype_ok2: `%|-%:%`(context, subtype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:136.1-136.105 +;; 6-typing.watsup:135.1-135.105 relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) - ;; 6-typing.watsup:214.1-215.24 + ;; 6-typing.watsup:213.1-214.24 rule empty{C : context, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidxnat(x, i)) - ;; 6-typing.watsup:217.1-220.55 + ;; 6-typing.watsup:216.1-219.55 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidxnat(x, i)) -- Subtype_ok2: `%|-%:%`(C, subtype_1, OK_oktypeidxnat(x, i)) @@ -23124,19 +23124,19 @@ relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:134.1-134.102 +;; 6-typing.watsup:133.1-133.102 relation Rectype_ok: `%|-%:%`(context, rectype, oktypeidx) - ;; 6-typing.watsup:202.1-203.23 + ;; 6-typing.watsup:201.1-202.23 rule empty{C : context, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidx(x)) - ;; 6-typing.watsup:205.1-208.48 + ;; 6-typing.watsup:204.1-207.48 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Subtype_ok: `%|-%:%`(C, subtype_1, OK_oktypeidx(x)) -- Rectype_ok: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(`%`_typeidx((x!`%`_idx.0 + 1)))) - ;; 6-typing.watsup:210.1-212.60 + ;; 6-typing.watsup:209.1-211.60 rule rec2{C : context, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Rectype_ok2: `%|-%:%`({TYPES [], RECS subtype*{subtype : subtype}, FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [], RETURN ?(), REFS []} ++ C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidxnat(x, 0)) @@ -23290,67 +23290,67 @@ relation Blocktype_ok: `%|-%:%`(context, blocktype, instrtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:523.1-523.95 +;; 6-typing.watsup:522.1-522.95 relation Instr_ok: `%|-%:%`(context, instr, instrtype) - ;; 6-typing.watsup:562.1-563.24 + ;; 6-typing.watsup:561.1-562.24 rule nop{C : context}: `%|-%:%`(C, NOP_instr, `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:565.1-567.42 + ;; 6-typing.watsup:564.1-566.42 rule unreachable{C : context, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, UNREACHABLE_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:569.1-571.29 + ;; 6-typing.watsup:568.1-570.29 rule drop{C : context, t : valtype}: `%|-%:%`(C, DROP_instr, `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:574.1-576.29 + ;; 6-typing.watsup:573.1-575.29 rule select-expl{C : context, t : valtype}: `%|-%:%`(C, `SELECT()%?`_instr(?([t])), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:578.1-582.37 + ;; 6-typing.watsup:577.1-581.37 rule select-impl{C : context, t : valtype, t' : valtype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, `SELECT()%?`_instr(?()), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) -- Valtype_sub: `%|-%<:%`(C, t, t') -- if ((t' = (numtype : numtype <: valtype)) \/ (t' = (vectype : vectype <: valtype))) - ;; 6-typing.watsup:598.1-601.67 + ;; 6-typing.watsup:597.1-600.67 rule block{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, BLOCK_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:603.1-606.67 + ;; 6-typing.watsup:602.1-605.67 rule loop{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, LOOP_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_1*{t_1 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:608.1-612.71 + ;; 6-typing.watsup:607.1-611.71 rule if{C : context, bt : blocktype, instr_1* : instr*, instr_2* : instr*, t_1* : valtype*, t_2* : valtype*, x_1* : idx*, x_2* : idx*}: `%|-%:%`(C, `IF%%ELSE%`_instr(bt, instr_1*{instr_1 : instr}, instr_2*{instr_2 : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_1*{instr_1 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:617.1-620.42 + ;; 6-typing.watsup:616.1-619.42 rule br{C : context, l : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_instr(l), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:622.1-624.25 + ;; 6-typing.watsup:621.1-623.25 rule br_if{C : context, l : labelidx, t* : valtype*}: `%|-%:%`(C, BR_IF_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [I32_valtype]), [], `%`_resulttype(t*{t : valtype}))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) - ;; 6-typing.watsup:626.1-630.42 + ;; 6-typing.watsup:625.1-629.42 rule br_table{C : context, l* : labelidx*, l' : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_TABLE_instr(l*{l : labelidx}, l'), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- (if (l!`%`_labelidx.0 < |C.LABELS_context|))*{l : labelidx} @@ -23359,20 +23359,20 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:632.1-635.31 + ;; 6-typing.watsup:631.1-634.31 rule br_on_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)]))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype})) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:637.1-639.34 + ;; 6-typing.watsup:636.1-638.34 rule br_on_non_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype}))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) -- if (C.LABELS_context[l!`%`_labelidx.0] = `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)])) - ;; 6-typing.watsup:641.1-647.34 + ;; 6-typing.watsup:640.1-646.34 rule br_on_cast{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [($diffrt(rt_1, rt_2) : reftype <: valtype)]))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) @@ -23382,7 +23382,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt) - ;; 6-typing.watsup:649.1-655.49 + ;; 6-typing.watsup:648.1-654.49 rule br_on_cast_fail{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_FAIL_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [(rt_2 : reftype <: valtype)]))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) @@ -23392,19 +23392,19 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) -- Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt) - ;; 6-typing.watsup:660.1-662.47 + ;; 6-typing.watsup:659.1-661.47 rule call{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (x!`%`_idx.0 < |C.FUNCS_context|) -- Expand: `%~~%`(C.FUNCS_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:664.1-666.47 + ;; 6-typing.watsup:663.1-665.47 rule call_ref{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:668.1-672.47 + ;; 6-typing.watsup:667.1-671.47 rule call_indirect{C : context, x : idx, y : idx, t_1* : valtype*, t_2* : valtype*, lim : limits, rt : reftype}: `%|-%:%`(C, CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (x!`%`_idx.0 < |C.TABLES_context|) @@ -23413,13 +23413,13 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype)) -- Expand: `%~~%`(C.TYPES_context[y!`%`_idx.0], FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype})))) - ;; 6-typing.watsup:674.1-677.42 + ;; 6-typing.watsup:673.1-676.42 rule return{C : context, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, RETURN_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (C.RETURN_context = ?(`%`_list(t*{t : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:680.1-685.42 + ;; 6-typing.watsup:679.1-684.42 rule return_call{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (x!`%`_idx.0 < |C.FUNCS_context|) @@ -23428,7 +23428,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:688.1-693.42 + ;; 6-typing.watsup:687.1-692.42 rule return_call_ref{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -23437,7 +23437,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:696.1-704.42 + ;; 6-typing.watsup:695.1-703.42 rule return_call_indirect{C : context, x : idx, y : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, lim : limits, rt : reftype, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (x!`%`_idx.0 < |C.TABLES_context|) @@ -23449,92 +23449,92 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) - ;; 6-typing.watsup:709.1-710.33 + ;; 6-typing.watsup:708.1-709.33 rule const{C : context, nt : numtype, c_nt : num_(nt)}: `%|-%:%`(C, CONST_instr(nt, c_nt), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:712.1-713.34 + ;; 6-typing.watsup:711.1-712.34 rule unop{C : context, nt : numtype, unop_nt : unop_(nt)}: `%|-%:%`(C, UNOP_instr(nt, unop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:715.1-716.39 + ;; 6-typing.watsup:714.1-715.39 rule binop{C : context, nt : numtype, binop_nt : binop_(nt)}: `%|-%:%`(C, BINOP_instr(nt, binop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:718.1-719.39 + ;; 6-typing.watsup:717.1-718.39 rule testop{C : context, nt : numtype, testop_nt : testop_(nt)}: `%|-%:%`(C, TESTOP_instr(nt, testop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:721.1-722.40 + ;; 6-typing.watsup:720.1-721.40 rule relop{C : context, nt : numtype, relop_nt : relop_(nt)}: `%|-%:%`(C, RELOP_instr(nt, relop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:726.1-728.34 + ;; 6-typing.watsup:725.1-727.34 rule cvtop-reinterpret{C : context, nt_1 : numtype, nt_2 : numtype}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, REINTERPRET_cvtop_, ?()), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ($size(nt_1) = $size(nt_2)) - ;; 6-typing.watsup:730.1-732.112 + ;; 6-typing.watsup:729.1-731.112 rule cvtop-convert{C : context, nt_1 : numtype, nt_2 : numtype, sx? : sx?, Inn_1 : Inn, Inn_2 : Inn, Fnn_1 : Fnn, Fnn_2 : Fnn}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, CONVERT_cvtop_, sx?{sx : sx}), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ((sx?{sx : sx} = ?()) <=> ((((nt_1 = (Inn_1 : Inn <: numtype)) /\ (nt_2 = (Inn_2 : Inn <: numtype))) /\ ($size(nt_1) > $size(nt_2))) \/ ((nt_1 = (Fnn_1 : Fnn <: numtype)) /\ (nt_2 = (Fnn_2 : Fnn <: numtype))))) - ;; 6-typing.watsup:737.1-739.31 + ;; 6-typing.watsup:736.1-738.31 rule ref.null{C : context, ht : heaptype}: `%|-%:%`(C, REF.NULL_instr(ht), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:741.1-744.20 + ;; 6-typing.watsup:740.1-743.20 rule ref.func{C : context, x : idx, dt : deftype}: `%|-%:%`(C, REF.FUNC_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), (dt : deftype <: heaptype))]))) -- if (x!`%`_idx.0 < |C.FUNCS_context|) -- if (C.FUNCS_context[x!`%`_idx.0] = dt) -- if x <- C.REFS_context - ;; 6-typing.watsup:746.1-747.34 + ;; 6-typing.watsup:745.1-746.34 rule ref.i31{C : context}: `%|-%:%`(C, REF.I31_instr, `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), I31_heaptype)]))) - ;; 6-typing.watsup:749.1-751.31 + ;; 6-typing.watsup:748.1-750.31 rule ref.is_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.IS_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([I32_valtype]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:753.1-755.31 + ;; 6-typing.watsup:752.1-754.31 rule ref.as_non_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.AS_NON_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:757.1-758.51 + ;; 6-typing.watsup:756.1-757.51 rule ref.eq{C : context}: `%|-%:%`(C, REF.EQ_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype) REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:760.1-764.33 + ;; 6-typing.watsup:759.1-763.33 rule ref.test{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.TEST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([I32_valtype]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:766.1-770.33 + ;; 6-typing.watsup:765.1-769.33 rule ref.cast{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.CAST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_ok: `%|-%:OK`(C, rt') -- Reftype_sub: `%|-%<:%`(C, rt, rt') - ;; 6-typing.watsup:775.1-776.42 + ;; 6-typing.watsup:774.1-775.42 rule i31.get{C : context, sx : sx}: `%|-%:%`(C, I31.GET_instr(sx), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), I31_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:781.1-783.44 + ;; 6-typing.watsup:780.1-782.44 rule struct.new{C : context, x : idx, zt* : storagetype*, mut* : mut*}: `%|-%:%`(C, STRUCT.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)*{zt : storagetype}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- if (|mut*{mut : mut}| = |zt*{zt : storagetype}|) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) - ;; 6-typing.watsup:785.1-788.40 + ;; 6-typing.watsup:784.1-787.40 rule struct.new_default{C : context, x : idx, mut* : mut*, zt* : storagetype*, val* : val*}: `%|-%:%`(C, STRUCT.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -23543,7 +23543,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype}))) -- (if ($default_($unpack(zt)) = ?(val)))*{val : val, zt : storagetype} - ;; 6-typing.watsup:790.1-794.39 + ;; 6-typing.watsup:789.1-793.39 rule struct.get{C : context, sx? : sx?, x : idx, i : nat, zt : storagetype, yt* : fieldtype*, mut : mut}: `%|-%:%`(C, STRUCT.GET_instr(sx?{sx : sx}, x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype([$unpack(zt)]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -23552,7 +23552,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(mut, zt)) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:796.1-799.24 + ;; 6-typing.watsup:795.1-798.24 rule struct.set{C : context, x : idx, i : nat, zt : storagetype, yt* : fieldtype*}: `%|-%:%`(C, STRUCT.SET_instr(x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) $unpack(zt)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -23560,26 +23560,26 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], STRUCT_comptype(`%`_structtype(yt*{yt : fieldtype}))) -- if (yt*{yt : fieldtype}[i] = `%%`_fieldtype(`MUT%?`_mut(?(())), zt)) - ;; 6-typing.watsup:804.1-806.42 + ;; 6-typing.watsup:803.1-805.42 rule array.new{C : context, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype([$unpack(zt) I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:808.1-811.37 + ;; 6-typing.watsup:807.1-810.37 rule array.new_default{C : context, x : idx, mut : mut, zt : storagetype, val : val}: `%|-%:%`(C, ARRAY.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ($default_($unpack(zt)) = ?(val)) - ;; 6-typing.watsup:813.1-815.42 + ;; 6-typing.watsup:812.1-814.42 rule array.new_fixed{C : context, x : idx, n : n, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_FIXED_instr(x, `%`_u32(n)), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)^n{}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) - ;; 6-typing.watsup:817.1-820.40 + ;; 6-typing.watsup:816.1-819.40 rule array.new_elem{C : context, x : idx, y : idx, mut : mut, rt : reftype}: `%|-%:%`(C, ARRAY.NEW_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -23587,7 +23587,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, (rt : reftype <: storagetype)))) -- Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt) - ;; 6-typing.watsup:822.1-826.24 + ;; 6-typing.watsup:821.1-825.24 rule array.new_data{C : context, x : idx, y : idx, mut : mut, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.NEW_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -23596,32 +23596,32 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:828.1-831.39 + ;; 6-typing.watsup:827.1-830.39 rule array.get{C : context, sx? : sx?, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.GET_instr(sx?{sx : sx}, x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype]), [], `%`_resulttype([$unpack(zt)]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt))) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:833.1-835.42 + ;; 6-typing.watsup:832.1-834.42 rule array.set{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:837.1-839.42 + ;; 6-typing.watsup:836.1-838.42 rule array.len{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.LEN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ARRAY_heaptype)]), [], `%`_resulttype([I32_valtype]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:841.1-843.42 + ;; 6-typing.watsup:840.1-842.42 rule array.fill{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt) I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:845.1-849.40 + ;; 6-typing.watsup:844.1-848.40 rule array.copy{C : context, x_1 : idx, x_2 : idx, zt_1 : storagetype, mut : mut, zt_2 : storagetype}: `%|-%:%`(C, ARRAY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x_1) : typevar <: heaptype)) I32_valtype REF_valtype(`NULL%?`_nul(?(())), ($idx(x_2) : typevar <: heaptype)) I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x_1!`%`_idx.0 < |C.TYPES_context|) @@ -23630,7 +23630,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Expand: `%~~%`(C.TYPES_context[x_2!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(mut, zt_2))) -- Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1) - ;; 6-typing.watsup:851.1-854.44 + ;; 6-typing.watsup:850.1-853.44 rule array.init_elem{C : context, x : idx, y : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.INIT_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -23638,7 +23638,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Expand: `%~~%`(C.TYPES_context[x!`%`_idx.0], ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) -- Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt) - ;; 6-typing.watsup:856.1-860.24 + ;; 6-typing.watsup:855.1-859.24 rule array.init_data{C : context, x : idx, y : idx, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.INIT_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -23647,158 +23647,158 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (($unpack(zt) = (numtype : numtype <: valtype)) \/ ($unpack(zt) = (vectype : vectype <: valtype))) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:865.1-866.62 + ;; 6-typing.watsup:864.1-865.62 rule extern.convert_any{C : context, nul : nul}: `%|-%:%`(C, EXTERN.CONVERT_ANY_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, ANY_heaptype)]), [], `%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]))) - ;; 6-typing.watsup:868.1-869.62 + ;; 6-typing.watsup:867.1-868.62 rule any.convert_extern{C : context, nul : nul}: `%|-%:%`(C, ANY.CONVERT_EXTERN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]), [], `%`_resulttype([REF_valtype(nul, ANY_heaptype)]))) - ;; 6-typing.watsup:874.1-875.35 + ;; 6-typing.watsup:873.1-874.35 rule vconst{C : context, c : vec_(V128_Vnn)}: `%|-%:%`(C, VCONST_instr(V128_vectype, c), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:877.1-878.41 + ;; 6-typing.watsup:876.1-877.41 rule vvunop{C : context, vvunop : vvunop}: `%|-%:%`(C, VVUNOP_instr(V128_vectype, vvunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:880.1-881.48 + ;; 6-typing.watsup:879.1-880.48 rule vvbinop{C : context, vvbinop : vvbinop}: `%|-%:%`(C, VVBINOP_instr(V128_vectype, vvbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:883.1-884.55 + ;; 6-typing.watsup:882.1-883.55 rule vvternop{C : context, vvternop : vvternop}: `%|-%:%`(C, VVTERNOP_instr(V128_vectype, vvternop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:886.1-887.44 + ;; 6-typing.watsup:885.1-886.44 rule vvtestop{C : context, vvtestop : vvtestop}: `%|-%:%`(C, VVTESTOP_instr(V128_vectype, vvtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:889.1-890.37 + ;; 6-typing.watsup:888.1-889.37 rule vunop{C : context, sh : shape, vunop : vunop_(sh)}: `%|-%:%`(C, VUNOP_instr(sh, vunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:892.1-893.44 + ;; 6-typing.watsup:891.1-892.44 rule vbinop{C : context, sh : shape, vbinop : vbinop_(sh)}: `%|-%:%`(C, VBINOP_instr(sh, vbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:895.1-896.40 + ;; 6-typing.watsup:894.1-895.40 rule vtestop{C : context, sh : shape, vtestop : vtestop_(sh)}: `%|-%:%`(C, VTESTOP_instr(sh, vtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:898.1-899.44 + ;; 6-typing.watsup:897.1-898.44 rule vrelop{C : context, sh : shape, vrelop : vrelop_(sh)}: `%|-%:%`(C, VRELOP_instr(sh, vrelop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:901.1-902.47 + ;; 6-typing.watsup:900.1-901.47 rule vshiftop{C : context, sh : ishape, vshiftop : vshiftop_(sh)}: `%|-%:%`(C, VSHIFTOP_instr(sh, vshiftop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype I32_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:904.1-905.33 + ;; 6-typing.watsup:903.1-904.33 rule vbitmask{C : context, sh : ishape}: `%|-%:%`(C, VBITMASK_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:907.1-908.39 + ;; 6-typing.watsup:906.1-907.39 rule vswizzle{C : context, sh : ishape}: `%|-%:%`(C, VSWIZZLE_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:910.1-912.29 + ;; 6-typing.watsup:909.1-911.29 rule vshuffle{C : context, sh : ishape, i* : nat*}: `%|-%:%`(C, VSHUFFLE_instr(sh, `%`_laneidx(i)*{i : nat}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- (if (i < (2 * $dim((sh : ishape <: shape))!`%`_dim.0)))*{i : nat} - ;; 6-typing.watsup:914.1-915.44 + ;; 6-typing.watsup:913.1-914.44 rule vsplat{C : context, sh : shape}: `%|-%:%`(C, VSPLAT_instr(sh), `%->_%%`_instrtype(`%`_resulttype([($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:918.1-920.21 + ;; 6-typing.watsup:917.1-919.21 rule vextract_lane{C : context, sh : shape, sx? : sx?, i : nat}: `%|-%:%`(C, VEXTRACT_LANE_instr(sh, sx?{sx : sx}, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([($unpackshape(sh) : numtype <: valtype)]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:922.1-924.21 + ;; 6-typing.watsup:921.1-923.21 rule vreplace_lane{C : context, sh : shape, i : nat}: `%|-%:%`(C, VREPLACE_LANE_instr(sh, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype ($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:926.1-927.53 + ;; 6-typing.watsup:925.1-926.53 rule vextunop{C : context, sh_1 : ishape, sh_2 : ishape, vextunop : vextunop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTUNOP_instr(sh_1, sh_2, vextunop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:929.1-930.60 + ;; 6-typing.watsup:928.1-929.60 rule vextbinop{C : context, sh_1 : ishape, sh_2 : ishape, vextbinop : vextbinop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTBINOP_instr(sh_1, sh_2, vextbinop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:932.1-933.48 + ;; 6-typing.watsup:931.1-932.48 rule vnarrow{C : context, sh_1 : ishape, sh_2 : ishape, sx : sx}: `%|-%:%`(C, VNARROW_instr(sh_1, sh_2, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:935.1-936.62 + ;; 6-typing.watsup:934.1-935.62 rule vcvtop{C : context, sh_1 : shape, sh_2 : shape, vcvtop : vcvtop_(sh_2, sh_1), half? : half_(sh_2, sh_1)?, sx? : sx?, zero? : zero_(sh_2, sh_1)?}: `%|-%:%`(C, VCVTOP_instr(sh_1, sh_2, vcvtop, half?{half : half_(sh_2, sh_1)}, sx?{sx : sx}, zero?{zero : zero_(sh_2, sh_1)}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:941.1-943.28 + ;; 6-typing.watsup:940.1-942.28 rule local.get{C : context, x : idx, t : valtype}: `%|-%:%`(C, LOCAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (x!`%`_idx.0 < |C.LOCALS_context|) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(SET_init, t)) - ;; 6-typing.watsup:945.1-947.29 + ;; 6-typing.watsup:944.1-946.29 rule local.set{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.LOCALS_context|) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:949.1-951.29 + ;; 6-typing.watsup:948.1-950.29 rule local.tee{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.TEE_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([t]))) -- if (x!`%`_idx.0 < |C.LOCALS_context|) -- if (C.LOCALS_context[x!`%`_idx.0] = `%%`_localtype(init, t)) - ;; 6-typing.watsup:956.1-958.29 + ;; 6-typing.watsup:955.1-957.29 rule global.get{C : context, x : idx, t : valtype, mut : mut}: `%|-%:%`(C, GLOBAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (x!`%`_idx.0 < |C.GLOBALS_context|) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(mut, t)) - ;; 6-typing.watsup:960.1-962.29 + ;; 6-typing.watsup:959.1-961.29 rule global.set{C : context, x : idx, t : valtype}: `%|-%:%`(C, GLOBAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.GLOBALS_context|) -- if (C.GLOBALS_context[x!`%`_idx.0] = `%%`_globaltype(`MUT%?`_mut(?(())), t)) - ;; 6-typing.watsup:967.1-969.29 + ;; 6-typing.watsup:966.1-968.29 rule table.get{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:971.1-973.29 + ;; 6-typing.watsup:970.1-972.29 rule table.set{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:975.1-977.29 + ;; 6-typing.watsup:974.1-976.29 rule table.size{C : context, x : idx, lim : limits, rt : reftype}: `%|-%:%`(C, TABLE.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:979.1-981.29 + ;; 6-typing.watsup:978.1-980.29 rule table.grow{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([(rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:983.1-985.29 + ;; 6-typing.watsup:982.1-984.29 rule table.fill{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- if (C.TABLES_context[x!`%`_idx.0] = `%%`_tabletype(lim, rt)) - ;; 6-typing.watsup:987.1-991.36 + ;; 6-typing.watsup:986.1-990.36 rule table.copy{C : context, x_1 : idx, x_2 : idx, lim_1 : limits, rt_1 : reftype, lim_2 : limits, rt_2 : reftype}: `%|-%:%`(C, TABLE.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x_1!`%`_idx.0 < |C.TABLES_context|) @@ -23807,7 +23807,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (C.TABLES_context[x_2!`%`_idx.0] = `%%`_tabletype(lim_2, rt_2)) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:993.1-997.36 + ;; 6-typing.watsup:992.1-996.36 rule table.init{C : context, x : idx, y : idx, lim : limits, rt_1 : reftype, rt_2 : reftype}: `%|-%:%`(C, TABLE.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) @@ -23816,31 +23816,31 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (C.ELEMS_context[y!`%`_idx.0] = rt_2) -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:999.1-1001.24 + ;; 6-typing.watsup:998.1-1000.24 rule elem.drop{C : context, x : idx, rt : reftype}: `%|-%:%`(C, ELEM.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.ELEMS_context|) -- if (C.ELEMS_context[x!`%`_idx.0] = rt) - ;; 6-typing.watsup:1006.1-1008.23 + ;; 6-typing.watsup:1005.1-1007.23 rule memory.size{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1010.1-1012.23 + ;; 6-typing.watsup:1009.1-1011.23 rule memory.grow{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1014.1-1016.23 + ;; 6-typing.watsup:1013.1-1015.23 rule memory.fill{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) - ;; 6-typing.watsup:1018.1-1021.27 + ;; 6-typing.watsup:1017.1-1020.27 rule memory.copy{C : context, x_1 : idx, x_2 : idx, mt_1 : memtype, mt_2 : memtype}: `%|-%:%`(C, MEMORY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x_1!`%`_idx.0 < |C.MEMS_context|) @@ -23848,7 +23848,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (C.MEMS_context[x_1!`%`_idx.0] = mt_1) -- if (C.MEMS_context[x_2!`%`_idx.0] = mt_2) - ;; 6-typing.watsup:1023.1-1026.24 + ;; 6-typing.watsup:1022.1-1025.24 rule memory.init{C : context, x : idx, y : idx, mt : memtype}: `%|-%:%`(C, MEMORY.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) @@ -23856,69 +23856,69 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1028.1-1030.24 + ;; 6-typing.watsup:1027.1-1029.24 rule data.drop{C : context, x : idx}: `%|-%:%`(C, DATA.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.DATAS_context|) -- if (C.DATAS_context[x!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1041.1-1044.43 + ;; 6-typing.watsup:1040.1-1043.43 rule load-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(nt : numtype <: valtype)]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1046.1-1049.35 + ;; 6-typing.watsup:1045.1-1048.35 rule load-pack{C : context, Inn : Inn, M : M, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr((Inn : Inn <: numtype), ?(`%%`_loadop_(`%`_sz(M), sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(Inn : Inn <: valtype)]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1060.1-1063.43 + ;; 6-typing.watsup:1059.1-1062.43 rule store-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (nt : numtype <: valtype)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) - ;; 6-typing.watsup:1065.1-1068.35 + ;; 6-typing.watsup:1064.1-1067.35 rule store-pack{C : context, Inn : Inn, M : M, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr((Inn : Inn <: numtype), ?(`%`_sz(M)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (Inn : Inn <: valtype)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) - ;; 6-typing.watsup:1070.1-1073.46 + ;; 6-typing.watsup:1069.1-1072.46 rule vload-val{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1075.1-1078.39 + ;; 6-typing.watsup:1074.1-1077.39 rule vload-pack{C : context, M : M, N : N, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(`SHAPE%X%%`_vloadop_(`%`_sz(M), N, sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ((M / 8) * N)) - ;; 6-typing.watsup:1080.1-1083.35 + ;; 6-typing.watsup:1079.1-1082.35 rule vload-splat{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(SPLAT_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1085.1-1088.35 + ;; 6-typing.watsup:1084.1-1087.35 rule vload-zero{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(ZERO_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) - ;; 6-typing.watsup:1090.1-1094.21 + ;; 6-typing.watsup:1089.1-1093.21 rule vload_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VLOAD_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) @@ -23926,14 +23926,14 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) - ;; 6-typing.watsup:1096.1-1099.46 + ;; 6-typing.watsup:1095.1-1098.46 rule vstore{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VSTORE_instr(V128_vectype, x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if (C.MEMS_context[x!`%`_idx.0] = mt) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) - ;; 6-typing.watsup:1101.1-1105.21 + ;; 6-typing.watsup:1100.1-1104.21 rule vstore_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VSTORE_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) @@ -23941,13 +23941,13 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- if (i < (128 / N)) -;; 6-typing.watsup:524.1-524.96 +;; 6-typing.watsup:523.1-523.96 relation Instrs_ok: `%|-%:%`(context, instr*, instrtype) - ;; 6-typing.watsup:537.1-538.24 + ;; 6-typing.watsup:536.1-537.24 rule empty{C : context}: `%|-%:%`(C, [], `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:541.1-545.82 + ;; 6-typing.watsup:540.1-544.82 rule seq{C : context, instr_1 : instr, instr_2* : instr*, t_1* : valtype*, x_1* : idx*, x_2* : idx*, t_3* : valtype*, t_2* : valtype*, init* : init*, t* : valtype*}: `%|-%:%`(C, [instr_1] :: instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx} :: x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) -- if (|init*{init : init}| = |t*{t : valtype}|) @@ -23957,14 +23957,14 @@ relation Instrs_ok: `%|-%:%`(context, instr*, instrtype) -- (if (C.LOCALS_context[x_1!`%`_idx.0] = `%%`_localtype(init, t)))*{init : init, t : valtype, x_1 : idx} -- Instrs_ok: `%|-%:%`($with_locals(C, x_1*{x_1 : localidx}, `%%`_localtype(SET_init, t)*{t : valtype}), instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_2*{t_2 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) - ;; 6-typing.watsup:547.1-551.33 + ;; 6-typing.watsup:546.1-550.33 rule sub{C : context, instr* : instr*, it' : instrtype, it : instrtype}: `%|-%:%`(C, instr*{instr : instr}, it') -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, it) -- Instrtype_sub: `%|-%<:%`(C, it, it') -- Instrtype_ok: `%|-%:OK`(C, it') - ;; 6-typing.watsup:554.1-557.33 + ;; 6-typing.watsup:553.1-556.33 rule frame{C : context, instr* : instr*, t* : valtype*, t_1* : valtype*, x* : idx*, t_2* : valtype*}: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t*{t : valtype} :: t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) @@ -24210,13 +24210,13 @@ relation Export_ok: `%|-%:%`(context, export, externtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1297.1-1297.100 +;; 6-typing.watsup:1296.1-1296.100 relation Globals_ok: `%|-%:%`(context, global*, globaltype*) - ;; 6-typing.watsup:1339.1-1340.17 + ;; 6-typing.watsup:1338.1-1339.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1342.1-1345.54 + ;; 6-typing.watsup:1341.1-1344.54 rule cons{C : context, global_1 : global, global : global, gt_1 : globaltype, gt* : globaltype*}: `%|-%:%`(C, [global_1] :: global*{}, [gt_1] :: gt*{gt : globaltype}) -- Global_ok: `%|-%:%`(C, global, gt_1) @@ -24226,13 +24226,13 @@ relation Globals_ok: `%|-%:%`(context, global*, globaltype*) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1296.1-1296.98 +;; 6-typing.watsup:1295.1-1295.98 relation Types_ok: `%|-%:%`(context, type*, deftype*) - ;; 6-typing.watsup:1331.1-1332.17 + ;; 6-typing.watsup:1330.1-1331.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1334.1-1337.49 + ;; 6-typing.watsup:1333.1-1336.49 rule cons{C : context, type_1 : type, type* : type*, dt_1* : deftype*, dt* : deftype*}: `%|-%:%`(C, [type_1] :: type*{type : type}, dt_1*{dt_1 : deftype} :: dt*{dt : deftype}) -- Type_ok: `%|-%:%`(C, type_1, dt_1*{dt_1 : deftype}) @@ -29255,22 +29255,22 @@ syntax context = ;; 6-typing.watsup rec { -;; 6-typing.watsup:37.1-37.86 +;; 6-typing.watsup:36.1-36.86 def $with_locals(context : context, localidx*, localtype*) : context - ;; 6-typing.watsup:39.1-39.34 + ;; 6-typing.watsup:38.1-38.34 def $with_locals{C : context}(C, [], []) = C - ;; 6-typing.watsup:40.1-40.90 + ;; 6-typing.watsup:39.1-39.90 def $with_locals{C : context, x_1 : idx, x* : idx*, lct_1 : localtype, lct* : localtype*}(C, [x_1] :: x*{x : localidx}, [lct_1] :: lct*{lct : localtype}) = $with_locals(C[LOCALS_context[x_1!`%`_idx.0] = lct_1], x*{x : localidx}, lct*{lct : localtype}) } ;; 6-typing.watsup rec { -;; 6-typing.watsup:46.1-46.94 +;; 6-typing.watsup:45.1-45.94 def $clos_deftypes(deftype*) : deftype* - ;; 6-typing.watsup:53.1-53.30 + ;; 6-typing.watsup:52.1-52.30 def $clos_deftypes([]) = [] - ;; 6-typing.watsup:54.1-54.101 + ;; 6-typing.watsup:53.1-53.101 def $clos_deftypes{dt* : deftype*, dt_n : deftype, dt'* : deftype*}(dt*{dt : deftype} :: [dt_n]) = dt'*{dt' : deftype} :: [$subst_all_deftype(dt_n, (dt' : deftype <: heaptype)*{dt' : deftype})] -- where dt'*{dt' : deftype} = $clos_deftypes(dt*{dt : deftype}) } @@ -29442,104 +29442,104 @@ relation Numtype_sub: `%|-%<:%`(context, numtype, numtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:141.1-141.107 +;; 6-typing.watsup:140.1-140.107 relation Deftype_sub: `%|-%<:%`(context, deftype, deftype) - ;; 6-typing.watsup:452.1-454.66 + ;; 6-typing.watsup:451.1-453.66 rule refl{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, deftype_1, deftype_2) -- if ($clos_deftype(C, deftype_1) = $clos_deftype(C, deftype_2)) - ;; 6-typing.watsup:456.1-459.49 + ;; 6-typing.watsup:455.1-458.49 rule super{C : context, deftype_1 : deftype, deftype_2 : deftype, fin : fin, typeuse* : typeuse*, ct : comptype, i : nat}: `%|-%<:%`(C, deftype_1, deftype_2) -- if (i < |typeuse*{typeuse : typeuse}|) -- if ($unrolldt(deftype_1) = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) -- Heaptype_sub: `%|-%<:%`(C, (typeuse*{typeuse : typeuse}[i] : typeuse <: heaptype), (deftype_2 : deftype <: heaptype)) -;; 6-typing.watsup:289.1-289.104 +;; 6-typing.watsup:288.1-288.104 relation Heaptype_sub: `%|-%<:%`(context, heaptype, heaptype) - ;; 6-typing.watsup:300.1-301.28 + ;; 6-typing.watsup:299.1-300.28 rule refl{C : context, heaptype : heaptype}: `%|-%<:%`(C, heaptype, heaptype) - ;; 6-typing.watsup:303.1-307.48 + ;; 6-typing.watsup:302.1-306.48 rule trans{C : context, heaptype_1 : heaptype, heaptype_2 : heaptype, heaptype' : heaptype}: `%|-%<:%`(C, heaptype_1, heaptype_2) -- Heaptype_ok: `%|-%:OK`(C, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype_1, heaptype') -- Heaptype_sub: `%|-%<:%`(C, heaptype', heaptype_2) - ;; 6-typing.watsup:309.1-310.17 + ;; 6-typing.watsup:308.1-309.17 rule eq-any{C : context}: `%|-%<:%`(C, EQ_heaptype, ANY_heaptype) - ;; 6-typing.watsup:312.1-313.17 + ;; 6-typing.watsup:311.1-312.17 rule i31-eq{C : context}: `%|-%<:%`(C, I31_heaptype, EQ_heaptype) - ;; 6-typing.watsup:315.1-316.20 + ;; 6-typing.watsup:314.1-315.20 rule struct-eq{C : context}: `%|-%<:%`(C, STRUCT_heaptype, EQ_heaptype) - ;; 6-typing.watsup:318.1-319.19 + ;; 6-typing.watsup:317.1-318.19 rule array-eq{C : context}: `%|-%<:%`(C, ARRAY_heaptype, EQ_heaptype) - ;; 6-typing.watsup:321.1-323.42 + ;; 6-typing.watsup:320.1-322.42 rule struct{C : context, deftype : deftype, fieldtype* : fieldtype*}: `%|-%<:%`(C, (deftype : deftype <: heaptype), STRUCT_heaptype) -- Expand: `%~~%`(deftype, STRUCT_comptype(`%`_structtype(fieldtype*{fieldtype : fieldtype}))) - ;; 6-typing.watsup:325.1-327.40 + ;; 6-typing.watsup:324.1-326.40 rule array{C : context, deftype : deftype, fieldtype : fieldtype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), ARRAY_heaptype) -- Expand: `%~~%`(deftype, ARRAY_comptype(fieldtype)) - ;; 6-typing.watsup:329.1-331.38 + ;; 6-typing.watsup:328.1-330.38 rule func{C : context, deftype : deftype, functype : functype}: `%|-%<:%`(C, (deftype : deftype <: heaptype), FUNC_heaptype) -- Expand: `%~~%`(deftype, FUNC_comptype(functype)) - ;; 6-typing.watsup:333.1-335.46 + ;; 6-typing.watsup:332.1-334.46 rule def{C : context, deftype_1 : deftype, deftype_2 : deftype}: `%|-%<:%`(C, (deftype_1 : deftype <: heaptype), (deftype_2 : deftype <: heaptype)) -- Deftype_sub: `%|-%<:%`(C, deftype_1, deftype_2) - ;; 6-typing.watsup:337.1-339.53 + ;; 6-typing.watsup:336.1-338.53 rule typeidx-l{C : context, typeidx : typeidx, heaptype : heaptype}: `%|-%<:%`(C, _IDX_heaptype(typeidx), heaptype) -- if (typeidx!`%`_typeidx.0 < |C.TYPES_context|) -- Heaptype_sub: `%|-%<:%`(C, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype), heaptype) - ;; 6-typing.watsup:341.1-343.53 + ;; 6-typing.watsup:340.1-342.53 rule typeidx-r{C : context, heaptype : heaptype, typeidx : typeidx}: `%|-%<:%`(C, heaptype, _IDX_heaptype(typeidx)) -- if (typeidx!`%`_typeidx.0 < |C.TYPES_context|) -- Heaptype_sub: `%|-%<:%`(C, heaptype, (C.TYPES_context[typeidx!`%`_typeidx.0] : deftype <: heaptype)) - ;; 6-typing.watsup:345.1-347.40 + ;; 6-typing.watsup:344.1-346.40 rule rec{C : context, i : nat, typeuse* : typeuse*, j : nat, fin : fin, ct : comptype}: `%|-%<:%`(C, REC_heaptype(i), (typeuse*{typeuse : typeuse}[j] : typeuse <: heaptype)) -- if (i < |C.RECS_context|) -- if (j < |typeuse*{typeuse : typeuse}|) -- if (C.RECS_context[i] = SUB_subtype(fin, typeuse*{typeuse : typeuse}, ct)) - ;; 6-typing.watsup:349.1-351.40 + ;; 6-typing.watsup:348.1-350.40 rule none{C : context, heaptype : heaptype}: `%|-%<:%`(C, NONE_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, ANY_heaptype) - ;; 6-typing.watsup:353.1-355.41 + ;; 6-typing.watsup:352.1-354.41 rule nofunc{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOFUNC_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, FUNC_heaptype) - ;; 6-typing.watsup:357.1-359.43 + ;; 6-typing.watsup:356.1-358.43 rule noextern{C : context, heaptype : heaptype}: `%|-%<:%`(C, NOEXTERN_heaptype, heaptype) -- Heaptype_sub: `%|-%<:%`(C, heaptype, EXTERN_heaptype) - ;; 6-typing.watsup:361.1-362.23 + ;; 6-typing.watsup:360.1-361.23 rule bot{C : context, heaptype : heaptype}: `%|-%<:%`(C, BOT_heaptype, heaptype) } @@ -29690,13 +29690,13 @@ relation Subtype_ok2: `%|-%:%`(context, subtype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:136.1-136.105 +;; 6-typing.watsup:135.1-135.105 relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) - ;; 6-typing.watsup:214.1-215.24 + ;; 6-typing.watsup:213.1-214.24 rule empty{C : context, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidxnat(x, i)) - ;; 6-typing.watsup:217.1-220.55 + ;; 6-typing.watsup:216.1-219.55 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx, i : nat}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidxnat(x, i)) -- Rectype_ok2: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidxnat(`%`_typeidx((x!`%`_idx.0 + 1)), (i + 1))) @@ -29706,19 +29706,19 @@ relation Rectype_ok2: `%|-%:%`(context, rectype, oktypeidxnat) ;; 6-typing.watsup rec { -;; 6-typing.watsup:134.1-134.102 +;; 6-typing.watsup:133.1-133.102 relation Rectype_ok: `%|-%:%`(context, rectype, oktypeidx) - ;; 6-typing.watsup:202.1-203.23 + ;; 6-typing.watsup:201.1-202.23 rule empty{C : context, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([])), OK_oktypeidx(x)) - ;; 6-typing.watsup:205.1-208.48 + ;; 6-typing.watsup:204.1-207.48 rule cons{C : context, subtype_1 : subtype, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list([subtype_1] :: subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Rectype_ok: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(`%`_typeidx((x!`%`_idx.0 + 1)))) -- Subtype_ok: `%|-%:%`(C, subtype_1, OK_oktypeidx(x)) - ;; 6-typing.watsup:210.1-212.60 + ;; 6-typing.watsup:209.1-211.60 rule rec2{C : context, subtype* : subtype*, x : idx}: `%|-%:%`(C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidx(x)) -- Rectype_ok2: `%|-%:%`({TYPES [], RECS subtype*{subtype : subtype}, FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [], RETURN ?(), REFS []} ++ C, REC_rectype(`%`_list(subtype*{subtype : subtype})), OK_oktypeidxnat(x, 0)) @@ -29873,74 +29873,74 @@ relation Blocktype_ok: `%|-%:%`(context, blocktype, instrtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:523.1-523.95 +;; 6-typing.watsup:522.1-522.95 relation Instr_ok: `%|-%:%`(context, instr, instrtype) - ;; 6-typing.watsup:562.1-563.24 + ;; 6-typing.watsup:561.1-562.24 rule nop{C : context}: `%|-%:%`(C, NOP_instr, `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:565.1-567.42 + ;; 6-typing.watsup:564.1-566.42 rule unreachable{C : context, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, UNREACHABLE_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:569.1-571.29 + ;; 6-typing.watsup:568.1-570.29 rule drop{C : context, t : valtype}: `%|-%:%`(C, DROP_instr, `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:574.1-576.29 + ;; 6-typing.watsup:573.1-575.29 rule select-expl{C : context, t : valtype}: `%|-%:%`(C, `SELECT()%?`_instr(?([t])), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) - ;; 6-typing.watsup:578.1-582.37 + ;; 6-typing.watsup:577.1-581.37 rule select-impl-0{C : context, t : valtype, t' : valtype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, `SELECT()%?`_instr(?()), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) -- Valtype_sub: `%|-%<:%`(C, t, t') -- where (numtype : numtype <: valtype) = t' - ;; 6-typing.watsup:578.1-582.37 + ;; 6-typing.watsup:577.1-581.37 rule select-impl-1{C : context, t : valtype, t' : valtype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, `SELECT()%?`_instr(?()), `%->_%%`_instrtype(`%`_resulttype([t t I32_valtype]), [], `%`_resulttype([t]))) -- Valtype_ok: `%|-%:OK`(C, t) -- Valtype_sub: `%|-%<:%`(C, t, t') -- where (vectype : vectype <: valtype) = t' - ;; 6-typing.watsup:598.1-601.67 + ;; 6-typing.watsup:597.1-600.67 rule block{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, BLOCK_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:603.1-606.67 + ;; 6-typing.watsup:602.1-605.67 rule loop{C : context, bt : blocktype, instr* : instr*, t_1* : valtype*, t_2* : valtype*, x* : idx*}: `%|-%:%`(C, LOOP_instr(bt, instr*{instr : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_1*{t_1 : valtype})], RETURN ?(), REFS []} ++ C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:608.1-612.71 + ;; 6-typing.watsup:607.1-611.71 rule if{C : context, bt : blocktype, instr_1* : instr*, instr_2* : instr*, t_1* : valtype*, t_2* : valtype*, x_1* : idx*, x_2* : idx*}: `%|-%:%`(C, `IF%%ELSE%`_instr(bt, instr_1*{instr_1 : instr}, instr_2*{instr_2 : instr}), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_1*{instr_1 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) -- Blocktype_ok: `%|-%:%`(C, bt, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- Instrs_ok: `%|-%:%`({TYPES [], RECS [], FUNCS [], GLOBALS [], TABLES [], MEMS [], ELEMS [], DATAS [], LOCALS [], LABELS [`%`_resulttype(t_2*{t_2 : valtype})], RETURN ?(), REFS []} ++ C, instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:617.1-620.42 + ;; 6-typing.watsup:616.1-619.42 rule br{C : context, l : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_instr(l), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) -- where `%`_resulttype(t*{t : valtype}) = C.LABELS_context[l!`%`_labelidx.0] -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:622.1-624.25 + ;; 6-typing.watsup:621.1-623.25 rule br_if{C : context, l : labelidx, t* : valtype*}: `%|-%:%`(C, BR_IF_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [I32_valtype]), [], `%`_resulttype(t*{t : valtype}))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) -- where `%`_resulttype(t*{t : valtype}) = C.LABELS_context[l!`%`_labelidx.0] - ;; 6-typing.watsup:626.1-630.42 + ;; 6-typing.watsup:625.1-629.42 rule br_table{C : context, l* : labelidx*, l' : labelidx, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, BR_TABLE_instr(l*{l : labelidx}, l'), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- (if (l!`%`_labelidx.0 < |C.LABELS_context|))*{l : labelidx} @@ -29949,20 +29949,20 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0) -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:632.1-635.31 + ;; 6-typing.watsup:631.1-634.31 rule br_on_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)]))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) -- Heaptype_ok: `%|-%:OK`(C, ht) -- where `%`_resulttype(t*{t : valtype}) = C.LABELS_context[l!`%`_labelidx.0] - ;; 6-typing.watsup:637.1-639.34 + ;; 6-typing.watsup:636.1-638.34 rule br_on_non_null{C : context, l : labelidx, t* : valtype*, ht : heaptype}: `%|-%:%`(C, BR_ON_NON_NULL_instr(l), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype(t*{t : valtype}))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) -- where `%`_resulttype(t*{t : valtype} :: [REF_valtype(`NULL%?`_nul(?()), ht)]) = C.LABELS_context[l!`%`_labelidx.0] - ;; 6-typing.watsup:641.1-647.34 + ;; 6-typing.watsup:640.1-646.34 rule br_on_cast{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [($diffrt(rt_1, rt_2) : reftype <: valtype)]))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) @@ -29972,7 +29972,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)]) = C.LABELS_context[l!`%`_labelidx.0] -- Reftype_sub: `%|-%<:%`(C, rt_2, rt) - ;; 6-typing.watsup:649.1-655.49 + ;; 6-typing.watsup:648.1-654.49 rule br_on_cast_fail{C : context, l : labelidx, rt_1 : reftype, rt_2 : reftype, t* : valtype*, rt : reftype}: `%|-%:%`(C, BR_ON_CAST_FAIL_instr(l, rt_1, rt_2), `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: [(rt_1 : reftype <: valtype)]), [], `%`_resulttype(t*{t : valtype} :: [(rt_2 : reftype <: valtype)]))) -- if (l!`%`_labelidx.0 < |C.LABELS_context|) @@ -29982,19 +29982,19 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where `%`_resulttype(t*{t : valtype} :: [(rt : reftype <: valtype)]) = C.LABELS_context[l!`%`_labelidx.0] -- Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt) - ;; 6-typing.watsup:660.1-662.47 + ;; 6-typing.watsup:659.1-661.47 rule call{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (x!`%`_idx.0 < |C.FUNCS_context|) -- where FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype}))) = $expanddt(C.FUNCS_context[x!`%`_idx.0]) - ;; 6-typing.watsup:664.1-666.47 + ;; 6-typing.watsup:663.1-665.47 rule call_ref{C : context, x : idx, t_1* : valtype*, t_2* : valtype*}: `%|-%:%`(C, CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- where FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype}))) = $expanddt(C.TYPES_context[x!`%`_idx.0]) - ;; 6-typing.watsup:668.1-672.47 + ;; 6-typing.watsup:667.1-671.47 rule call_indirect{C : context, x : idx, y : idx, t_1* : valtype*, t_2* : valtype*, lim : limits, rt : reftype}: `%|-%:%`(C, CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- if (x!`%`_idx.0 < |C.TABLES_context|) @@ -30003,13 +30003,13 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where FUNC_comptype(`%->%`_functype(`%`_resulttype(t_1*{t_1 : valtype}), `%`_resulttype(t_2*{t_2 : valtype}))) = $expanddt(C.TYPES_context[y!`%`_idx.0]) -- Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype)) - ;; 6-typing.watsup:674.1-677.42 + ;; 6-typing.watsup:673.1-676.42 rule return{C : context, t_1* : valtype*, t* : valtype*, t_2* : valtype*}: `%|-%:%`(C, RETURN_instr, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype} :: t*{t : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) -- where ?(`%`_list(t*{t : valtype})) = C.RETURN_context -- Instrtype_ok: `%|-%:OK`(C, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), [], `%`_resulttype(t_2*{t_2 : valtype}))) - ;; 6-typing.watsup:680.1-685.42 + ;; 6-typing.watsup:679.1-684.42 rule return_call{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_instr(x), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype}), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (x!`%`_idx.0 < |C.FUNCS_context|) @@ -30018,7 +30018,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- if (C.RETURN_context = ?(`%`_list(t'_2*{t'_2 : valtype}))) - ;; 6-typing.watsup:688.1-693.42 + ;; 6-typing.watsup:687.1-692.42 rule return_call_ref{C : context, x : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_REF_instr(($idx(x) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30027,7 +30027,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- if (C.RETURN_context = ?(`%`_list(t'_2*{t'_2 : valtype}))) - ;; 6-typing.watsup:696.1-704.42 + ;; 6-typing.watsup:695.1-703.42 rule return_call_indirect{C : context, x : idx, y : idx, t_3* : valtype*, t_1* : valtype*, t_4* : valtype*, lim : limits, rt : reftype, t_2* : valtype*, t'_2* : valtype*}: `%|-%:%`(C, RETURN_CALL_INDIRECT_instr(x, ($idx(y) : typevar <: typeuse)), `%->_%%`_instrtype(`%`_resulttype(t_3*{t_3 : valtype} :: t_1*{t_1 : valtype} :: [I32_valtype]), [], `%`_resulttype(t_4*{t_4 : valtype}))) -- if (x!`%`_idx.0 < |C.TABLES_context|) @@ -30039,92 +30039,92 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype}) -- if (C.RETURN_context = ?(`%`_list(t'_2*{t'_2 : valtype}))) - ;; 6-typing.watsup:709.1-710.33 + ;; 6-typing.watsup:708.1-709.33 rule const{C : context, nt : numtype, c_nt : num_(nt)}: `%|-%:%`(C, CONST_instr(nt, c_nt), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:712.1-713.34 + ;; 6-typing.watsup:711.1-712.34 rule unop{C : context, nt : numtype, unop_nt : unop_(nt)}: `%|-%:%`(C, UNOP_instr(nt, unop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:715.1-716.39 + ;; 6-typing.watsup:714.1-715.39 rule binop{C : context, nt : numtype, binop_nt : binop_(nt)}: `%|-%:%`(C, BINOP_instr(nt, binop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([(nt : numtype <: valtype)]))) - ;; 6-typing.watsup:718.1-719.39 + ;; 6-typing.watsup:717.1-718.39 rule testop{C : context, nt : numtype, testop_nt : testop_(nt)}: `%|-%:%`(C, TESTOP_instr(nt, testop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:721.1-722.40 + ;; 6-typing.watsup:720.1-721.40 rule relop{C : context, nt : numtype, relop_nt : relop_(nt)}: `%|-%:%`(C, RELOP_instr(nt, relop_nt), `%->_%%`_instrtype(`%`_resulttype([(nt : numtype <: valtype) (nt : numtype <: valtype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:726.1-728.34 + ;; 6-typing.watsup:725.1-727.34 rule cvtop-reinterpret{C : context, nt_1 : numtype, nt_2 : numtype}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, REINTERPRET_cvtop_, ?()), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ($size(nt_1) = $size(nt_2)) - ;; 6-typing.watsup:730.1-732.112 + ;; 6-typing.watsup:729.1-731.112 rule cvtop-convert{C : context, nt_1 : numtype, nt_2 : numtype, sx? : sx?, Inn_1 : Inn, Inn_2 : Inn, Fnn_1 : Fnn, Fnn_2 : Fnn}: `%|-%:%`(C, CVTOP_instr(nt_1, nt_2, CONVERT_cvtop_, sx?{sx : sx}), `%->_%%`_instrtype(`%`_resulttype([(nt_2 : numtype <: valtype)]), [], `%`_resulttype([(nt_1 : numtype <: valtype)]))) -- if ((sx?{sx : sx} = ?()) <=> ((((nt_1 = (Inn_1 : Inn <: numtype)) /\ (nt_2 = (Inn_2 : Inn <: numtype))) /\ ($size(nt_1) > $size(nt_2))) \/ ((nt_1 = (Fnn_1 : Fnn <: numtype)) /\ (nt_2 = (Fnn_2 : Fnn <: numtype))))) - ;; 6-typing.watsup:737.1-739.31 + ;; 6-typing.watsup:736.1-738.31 rule ref.null{C : context, ht : heaptype}: `%|-%:%`(C, REF.NULL_instr(ht), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:741.1-744.20 + ;; 6-typing.watsup:740.1-743.20 rule ref.func{C : context, x : idx, dt : deftype}: `%|-%:%`(C, REF.FUNC_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), (dt : deftype <: heaptype))]))) -- if (x!`%`_idx.0 < |C.FUNCS_context|) -- if x <- C.REFS_context -- where dt = C.FUNCS_context[x!`%`_idx.0] - ;; 6-typing.watsup:746.1-747.34 + ;; 6-typing.watsup:745.1-746.34 rule ref.i31{C : context}: `%|-%:%`(C, REF.I31_instr, `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), I31_heaptype)]))) - ;; 6-typing.watsup:749.1-751.31 + ;; 6-typing.watsup:748.1-750.31 rule ref.is_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.IS_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([I32_valtype]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:753.1-755.31 + ;; 6-typing.watsup:752.1-754.31 rule ref.as_non_null{C : context, ht : heaptype}: `%|-%:%`(C, REF.AS_NON_NULL_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ht)]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ht)]))) -- Heaptype_ok: `%|-%:OK`(C, ht) - ;; 6-typing.watsup:757.1-758.51 + ;; 6-typing.watsup:756.1-757.51 rule ref.eq{C : context}: `%|-%:%`(C, REF.EQ_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype) REF_valtype(`NULL%?`_nul(?(())), EQ_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:760.1-764.33 + ;; 6-typing.watsup:759.1-763.33 rule ref.test{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.TEST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([I32_valtype]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_sub: `%|-%<:%`(C, rt, rt') -- Reftype_ok: `%|-%:OK`(C, rt') - ;; 6-typing.watsup:766.1-770.33 + ;; 6-typing.watsup:765.1-769.33 rule ref.cast{C : context, rt : reftype, rt' : reftype}: `%|-%:%`(C, REF.CAST_instr(rt), `%->_%%`_instrtype(`%`_resulttype([(rt' : reftype <: valtype)]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- Reftype_ok: `%|-%:OK`(C, rt) -- Reftype_sub: `%|-%<:%`(C, rt, rt') -- Reftype_ok: `%|-%:OK`(C, rt') - ;; 6-typing.watsup:775.1-776.42 + ;; 6-typing.watsup:774.1-775.42 rule i31.get{C : context, sx : sx}: `%|-%:%`(C, I31.GET_instr(sx), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), I31_heaptype)]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:781.1-783.44 + ;; 6-typing.watsup:780.1-782.44 rule struct.new{C : context, x : idx, zt* : storagetype*, mut* : mut*}: `%|-%:%`(C, STRUCT.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)*{zt : storagetype}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- where STRUCT_comptype(`%`_structtype(`%%`_fieldtype(mut, zt)*{mut : mut, zt : storagetype})) = $expanddt(C.TYPES_context[x!`%`_idx.0]) -- if (|mut*{mut : mut}| = |zt*{zt : storagetype}|) - ;; 6-typing.watsup:785.1-788.40 + ;; 6-typing.watsup:784.1-787.40 rule struct.new_default{C : context, x : idx, mut* : mut*, zt* : storagetype*, val* : val*}: `%|-%:%`(C, STRUCT.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30133,7 +30133,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- (where ?(val) = $default_($unpack(zt)))*{val : val, zt : storagetype} -- if (|val*{val : val}| = |zt*{zt : storagetype}|) - ;; 6-typing.watsup:790.1-794.39 + ;; 6-typing.watsup:789.1-793.39 rule struct.get{C : context, sx? : sx?, x : idx, i : nat, zt : storagetype, yt* : fieldtype*, mut : mut}: `%|-%:%`(C, STRUCT.GET_instr(sx?{sx : sx}, x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype))]), [], `%`_resulttype([$unpack(zt)]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30142,7 +30142,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where `%%`_fieldtype(mut, zt) = yt*{yt : fieldtype}[i] -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:796.1-799.24 + ;; 6-typing.watsup:795.1-798.24 rule struct.set{C : context, x : idx, i : nat, zt : storagetype, yt* : fieldtype*}: `%|-%:%`(C, STRUCT.SET_instr(x, `%`_u32(i)), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) $unpack(zt)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30150,26 +30150,26 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (i < |yt*{yt : fieldtype}|) -- where `%%`_fieldtype(`MUT%?`_mut(?(())), zt) = yt*{yt : fieldtype}[i] - ;; 6-typing.watsup:804.1-806.42 + ;; 6-typing.watsup:803.1-805.42 rule array.new{C : context, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_instr(x), `%->_%%`_instrtype(`%`_resulttype([$unpack(zt) I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- where ARRAY_comptype(`%%`_arraytype(mut, zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) - ;; 6-typing.watsup:808.1-811.37 + ;; 6-typing.watsup:807.1-810.37 rule array.new_default{C : context, x : idx, mut : mut, zt : storagetype, val : val}: `%|-%:%`(C, ARRAY.NEW_DEFAULT_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- where ARRAY_comptype(`%%`_arraytype(mut, zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) -- where ?(val) = $default_($unpack(zt)) - ;; 6-typing.watsup:813.1-815.42 + ;; 6-typing.watsup:812.1-814.42 rule array.new_fixed{C : context, x : idx, n : n, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.NEW_FIXED_instr(x, `%`_u32(n)), `%->_%%`_instrtype(`%`_resulttype($unpack(zt)^n{}), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- where ARRAY_comptype(`%%`_arraytype(mut, zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) - ;; 6-typing.watsup:817.1-820.40 + ;; 6-typing.watsup:816.1-819.40 rule array.new_elem{C : context, x : idx, y : idx, mut : mut, rt : reftype}: `%|-%:%`(C, ARRAY.NEW_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30177,7 +30177,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where ARRAY_comptype(`%%`_arraytype(mut, (rt : reftype <: storagetype))) = $expanddt(C.TYPES_context[x!`%`_idx.0]) -- Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt) - ;; 6-typing.watsup:822.1-826.24 + ;; 6-typing.watsup:821.1-825.24 rule array.new_data-0{C : context, x : idx, y : idx, mut : mut, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.NEW_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30186,7 +30186,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where ARRAY_comptype(`%%`_arraytype(mut, zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) -- where (numtype : numtype <: valtype) = $unpack(zt) - ;; 6-typing.watsup:822.1-826.24 + ;; 6-typing.watsup:821.1-825.24 rule array.new_data-1{C : context, x : idx, y : idx, mut : mut, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.NEW_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype]), [], `%`_resulttype([REF_valtype(`NULL%?`_nul(?()), ($idx(x) : typevar <: heaptype))]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30195,32 +30195,32 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where ARRAY_comptype(`%%`_arraytype(mut, zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) -- where (vectype : vectype <: valtype) = $unpack(zt) - ;; 6-typing.watsup:828.1-831.39 + ;; 6-typing.watsup:827.1-830.39 rule array.get{C : context, sx? : sx?, x : idx, zt : storagetype, mut : mut}: `%|-%:%`(C, ARRAY.GET_instr(sx?{sx : sx}, x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype]), [], `%`_resulttype([$unpack(zt)]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- where ARRAY_comptype(`%%`_arraytype(mut, zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) -- if ((sx?{sx : sx} = ?()) <=> (zt = ($unpack(zt) : valtype <: storagetype))) - ;; 6-typing.watsup:833.1-835.42 + ;; 6-typing.watsup:832.1-834.42 rule array.set{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- where ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) - ;; 6-typing.watsup:837.1-839.42 + ;; 6-typing.watsup:836.1-838.42 rule array.len{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.LEN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ARRAY_heaptype)]), [], `%`_resulttype([I32_valtype]))) -- where $expanddt(C.TYPES_context[x!`%`_idx.0]) = ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt)) -- if (x!`%`_idx.0 < |C.TYPES_context|) - ;; 6-typing.watsup:841.1-843.42 + ;; 6-typing.watsup:840.1-842.42 rule array.fill{C : context, x : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype $unpack(zt) I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) -- where ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) - ;; 6-typing.watsup:845.1-849.40 + ;; 6-typing.watsup:844.1-848.40 rule array.copy{C : context, x_1 : idx, x_2 : idx, zt_1 : storagetype, mut : mut, zt_2 : storagetype}: `%|-%:%`(C, ARRAY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x_1) : typevar <: heaptype)) I32_valtype REF_valtype(`NULL%?`_nul(?(())), ($idx(x_2) : typevar <: heaptype)) I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x_1!`%`_idx.0 < |C.TYPES_context|) @@ -30229,7 +30229,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1) -- if ($expanddt(C.TYPES_context[x_1!`%`_idx.0]) = ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt_1))) - ;; 6-typing.watsup:851.1-854.44 + ;; 6-typing.watsup:850.1-853.44 rule array.init_elem{C : context, x : idx, y : idx, zt : storagetype}: `%|-%:%`(C, ARRAY.INIT_ELEM_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30237,7 +30237,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt) -- if ($expanddt(C.TYPES_context[x!`%`_idx.0]) = ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt))) - ;; 6-typing.watsup:856.1-860.24 + ;; 6-typing.watsup:855.1-859.24 rule array.init_data-0{C : context, x : idx, y : idx, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.INIT_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30246,7 +30246,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) -- where (numtype : numtype <: valtype) = $unpack(zt) - ;; 6-typing.watsup:856.1-860.24 + ;; 6-typing.watsup:855.1-859.24 rule array.init_data-1{C : context, x : idx, y : idx, zt : storagetype, numtype : numtype, vectype : vectype}: `%|-%:%`(C, ARRAY.INIT_DATA_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([REF_valtype(`NULL%?`_nul(?(())), ($idx(x) : typevar <: heaptype)) I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TYPES_context|) @@ -30255,158 +30255,158 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where ARRAY_comptype(`%%`_arraytype(`MUT%?`_mut(?(())), zt)) = $expanddt(C.TYPES_context[x!`%`_idx.0]) -- where (vectype : vectype <: valtype) = $unpack(zt) - ;; 6-typing.watsup:865.1-866.62 + ;; 6-typing.watsup:864.1-865.62 rule extern.convert_any{C : context, nul : nul}: `%|-%:%`(C, EXTERN.CONVERT_ANY_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, ANY_heaptype)]), [], `%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]))) - ;; 6-typing.watsup:868.1-869.62 + ;; 6-typing.watsup:867.1-868.62 rule any.convert_extern{C : context, nul : nul}: `%|-%:%`(C, ANY.CONVERT_EXTERN_instr, `%->_%%`_instrtype(`%`_resulttype([REF_valtype(nul, EXTERN_heaptype)]), [], `%`_resulttype([REF_valtype(nul, ANY_heaptype)]))) - ;; 6-typing.watsup:874.1-875.35 + ;; 6-typing.watsup:873.1-874.35 rule vconst{C : context, c : vec_(V128_Vnn)}: `%|-%:%`(C, VCONST_instr(V128_vectype, c), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:877.1-878.41 + ;; 6-typing.watsup:876.1-877.41 rule vvunop{C : context, vvunop : vvunop}: `%|-%:%`(C, VVUNOP_instr(V128_vectype, vvunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:880.1-881.48 + ;; 6-typing.watsup:879.1-880.48 rule vvbinop{C : context, vvbinop : vvbinop}: `%|-%:%`(C, VVBINOP_instr(V128_vectype, vvbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:883.1-884.55 + ;; 6-typing.watsup:882.1-883.55 rule vvternop{C : context, vvternop : vvternop}: `%|-%:%`(C, VVTERNOP_instr(V128_vectype, vvternop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:886.1-887.44 + ;; 6-typing.watsup:885.1-886.44 rule vvtestop{C : context, vvtestop : vvtestop}: `%|-%:%`(C, VVTESTOP_instr(V128_vectype, vvtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:889.1-890.37 + ;; 6-typing.watsup:888.1-889.37 rule vunop{C : context, sh : shape, vunop : vunop_(sh)}: `%|-%:%`(C, VUNOP_instr(sh, vunop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:892.1-893.44 + ;; 6-typing.watsup:891.1-892.44 rule vbinop{C : context, sh : shape, vbinop : vbinop_(sh)}: `%|-%:%`(C, VBINOP_instr(sh, vbinop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:895.1-896.40 + ;; 6-typing.watsup:894.1-895.40 rule vtestop{C : context, sh : shape, vtestop : vtestop_(sh)}: `%|-%:%`(C, VTESTOP_instr(sh, vtestop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:898.1-899.44 + ;; 6-typing.watsup:897.1-898.44 rule vrelop{C : context, sh : shape, vrelop : vrelop_(sh)}: `%|-%:%`(C, VRELOP_instr(sh, vrelop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:901.1-902.47 + ;; 6-typing.watsup:900.1-901.47 rule vshiftop{C : context, sh : ishape, vshiftop : vshiftop_(sh)}: `%|-%:%`(C, VSHIFTOP_instr(sh, vshiftop), `%->_%%`_instrtype(`%`_resulttype([V128_valtype I32_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:904.1-905.33 + ;; 6-typing.watsup:903.1-904.33 rule vbitmask{C : context, sh : ishape}: `%|-%:%`(C, VBITMASK_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([I32_valtype]))) - ;; 6-typing.watsup:907.1-908.39 + ;; 6-typing.watsup:906.1-907.39 rule vswizzle{C : context, sh : ishape}: `%|-%:%`(C, VSWIZZLE_instr(sh), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:910.1-912.29 + ;; 6-typing.watsup:909.1-911.29 rule vshuffle{C : context, sh : ishape, i* : nat*}: `%|-%:%`(C, VSHUFFLE_instr(sh, `%`_laneidx(i)*{i : nat}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- (if (i < (2 * $dim((sh : ishape <: shape))!`%`_dim.0)))*{i : nat} - ;; 6-typing.watsup:914.1-915.44 + ;; 6-typing.watsup:913.1-914.44 rule vsplat{C : context, sh : shape}: `%|-%:%`(C, VSPLAT_instr(sh), `%->_%%`_instrtype(`%`_resulttype([($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:918.1-920.21 + ;; 6-typing.watsup:917.1-919.21 rule vextract_lane{C : context, sh : shape, sx? : sx?, i : nat}: `%|-%:%`(C, VEXTRACT_LANE_instr(sh, sx?{sx : sx}, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([($unpackshape(sh) : numtype <: valtype)]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:922.1-924.21 + ;; 6-typing.watsup:921.1-923.21 rule vreplace_lane{C : context, sh : shape, i : nat}: `%|-%:%`(C, VREPLACE_LANE_instr(sh, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([V128_valtype ($unpackshape(sh) : numtype <: valtype)]), [], `%`_resulttype([V128_valtype]))) -- if (i < $dim(sh)!`%`_dim.0) - ;; 6-typing.watsup:926.1-927.53 + ;; 6-typing.watsup:925.1-926.53 rule vextunop{C : context, sh_1 : ishape, sh_2 : ishape, vextunop : vextunop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTUNOP_instr(sh_1, sh_2, vextunop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:929.1-930.60 + ;; 6-typing.watsup:928.1-929.60 rule vextbinop{C : context, sh_1 : ishape, sh_2 : ishape, vextbinop : vextbinop_(sh_2, sh_1), sx : sx}: `%|-%:%`(C, VEXTBINOP_instr(sh_1, sh_2, vextbinop, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:932.1-933.48 + ;; 6-typing.watsup:931.1-932.48 rule vnarrow{C : context, sh_1 : ishape, sh_2 : ishape, sx : sx}: `%|-%:%`(C, VNARROW_instr(sh_1, sh_2, sx), `%->_%%`_instrtype(`%`_resulttype([V128_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:935.1-936.62 + ;; 6-typing.watsup:934.1-935.62 rule vcvtop{C : context, sh_1 : shape, sh_2 : shape, vcvtop : vcvtop_(sh_2, sh_1), half? : half_(sh_2, sh_1)?, sx? : sx?, zero? : zero_(sh_2, sh_1)?}: `%|-%:%`(C, VCVTOP_instr(sh_1, sh_2, vcvtop, half?{half : half_(sh_2, sh_1)}, sx?{sx : sx}, zero?{zero : zero_(sh_2, sh_1)}), `%->_%%`_instrtype(`%`_resulttype([V128_valtype]), [], `%`_resulttype([V128_valtype]))) - ;; 6-typing.watsup:941.1-943.28 + ;; 6-typing.watsup:940.1-942.28 rule local.get{C : context, x : idx, t : valtype}: `%|-%:%`(C, LOCAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (x!`%`_idx.0 < |C.LOCALS_context|) -- where `%%`_localtype(SET_init, t) = C.LOCALS_context[x!`%`_idx.0] - ;; 6-typing.watsup:945.1-947.29 + ;; 6-typing.watsup:944.1-946.29 rule local.set{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.LOCALS_context|) -- where `%%`_localtype(init, t) = C.LOCALS_context[x!`%`_idx.0] - ;; 6-typing.watsup:949.1-951.29 + ;; 6-typing.watsup:948.1-950.29 rule local.tee{C : context, x : idx, t : valtype, init : init}: `%|-%:%`(C, LOCAL.TEE_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [x], `%`_resulttype([t]))) -- if (x!`%`_idx.0 < |C.LOCALS_context|) -- where `%%`_localtype(init, t) = C.LOCALS_context[x!`%`_idx.0] - ;; 6-typing.watsup:956.1-958.29 + ;; 6-typing.watsup:955.1-957.29 rule global.get{C : context, x : idx, t : valtype, mut : mut}: `%|-%:%`(C, GLOBAL.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([t]))) -- if (x!`%`_idx.0 < |C.GLOBALS_context|) -- where `%%`_globaltype(mut, t) = C.GLOBALS_context[x!`%`_idx.0] - ;; 6-typing.watsup:960.1-962.29 + ;; 6-typing.watsup:959.1-961.29 rule global.set{C : context, x : idx, t : valtype}: `%|-%:%`(C, GLOBAL.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([t]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.GLOBALS_context|) -- where `%%`_globaltype(`MUT%?`_mut(?(())), t) = C.GLOBALS_context[x!`%`_idx.0] - ;; 6-typing.watsup:967.1-969.29 + ;; 6-typing.watsup:966.1-968.29 rule table.get{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(rt : reftype <: valtype)]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- where `%%`_tabletype(lim, rt) = C.TABLES_context[x!`%`_idx.0] - ;; 6-typing.watsup:971.1-973.29 + ;; 6-typing.watsup:970.1-972.29 rule table.set{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.SET_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- where `%%`_tabletype(lim, rt) = C.TABLES_context[x!`%`_idx.0] - ;; 6-typing.watsup:975.1-977.29 + ;; 6-typing.watsup:974.1-976.29 rule table.size{C : context, x : idx, lim : limits, rt : reftype}: `%|-%:%`(C, TABLE.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- where `%%`_tabletype(lim, rt) = C.TABLES_context[x!`%`_idx.0] - ;; 6-typing.watsup:979.1-981.29 + ;; 6-typing.watsup:978.1-980.29 rule table.grow{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([(rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- where `%%`_tabletype(lim, rt) = C.TABLES_context[x!`%`_idx.0] - ;; 6-typing.watsup:983.1-985.29 + ;; 6-typing.watsup:982.1-984.29 rule table.fill{C : context, x : idx, rt : reftype, lim : limits}: `%|-%:%`(C, TABLE.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (rt : reftype <: valtype) I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) -- where `%%`_tabletype(lim, rt) = C.TABLES_context[x!`%`_idx.0] - ;; 6-typing.watsup:987.1-991.36 + ;; 6-typing.watsup:986.1-990.36 rule table.copy{C : context, x_1 : idx, x_2 : idx, lim_1 : limits, rt_1 : reftype, lim_2 : limits, rt_2 : reftype}: `%|-%:%`(C, TABLE.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x_1!`%`_idx.0 < |C.TABLES_context|) @@ -30415,7 +30415,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where `%%`_tabletype(lim_2, rt_2) = C.TABLES_context[x_2!`%`_idx.0] -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:993.1-997.36 + ;; 6-typing.watsup:992.1-996.36 rule table.init{C : context, x : idx, y : idx, lim : limits, rt_1 : reftype, rt_2 : reftype}: `%|-%:%`(C, TABLE.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.TABLES_context|) @@ -30424,31 +30424,31 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where `%%`_tabletype(lim, rt_1) = C.TABLES_context[x!`%`_idx.0] -- Reftype_sub: `%|-%<:%`(C, rt_2, rt_1) - ;; 6-typing.watsup:999.1-1001.24 + ;; 6-typing.watsup:998.1-1000.24 rule elem.drop{C : context, x : idx, rt : reftype}: `%|-%:%`(C, ELEM.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.ELEMS_context|) -- where rt = C.ELEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1006.1-1008.23 + ;; 6-typing.watsup:1005.1-1007.23 rule memory.size{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.SIZE_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([I32_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1010.1-1012.23 + ;; 6-typing.watsup:1009.1-1011.23 rule memory.grow{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.GROW_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([I32_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1014.1-1016.23 + ;; 6-typing.watsup:1013.1-1015.23 rule memory.fill{C : context, x : idx, mt : memtype}: `%|-%:%`(C, MEMORY.FILL_instr(x), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1018.1-1021.27 + ;; 6-typing.watsup:1017.1-1020.27 rule memory.copy{C : context, x_1 : idx, x_2 : idx, mt_1 : memtype, mt_2 : memtype}: `%|-%:%`(C, MEMORY.COPY_instr(x_1, x_2), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x_1!`%`_idx.0 < |C.MEMS_context|) @@ -30456,7 +30456,7 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- where mt_1 = C.MEMS_context[x_1!`%`_idx.0] -- where mt_2 = C.MEMS_context[x_2!`%`_idx.0] - ;; 6-typing.watsup:1023.1-1026.24 + ;; 6-typing.watsup:1022.1-1025.24 rule memory.init{C : context, x : idx, y : idx, mt : memtype}: `%|-%:%`(C, MEMORY.INIT_instr(x, y), `%->_%%`_instrtype(`%`_resulttype([I32_valtype I32_valtype I32_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) @@ -30464,69 +30464,69 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (C.DATAS_context[y!`%`_idx.0] = OK_datatype) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1028.1-1030.24 + ;; 6-typing.watsup:1027.1-1029.24 rule data.drop{C : context, x : idx}: `%|-%:%`(C, DATA.DROP_instr(x), `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.DATAS_context|) -- if (C.DATAS_context[x!`%`_idx.0] = OK_datatype) - ;; 6-typing.watsup:1041.1-1044.43 + ;; 6-typing.watsup:1040.1-1043.43 rule load-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(nt : numtype <: valtype)]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1046.1-1049.35 + ;; 6-typing.watsup:1045.1-1048.35 rule load-pack{C : context, Inn : Inn, M : M, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, LOAD_instr((Inn : Inn <: numtype), ?(`%%`_loadop_(`%`_sz(M), sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([(Inn : Inn <: valtype)]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1060.1-1063.43 + ;; 6-typing.watsup:1059.1-1062.43 rule store-val{C : context, nt : numtype, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr(nt, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (nt : numtype <: valtype)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($size(nt) / 8)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1065.1-1068.35 + ;; 6-typing.watsup:1064.1-1067.35 rule store-pack{C : context, Inn : Inn, M : M, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, STORE_instr((Inn : Inn <: numtype), ?(`%`_sz(M)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype (Inn : Inn <: valtype)]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (M / 8)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1070.1-1073.46 + ;; 6-typing.watsup:1069.1-1072.46 rule vload-val{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1075.1-1078.39 + ;; 6-typing.watsup:1074.1-1077.39 rule vload-pack{C : context, M : M, N : N, sx : sx, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(`SHAPE%X%%`_vloadop_(`%`_sz(M), N, sx)), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ((M / 8) * N)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1080.1-1083.35 + ;; 6-typing.watsup:1079.1-1082.35 rule vload-splat{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(SPLAT_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1085.1-1088.35 + ;; 6-typing.watsup:1084.1-1087.35 rule vload-zero{C : context, N : N, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VLOAD_instr(V128_vectype, ?(ZERO_vloadop_(`%`_sz(N))), x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= (N / 8)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1090.1-1094.21 + ;; 6-typing.watsup:1089.1-1093.21 rule vload_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VLOAD_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([V128_valtype]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) @@ -30534,14 +30534,14 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (i < (128 / N)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1096.1-1099.46 + ;; 6-typing.watsup:1095.1-1098.46 rule vstore{C : context, x : idx, memarg : memarg, mt : memtype}: `%|-%:%`(C, VSTORE_instr(V128_vectype, x, memarg), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) -- if ((2 ^ memarg.ALIGN_memarg!`%`_u32.0) <= ($vsize(V128_vectype) / 8)) -- where mt = C.MEMS_context[x!`%`_idx.0] - ;; 6-typing.watsup:1101.1-1105.21 + ;; 6-typing.watsup:1100.1-1104.21 rule vstore_lane{C : context, N : N, x : idx, memarg : memarg, i : nat, mt : memtype}: `%|-%:%`(C, VSTORE_LANE_instr(V128_vectype, `%`_sz(N), x, memarg, `%`_laneidx(i)), `%->_%%`_instrtype(`%`_resulttype([I32_valtype V128_valtype]), [], `%`_resulttype([]))) -- if (x!`%`_idx.0 < |C.MEMS_context|) @@ -30549,13 +30549,13 @@ relation Instr_ok: `%|-%:%`(context, instr, instrtype) -- if (i < (128 / N)) -- where mt = C.MEMS_context[x!`%`_idx.0] -;; 6-typing.watsup:524.1-524.96 +;; 6-typing.watsup:523.1-523.96 relation Instrs_ok: `%|-%:%`(context, instr*, instrtype) - ;; 6-typing.watsup:537.1-538.24 + ;; 6-typing.watsup:536.1-537.24 rule empty{C : context}: `%|-%:%`(C, [], `%->_%%`_instrtype(`%`_resulttype([]), [], `%`_resulttype([]))) - ;; 6-typing.watsup:541.1-545.82 + ;; 6-typing.watsup:540.1-544.82 rule seq{C : context, instr_1 : instr, instr_2* : instr*, t_1* : valtype*, x_1* : idx*, x_2* : idx*, t_3* : valtype*, t_2* : valtype*, init* : init*, t* : valtype*}: `%|-%:%`(C, [instr_1] :: instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx} :: x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) -- Instr_ok: `%|-%:%`(C, instr_1, `%->_%%`_instrtype(`%`_resulttype(t_1*{t_1 : valtype}), x_1*{x_1 : localidx}, `%`_resulttype(t_2*{t_2 : valtype}))) @@ -30565,14 +30565,14 @@ relation Instrs_ok: `%|-%:%`(context, instr*, instrtype) -- (if (C.LOCALS_context[x_1!`%`_idx.0] = `%%`_localtype(init, t)))*{init : init, t : valtype, x_1 : idx} -- Instrs_ok: `%|-%:%`($with_locals(C, x_1*{x_1 : localidx}, `%%`_localtype(SET_init, t)*{t : valtype}), instr_2*{instr_2 : instr}, `%->_%%`_instrtype(`%`_resulttype(t_2*{t_2 : valtype}), x_2*{x_2 : localidx}, `%`_resulttype(t_3*{t_3 : valtype}))) - ;; 6-typing.watsup:547.1-551.33 + ;; 6-typing.watsup:546.1-550.33 rule sub{C : context, instr* : instr*, it' : instrtype, it : instrtype}: `%|-%:%`(C, instr*{instr : instr}, it') -- Instrs_ok: `%|-%:%`(C, instr*{instr : instr}, it) -- Instrtype_ok: `%|-%:OK`(C, it') -- Instrtype_sub: `%|-%<:%`(C, it, it') - ;; 6-typing.watsup:554.1-557.33 + ;; 6-typing.watsup:553.1-556.33 rule frame{C : context, instr* : instr*, t* : valtype*, t_1* : valtype*, x* : idx*, t_2* : valtype*}: `%|-%:%`(C, instr*{instr : instr}, `%->_%%`_instrtype(`%`_resulttype(t*{t : valtype} :: t_1*{t_1 : valtype}), x*{x : localidx}, `%`_resulttype(t*{t : valtype} :: t_2*{t_2 : valtype}))) -- Resulttype_ok: `%|-%:OK`(C, `%`_resulttype(t*{t : valtype})) @@ -30818,13 +30818,13 @@ relation Export_ok: `%|-%:%`(context, export, externtype) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1297.1-1297.100 +;; 6-typing.watsup:1296.1-1296.100 relation Globals_ok: `%|-%:%`(context, global*, globaltype*) - ;; 6-typing.watsup:1339.1-1340.17 + ;; 6-typing.watsup:1338.1-1339.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1342.1-1345.54 + ;; 6-typing.watsup:1341.1-1344.54 rule cons{C : context, global_1 : global, global : global, gt_1 : globaltype, gt* : globaltype*}: `%|-%:%`(C, [global_1] :: global*{}, [gt_1] :: gt*{gt : globaltype}) -- Global_ok: `%|-%:%`(C, global, gt_1) @@ -30834,13 +30834,13 @@ relation Globals_ok: `%|-%:%`(context, global*, globaltype*) ;; 6-typing.watsup rec { -;; 6-typing.watsup:1296.1-1296.98 +;; 6-typing.watsup:1295.1-1295.98 relation Types_ok: `%|-%:%`(context, type*, deftype*) - ;; 6-typing.watsup:1331.1-1332.17 + ;; 6-typing.watsup:1330.1-1331.17 rule empty{C : context}: `%|-%:%`(C, [], []) - ;; 6-typing.watsup:1334.1-1337.49 + ;; 6-typing.watsup:1333.1-1336.49 rule cons{C : context, type_1 : type, type* : type*, dt_1* : deftype*, dt* : deftype*}: `%|-%:%`(C, [type_1] :: type*{type : type}, dt_1*{dt_1 : deftype} :: dt*{dt : deftype}) -- Type_ok: `%|-%:%`(C, type_1, dt_1*{dt_1 : deftype}) diff --git a/spectec/test-prose/TEST.md b/spectec/test-prose/TEST.md index e576c2f030..e112ed1e51 100644 --- a/spectec/test-prose/TEST.md +++ b/spectec/test-prose/TEST.md @@ -3638,25 +3638,25 @@ watsup 0.4 generator 8-reduction.watsup:227.12-227.36: translate_rulepr: Yet `(`%;%`_config(z, instr*{instr : instr}), `%;%`_config(z', instr'*{instr' : instr}))` 8-reduction.watsup:231.12-231.44: translate_rulepr: Yet `(`%;%`_config(`%;%`_state(s, f'), instr*{instr : instr}), `%;%`_config(`%;%`_state(s', f'), instr'*{instr' : instr}))` == Prose Generation... -6-typing.watsup:628.7-628.45: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l!`%`_labelidx.0]!`%`_resulttype.0)` -6-typing.watsup:629.6-629.45: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0)` -6-typing.watsup:646.6-646.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` -6-typing.watsup:647.6-647.34: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt)` -6-typing.watsup:654.6-654.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` -6-typing.watsup:655.6-655.49: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt)` -6-typing.watsup:671.6-671.45: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype))` -6-typing.watsup:684.6-684.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` -6-typing.watsup:692.6-692.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` -6-typing.watsup:699.6-699.45: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype))` -6-typing.watsup:703.6-703.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` -6-typing.watsup:764.6-764.33: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, rt')` -6-typing.watsup:770.6-770.33: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, rt')` -6-typing.watsup:788.7-788.38: prem_to_instrs: Yet `where ?(val) = $default_($unpack(zt))` -6-typing.watsup:820.6-820.40: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt)` -6-typing.watsup:849.6-849.40: prem_to_instrs: Yet `Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1)` -6-typing.watsup:854.6-854.44: prem_to_instrs: Yet `Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt)` -6-typing.watsup:991.6-991.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` -6-typing.watsup:997.6-997.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` +6-typing.watsup:627.7-627.45: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l!`%`_labelidx.0]!`%`_resulttype.0)` +6-typing.watsup:628.6-628.45: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0)` +6-typing.watsup:645.6-645.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` +6-typing.watsup:646.6-646.34: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt)` +6-typing.watsup:653.6-653.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` +6-typing.watsup:654.6-654.49: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt)` +6-typing.watsup:670.6-670.45: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype))` +6-typing.watsup:683.6-683.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` +6-typing.watsup:691.6-691.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` +6-typing.watsup:698.6-698.45: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype))` +6-typing.watsup:702.6-702.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` +6-typing.watsup:763.6-763.33: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, rt')` +6-typing.watsup:769.6-769.33: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, rt')` +6-typing.watsup:787.7-787.38: prem_to_instrs: Yet `where ?(val) = $default_($unpack(zt))` +6-typing.watsup:819.6-819.40: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt)` +6-typing.watsup:848.6-848.40: prem_to_instrs: Yet `Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1)` +6-typing.watsup:853.6-853.44: prem_to_instrs: Yet `Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt)` +6-typing.watsup:990.6-990.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` +6-typing.watsup:996.6-996.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` ================= Generated prose ================= diff --git a/spectec/test-splice/TEST.md b/spectec/test-splice/TEST.md index 96cc2dbd2c..72f2cf972f 100644 --- a/spectec/test-splice/TEST.md +++ b/spectec/test-splice/TEST.md @@ -13,25 +13,25 @@ $ (../src/exe-watsup/main.exe ../spec/wasm-3.0/*.watsup -l --splice-latex -p spe ../spec/wasm-3.0/8-reduction.watsup:227.12-227.36: translate_rulepr: Yet `(`%;%`_config(z, instr*{instr : instr}), `%;%`_config(z', instr'*{instr' : instr}))` ../spec/wasm-3.0/8-reduction.watsup:231.12-231.44: translate_rulepr: Yet `(`%;%`_config(`%;%`_state(s, f'), instr*{instr : instr}), `%;%`_config(`%;%`_state(s', f'), instr'*{instr' : instr}))` == Prose Generation... -../spec/wasm-3.0/6-typing.watsup:628.7-628.45: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l!`%`_labelidx.0]!`%`_resulttype.0)` -../spec/wasm-3.0/6-typing.watsup:629.6-629.45: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0)` -../spec/wasm-3.0/6-typing.watsup:646.6-646.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` -../spec/wasm-3.0/6-typing.watsup:647.6-647.34: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt)` -../spec/wasm-3.0/6-typing.watsup:654.6-654.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` -../spec/wasm-3.0/6-typing.watsup:655.6-655.49: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt)` -../spec/wasm-3.0/6-typing.watsup:671.6-671.45: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype))` -../spec/wasm-3.0/6-typing.watsup:684.6-684.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` -../spec/wasm-3.0/6-typing.watsup:692.6-692.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` -../spec/wasm-3.0/6-typing.watsup:699.6-699.45: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype))` -../spec/wasm-3.0/6-typing.watsup:703.6-703.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` -../spec/wasm-3.0/6-typing.watsup:764.6-764.33: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, rt')` -../spec/wasm-3.0/6-typing.watsup:770.6-770.33: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, rt')` -../spec/wasm-3.0/6-typing.watsup:788.7-788.38: prem_to_instrs: Yet `where ?(val) = $default_($unpack(zt))` -../spec/wasm-3.0/6-typing.watsup:820.6-820.40: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt)` -../spec/wasm-3.0/6-typing.watsup:849.6-849.40: prem_to_instrs: Yet `Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1)` -../spec/wasm-3.0/6-typing.watsup:854.6-854.44: prem_to_instrs: Yet `Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt)` -../spec/wasm-3.0/6-typing.watsup:991.6-991.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` -../spec/wasm-3.0/6-typing.watsup:997.6-997.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` +../spec/wasm-3.0/6-typing.watsup:627.7-627.45: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l!`%`_labelidx.0]!`%`_resulttype.0)` +../spec/wasm-3.0/6-typing.watsup:628.6-628.45: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t*{t : valtype}, C.LABELS_context[l'!`%`_labelidx.0]!`%`_resulttype.0)` +../spec/wasm-3.0/6-typing.watsup:645.6-645.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` +../spec/wasm-3.0/6-typing.watsup:646.6-646.34: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt)` +../spec/wasm-3.0/6-typing.watsup:653.6-653.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` +../spec/wasm-3.0/6-typing.watsup:654.6-654.49: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, $diffrt(rt_1, rt_2), rt)` +../spec/wasm-3.0/6-typing.watsup:670.6-670.45: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype))` +../spec/wasm-3.0/6-typing.watsup:683.6-683.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` +../spec/wasm-3.0/6-typing.watsup:691.6-691.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` +../spec/wasm-3.0/6-typing.watsup:698.6-698.45: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, REF_reftype(`NULL%?`_nul(?(())), FUNC_heaptype))` +../spec/wasm-3.0/6-typing.watsup:702.6-702.40: prem_to_instrs: Yet `Resulttype_sub: `%|-%<:%`(C, t_2*{t_2 : valtype}, t'_2*{t'_2 : valtype})` +../spec/wasm-3.0/6-typing.watsup:763.6-763.33: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, rt')` +../spec/wasm-3.0/6-typing.watsup:769.6-769.33: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt, rt')` +../spec/wasm-3.0/6-typing.watsup:787.7-787.38: prem_to_instrs: Yet `where ?(val) = $default_($unpack(zt))` +../spec/wasm-3.0/6-typing.watsup:819.6-819.40: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, C.ELEMS_context[y!`%`_idx.0], rt)` +../spec/wasm-3.0/6-typing.watsup:848.6-848.40: prem_to_instrs: Yet `Storagetype_sub: `%|-%<:%`(C, zt_2, zt_1)` +../spec/wasm-3.0/6-typing.watsup:853.6-853.44: prem_to_instrs: Yet `Storagetype_sub: `%|-%<:%`(C, (C.ELEMS_context[y!`%`_idx.0] : reftype <: storagetype), zt)` +../spec/wasm-3.0/6-typing.watsup:990.6-990.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` +../spec/wasm-3.0/6-typing.watsup:996.6-996.36: prem_to_instrs: Yet `Reftype_sub: `%|-%<:%`(C, rt_2, rt_1)` == Splicing... \documentclass[a4paper]{scrartcl} @@ -129,21 +129,21 @@ C \vdash \epsilon : \epsilon \rightarrow \epsilon } \qquad \frac{ -C \vdash {\mathit{instr}}_1 : {t_1^\ast}~{\rightarrow}_{({x_1^\ast})}\,{t_2^\ast} +C \vdash {\mathit{instr}}_1 : {t_1^\ast} \rightarrow_{{x_1^\ast}} {t_2^\ast} \qquad (C{.}\mathsf{locals}{}[x_1] = {\mathit{init}}~t)^\ast \qquad -C{}[{.}\mathsf{local}{}[{x_1^\ast}] = {(\mathsf{set}~t)^\ast}] \vdash {{\mathit{instr}}_2^\ast} : {t_2^\ast}~{\rightarrow}_{({x_2^\ast})}\,{t_3^\ast} +C{}[{.}\mathsf{local}{}[{x_1^\ast}] = {(\mathsf{set}~t)^\ast}] \vdash {{\mathit{instr}}_2^\ast} : {t_2^\ast} \rightarrow_{{x_2^\ast}} {t_3^\ast} }{ -C \vdash {\mathit{instr}}_1~{{\mathit{instr}}_2^\ast} : {t_1^\ast}~{\rightarrow}_{({x_1^\ast}~{x_2^\ast})}\,{t_3^\ast} +C \vdash {\mathit{instr}}_1~{{\mathit{instr}}_2^\ast} : {t_1^\ast} \rightarrow_{{x_1^\ast}~{x_2^\ast}} {t_3^\ast} } \\[3ex]\displaystyle \frac{ -C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast}~{\rightarrow}_{({x^\ast})}\,{t_2^\ast} +C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast} \rightarrow_{{x^\ast}} {t_2^\ast} \qquad C \vdash {t^\ast} : \mathsf{ok} }{ -C \vdash {{\mathit{instr}}^\ast} : ({t^\ast}~{t_1^\ast})~{\rightarrow}_{({x^\ast})}\,({t^\ast}~{t_2^\ast}) +C \vdash {{\mathit{instr}}^\ast} : ({t^\ast}~{t_1^\ast}) \rightarrow_{{x^\ast}} ({t^\ast}~{t_2^\ast}) } \qquad \end{array} @@ -157,11 +157,11 @@ C \vdash \epsilon : \epsilon \rightarrow \epsilon } \, {[\textsc{\scriptsize T{-}instr*{-}empty}]} \\[3ex]\displaystyle \frac{ -C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast}~{\rightarrow}_{({x^\ast})}\,{t_2^\ast} +C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast} \rightarrow_{{x^\ast}} {t_2^\ast} \qquad C \vdash {t^\ast} : \mathsf{ok} }{ -C \vdash {{\mathit{instr}}^\ast} : ({t^\ast}~{t_1^\ast})~{\rightarrow}_{({x^\ast})}\,({t^\ast}~{t_2^\ast}) +C \vdash {{\mathit{instr}}^\ast} : ({t^\ast}~{t_1^\ast}) \rightarrow_{{x^\ast}} ({t^\ast}~{t_2^\ast}) } \, {[\textsc{\scriptsize T{-}instr*{-}frame}]} \\[3ex]\displaystyle \frac{ @@ -170,11 +170,11 @@ C \vdash \epsilon : \epsilon \rightarrow \epsilon } \, {[\textsc{\scriptsize T{-}instr*{-}empty}]} \qquad \frac{ -C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast}~{\rightarrow}_{({x^\ast})}\,{t_2^\ast} +C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast} \rightarrow_{{x^\ast}} {t_2^\ast} \qquad C \vdash {t^\ast} : \mathsf{ok} }{ -C \vdash {{\mathit{instr}}^\ast} : ({t^\ast}~{t_1^\ast})~{\rightarrow}_{({x^\ast})}\,({t^\ast}~{t_2^\ast}) +C \vdash {{\mathit{instr}}^\ast} : ({t^\ast}~{t_1^\ast}) \rightarrow_{{x^\ast}} ({t^\ast}~{t_2^\ast}) } \, {[\textsc{\scriptsize T{-}instr*{-}frame}]} \qquad \end{array} @@ -208,7 +208,7 @@ $$ C \vdash {\mathit{bt}} : {t_1^\ast} \rightarrow {t_2^\ast} \qquad \{ \begin{array}[t]{@{}l@{}} -\mathsf{labels}~({t_2^\ast}) \}\end{array} \oplus C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast}~{\rightarrow}_{({x^\ast})}\,{t_2^\ast} +\mathsf{labels}~({t_2^\ast}) \}\end{array} \oplus C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast} \rightarrow_{{x^\ast}} {t_2^\ast} }{ C \vdash \mathsf{block}~{\mathit{bt}}~{{\mathit{instr}}^\ast} : {t_1^\ast} \rightarrow {t_2^\ast} } \, {[\textsc{\scriptsize T{-}block}]} @@ -222,7 +222,7 @@ $$ C \vdash {\mathit{bt}} : {t_1^\ast} \rightarrow {t_2^\ast} \qquad \{ \begin{array}[t]{@{}l@{}} -\mathsf{labels}~({t_1^\ast}) \}\end{array} \oplus C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast}~{\rightarrow}_{({x^\ast})}\,{t_2^\ast} +\mathsf{labels}~({t_1^\ast}) \}\end{array} \oplus C \vdash {{\mathit{instr}}^\ast} : {t_1^\ast} \rightarrow_{{x^\ast}} {t_2^\ast} }{ C \vdash \mathsf{loop}~{\mathit{bt}}~{{\mathit{instr}}^\ast} : {t_1^\ast} \rightarrow {t_2^\ast} } \, {[\textsc{\scriptsize T{-}loop}]} @@ -236,10 +236,10 @@ $$ C \vdash {\mathit{bt}} : {t_1^\ast} \rightarrow {t_2^\ast} \qquad \{ \begin{array}[t]{@{}l@{}} -\mathsf{labels}~({t_2^\ast}) \}\end{array} \oplus C \vdash {{\mathit{instr}}_1^\ast} : {t_1^\ast}~{\rightarrow}_{({x_1^\ast})}\,{t_2^\ast} +\mathsf{labels}~({t_2^\ast}) \}\end{array} \oplus C \vdash {{\mathit{instr}}_1^\ast} : {t_1^\ast} \rightarrow_{{x_1^\ast}} {t_2^\ast} \qquad \{ \begin{array}[t]{@{}l@{}} -\mathsf{labels}~({t_2^\ast}) \}\end{array} \oplus C \vdash {{\mathit{instr}}_2^\ast} : {t_1^\ast}~{\rightarrow}_{({x_2^\ast})}\,{t_2^\ast} +\mathsf{labels}~({t_2^\ast}) \}\end{array} \oplus C \vdash {{\mathit{instr}}_2^\ast} : {t_1^\ast} \rightarrow_{{x_2^\ast}} {t_2^\ast} }{ C \vdash \mathsf{if}~{\mathit{bt}}~{{\mathit{instr}}_1^\ast}~\mathsf{else}~{{\mathit{instr}}_2^\ast} : {t_1^\ast}~\mathsf{i{\scriptstyle 32}} \rightarrow {t_2^\ast} } \, {[\textsc{\scriptsize T{-}if}]}