Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
6f44ca2
Fix return_call_indirect for multible tables
rossberg Mar 1, 2023
08d7ccb
Bump actions/download-artifact from 2 to 4.1.7 in /.github/workflows
dependabot[bot] Sep 3, 2024
6e2dfb3
Bump actions/download-artifact from 2 to 4.1.7 in /.github/workflows
dependabot[bot] Sep 3, 2024
9772684
Bump actions/download-artifact from 2 to 4.1.7 in /.github/workflows
dependabot[bot] Sep 3, 2024
6cdb72f
Use consistent upload-artifact
rossberg Sep 4, 2024
3370cfc
Missed one
rossberg Sep 4, 2024
2384c7e
[ci] Bump actions/download-artifact from 2 to 4.1.7 (#559)
rossberg Sep 4, 2024
f26b484
Use consistent upload
rossberg Sep 4, 2024
59174d5
Update ci-spec.yml
rossberg Sep 4, 2024
363ab0c
[ci] Bump node to v20
rossberg Sep 4, 2024
abcd6d1
[ci] Bump upload/download-artifact to v4 (#118)
rossberg Sep 4, 2024
cf8b5aa
Merge pull request #56 from WebAssembly/dependabot/github_actions/dot…
rossberg Sep 4, 2024
d29854b
Fix typing of `array.new` in the index of instructions
fitzgen Sep 19, 2024
671b526
Merge pull request #561 from fitzgen/fix-array-new-typing-in-index
rossberg Sep 19, 2024
8971797
Expand tests for `array.new_data`
fitzgen Sep 27, 2024
f713000
Remove nullability of local
fitzgen Sep 28, 2024
4c10619
Add a couple more out-of-bounds data segment cases
fitzgen Sep 28, 2024
f846dd1
Add an unualigned data segment access test for `array.new_data`
fitzgen Sep 28, 2024
a765a6d
Merge pull request #562 from fitzgen/test-for-out-of-bounds-array-new…
rossberg Sep 28, 2024
b889c63
Test out-of-bounds element segment indexing for `array.new_elem`
fitzgen Sep 28, 2024
e878982
Merge pull request #563 from fitzgen/array-new-elem-out-of-bounds-tests
rossberg Sep 29, 2024
da1e907
Handle negative type codes in wasm-module-builder.js (#335)
thibaudmichaud Oct 7, 2024
1f803e1
Fix test copy/paste typo (#566)
ejrgilbert Oct 25, 2024
88463e8
Fix direction of subtype check for call_indirect
rossberg Oct 31, 2024
525a53c
js-api: Add implementation defined limit of 16GiB for 64-bit memories…
sbc100 Nov 7, 2024
17fa2a0
Typo
rossberg Nov 7, 2024
224a75c
tree not blob
rossberg Nov 7, 2024
2eaecc1
Add spec tests for table maximum >=2^32 (#102)
backes Nov 12, 2024
458c969
Rename variables in Overview.md (#101)
evicy Nov 12, 2024
90cbd50
[spec] Remove lingering one-memory validation rule (#1848)
bvisness Nov 13, 2024
d283b37
Test largest valid initial and max size for memory64 in memory64.wast…
evicy Nov 13, 2024
b737b68
Only validate and don't instantiate large memory (#108)
evicy Nov 14, 2024
0c1cecc
Test largest valid initial size for table32 and table64 in table.wast…
evicy Nov 14, 2024
334f93f
Test largest valid initial size for memory32 in memory.wast (#105)
evicy Nov 14, 2024
e7c7c31
Clarify descriptions of control flow operators (#340)
Liedtke Nov 21, 2024
d1bf45a
Fix exception allocation
rossberg Nov 22, 2024
efa2158
Test array.new_data and array.new_elem with dropped segments (#1849)
tlively Dec 2, 2024
64f0f3a
Add some tests for invalid subtyping due to non-matching field types …
fitzgen Dec 5, 2024
74654a4
Fix xref typo
rossberg Dec 3, 2024
bc57665
Merge branch 'funcref'
rossberg Dec 9, 2024
a50f1a0
Correct element segment type expansion
rossberg Dec 9, 2024
74d2ec8
Add active elemmode type refinement to changes
rossberg Dec 9, 2024
756060f
Merge branch 'funcref'
rossberg Dec 9, 2024
9d91344
Merge remote-tracking branch 'gc/main' into wasm-3.0
rossberg Dec 9, 2024
62893c2
[spec] Update the definition of `tagtype` and its subtyping (#1862)
f52985 Jan 13, 2025
8d4f6aa
README.md: Add note that this proposal is done (#20)
sbc100 Jan 14, 2025
9003cd5
README.md: Add note that this proposal is done
sbc100 Jan 15, 2025
6f95dfe
Merge branch 'upstream' into sync-upstream
rossberg Jan 20, 2025
4ce8cfb
Bump CI versions
rossberg Jan 20, 2025
a7299b2
Merge branch 'upstream' into sync-upstream
rossberg Jan 20, 2025
01ef28e
Merge remote-tracking branch 'addr64/main' into wasm-3.0
rossberg Jan 20, 2025
5087850
Merge remote-tracking branch 'exn/main' into wasm-3.0
rossberg Jan 20, 2025
737d0bc
Merge remote-tracking branch 'extconst/main' into wasm-3.0
rossberg Jan 20, 2025
5bcf4fb
Merge remote-tracking branch 'multimem/main' into wasm-3.0
rossberg Jan 20, 2025
1f3d996
Merge remote-tracking branch 'tailcall/main' into wasm-3.0
rossberg Jan 20, 2025
7052f39
Merge branch 'upstream' into sync-upstream
rossberg Jan 20, 2025
d784f77
Fix CI version
rossberg Jan 20, 2025
28611b0
Reformat some todos
rossberg Jan 21, 2025
579e228
HARDCODE: handle new case for check_type in AL interpreter
f52985 Jan 22, 2025
f2e1e3b
Try to address odd Sphinx CI error with newer Sphinx
rossberg Jan 22, 2025
adc17e1
Try to address more odd Sphinx errors with newer version
rossberg Jan 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .github/workflows/ci-spec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
- name: Setup TexLive
run: sudo apt-get update -y && sudo apt-get install -y latexmk texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended
- name: Setup Sphinx
run: pip install six && pip install sphinx==8.0.0
run: pip install six && pip install sphinx==8.1.3
- name: Build SpecTec
run: cd spectec && opam exec make
- name: Build main spec
Expand Down Expand Up @@ -83,13 +83,13 @@ jobs:
needs: [build-core-spec]
steps:
- name: Checkout repo
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
submodules: "recursive"
- name: Setup TexLive
run: sudo apt-get update -y && sudo apt-get install -y latexmk texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended
- name: Setup Sphinx
run: pip install six && pip install sphinx==8.0.0
run: pip install six && pip install sphinx==8.1.3
- name: Build main spec
run: cd document/metadata/code && make main
- name: Upload artifact
Expand All @@ -102,13 +102,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
submodules: "recursive"
- name: Setup TexLive
run: sudo apt-get update -y && sudo apt-get install -y latexmk texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended
- name: Setup Sphinx
run: pip install six && pip install sphinx==8.0.0
run: pip install six && pip install sphinx==8.1.3
- name: Build main spec
run: cd document/legacy/exceptions/core && make main
- name: Upload artifact
Expand All @@ -121,7 +121,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Setup Bikeshed
run: pip install bikeshed && bikeshed update
- name: Run Bikeshed
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-spectec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@ jobs:
- name: Setup Latex
run: sudo apt-get update -y && sudo apt-get install -y latexmk texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended
- name: Setup Sphinx
run: pip install six && pip install sphinx==8.0.0
run: pip install six && pip install sphinx==8.1.3
- name: Build and test
run: cd spectec && opam exec make ci
12 changes: 7 additions & 5 deletions document/core/appendix/changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ Allowed basic numeric computations in constant expressions. [#proposal-extconst]
- |GLOBALGET| for any previously declared immutable :ref:`global <syntax-global>`

.. note::
The :ref:`garbage collection <extension-gc>` added further constant instructions.
The :ref:`garbage collection <extension-gc>` extension added further constant instructions.


.. index:: instruction, function, call
Expand Down Expand Up @@ -462,6 +462,8 @@ Added more precise types for references. [#proposal-typedref]_

* Refined typing of :ref:`local instructions <valid-instr-variable>` and :ref:`instruction sequences <valid-instrs>` to track the :ref:`initialization status <syntax-init>` of :ref:`locals <syntax-local>` with non-defaultable type

* Refined decoding of :ref:`active <syntax-elemmode>` :ref:`element segments <binary-elem>` with implicit element type and plain function indices (opcode :math:`0`) to produce :ref:`non-nullable <syntax-nullable>` :ref:`reference type <syntax-reftype>`.

* Extended :ref:`table definitions <syntax-table>` with optional initializer expression


Expand Down Expand Up @@ -622,7 +624,7 @@ mirroring the role of custom sections in the binary format. [#proposal-annot]_


.. [#proposal-extconst]
https://github.com/WebAssembly/spec/blob/main/proposals/extended-const/
https://github.com/WebAssembly/spec/tree/main/proposals/extended-const/

.. [#proposal-tailcall]
https://github.com/WebAssembly/spec/tree/main/proposals/tail-call/
Expand All @@ -631,10 +633,10 @@ mirroring the role of custom sections in the binary format. [#proposal-annot]_
https://github.com/WebAssembly/spec/tree/main/proposals/exception-handling/

.. [#proposal-multimem]
https://github.com/WebAssembly/spec/blob/main/proposals/multi-memory/
https://github.com/WebAssembly/spec/tree/main/proposals/multi-memory/

.. [#proposal-addr64]
https://github.com/WebAssembly/spec/blob/main/proposals/memory64/
https://github.com/WebAssembly/spec/tree/main/proposals/memory64/

.. [#proposal-typedref]
https://github.com/WebAssembly/spec/tree/main/proposals/function-references/
Expand All @@ -646,4 +648,4 @@ mirroring the role of custom sections in the binary format. [#proposal-annot]_
https://github.com/WebAssembly/spec/tree/main/proposals/relaxed-simd/

.. [#proposal-annot]
https://github.com/WebAssembly/annotations/tree/main/proposals/annotations/
https://github.com/WebAssembly/spec/tree/main/proposals/annotations/
2 changes: 1 addition & 1 deletion document/core/appendix/index-instructions.py
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ def Instruction(version, name, opcode, type=None, validation=None, execution=Non
Instruction(3.0, r'\STRUCTGETS~x~y', r'\hex{FB}~\hex{03}', r'[(\REF~\NULL~x)] \to [\I32]', r'valid-struct.get', r'exec-struct.get'),
Instruction(3.0, r'\STRUCTGETU~x~y', r'\hex{FB}~\hex{04}', r'[(\REF~\NULL~x)] \to [\I32]', r'valid-struct.get', r'exec-struct.get'),
Instruction(3.0, r'\STRUCTSET~x~y', r'\hex{FB}~\hex{05}', r'[(\REF~\NULL~x)~t] \to []', r'valid-struct.set', r'exec-struct.set'),
Instruction(3.0, r'\ARRAYNEW~x', r'\hex{FB}~\hex{06}', r'[t] \to [(\REF~x)]', r'valid-array.new', r'exec-array.new'),
Instruction(3.0, r'\ARRAYNEW~x', r'\hex{FB}~\hex{06}', r'[t~\I32] \to [(\REF~x)]', r'valid-array.new', r'exec-array.new'),
Instruction(3.0, r'\ARRAYNEWDEFAULT~x', r'\hex{FB}~\hex{07}', r'[\I32] \to [(\REF~x)]', r'valid-array.new', r'exec-array.new'),
Instruction(3.0, r'\ARRAYNEWFIXED~x~n', r'\hex{FB}~\hex{08}', r'[t^n] \to [(\REF~x)]', r'valid-array.new_fixed', r'exec-array.new_fixed'),
Instruction(3.0, r'\ARRAYNEWDATA~x~y', r'\hex{FB}~\hex{09}', r'[\I32~\I32] \to [(\REF~x)]', r'valid-array.new_data', r'exec-array.new_data'),
Expand Down
67 changes: 19 additions & 48 deletions document/core/exec/instructions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,8 @@ $${rule: {Step_pure/ref.eq-*}}

$${rule-prose: Step_read/ref.test}

.. todo::
Below is the actual prose.
(9) Need to handle RulePr s \|- ref : rt properly in prose instead of $ref_type_of
.. todo:: (9) Need to handle RulePr s \|- ref : rt properly in prose instead of $ref_type_of
Below is the actual prose.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -229,9 +228,8 @@ $${rule: {Step_read/ref.test-*}}

$${rule-prose: Step_read/ref.cast}

.. todo::
.. todo:: (9) Need to handle RulePr s \|- ref : rt properly in prose instead of $ref_type_of
Below is the actual prose.
(9) Need to handle RulePr s \|- ref : rt properly in prose instead of $ref_type_of

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -269,10 +267,8 @@ $${rule: {Step_pure/ref.i31}}

$${rule-prose: Step_pure/i31.get}

.. todo::
.. todo:: (3) Introduce if-let instruction instead of "is of the case". (4) Guarantees from validation can help simplify the prose.
Below is the actual prose.
(3) Introduce if-let instruction instead of "is of the case".
(4) Guarantees from validation can help simplify the prose.

1. Assert: due to :ref:`validation <valid-i31.get_sx>`, a :ref:`value <syntax-val>` of :ref:`type <syntax-valtype>` :math:`(\REF~\NULL~\I31)` is on the top of the stack.

Expand All @@ -297,10 +293,8 @@ $${rule: {Step_pure/i31.get-*}}

$${rule-prose: Step/struct.new}

.. todo::
.. todo:: (3') Introduce let binding instead of "is of the case". (5) Use "the expansion of" instead of $expand function application.
Below is the actual prose.
(3') Introduce let binding instead of "is of the case".
(5) Use "the expansion of" instead of $expand function application.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -339,10 +333,8 @@ $${rule: {Step/struct.new}}

$${rule-prose: Step_read/struct.new_default}

.. todo::
.. todo:: (3') Introduce let binding instead of "is of the case". (5) Use "the expansion of" instead of $expand function application.
Below is the actual prose.
(3') Introduce let binding instead of "is of the case".
(5) Use "the expansion of" instead of $expand function application.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -374,10 +366,8 @@ $${rule: {Step_read/struct.new_default}}

$${rule-prose: Step_read/struct.get}

.. todo::
.. todo:: (3) Introduce if-let instruction instead of "is of the case". (5) Use "the expansion of" instead of $expand function application.
Below is the actual prose.
(3) Introduce if-let instruction instead of "is of the case".
(5) Use "the expansion of" instead of $expand function application.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -418,10 +408,8 @@ $${rule: {Step_read/struct.get-*}}

$${rule-prose: Step/struct.set}

.. todo::
.. todo:: (3) Introduce if-let instruction instead of "is of the case". (5) Use "the expansion of" instead of $expand function application.
Below is the actual prose.
(3) Introduce if-let instruction instead of "is of the case".
(5) Use "the expansion of" instead of $expand function application.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -471,10 +459,8 @@ $${rule: {Step_pure/array.new}}

$${rule-prose: Step_read/array.new_default}

.. todo::
.. todo:: (3') Introduce let binding instead of "is of the case". (5) Use "the expansion of" instead of $expand function application.
Below is the actual prose.
(3') Introduce let binding instead of "is of the case".
(5) Use "the expansion of" instead of $expand function application.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -505,10 +491,8 @@ $${rule: {Step_read/array.new_default}}

$${rule-prose: Step/array.new_fixed}

.. todo::
.. todo:: (3') Introduce let binding instead of "is of the case". (5) Use "the expansion of" instead of $expand function application.
Below is the actual prose.
(3') Introduce let binding instead of "is of the case".
(5) Use "the expansion of" instead of $expand function application.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -545,9 +529,8 @@ $${rule: {Step/array.new_fixed}}

$${rule-prose: Step_read/array.new_data}

.. todo::
.. todo:: (7) Render $inverse_ with display hint.
Below is the actual prose.
(7) Render $inverse_ with display hint.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -610,10 +593,8 @@ $${rule: {Step_read/array.new_elem-*}}

$${rule-prose: Step_read/array.get}

.. todo::
.. todo:: (3) Introduce if-let instruction instead of "is of the case". (5) Use "the expansion of" instead of $expand function application.
Below is the actual prose.
(3) Introduce if-let instruction instead of "is of the case".
(5) Use "the expansion of" instead of $expand function application.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -660,10 +641,8 @@ $${rule: {Step_read/array.get-*}}

$${rule-prose: Step/array.set}

.. todo::
.. todo:: (3) Introduce if-let instruction instead of "is of the case". (5) Use "the expansion of" instead of $expand function application.
Below is the actual prose.
(3) Introduce if-let instruction instead of "is of the case".
(5) Use "the expansion of" instead of $expand function application.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -728,11 +707,8 @@ $${rule: {Step_read/array.fill-*}}

.. _exec-array.copy:

.. todo::
.. todo:: (3) Introduce if-let instruction instead of "is of the case". (5) Use "the expansion of" instead of $expand function application. + Too deeply nested
Below is the actual prose.
(3) Introduce if-let instruction instead of "is of the case".
(5) Use "the expansion of" instead of $expand function application.
+ Too deeply nested

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -864,9 +840,8 @@ $${definition: sx}

$${rule-prose: Step_read/array.init_data}

.. todo::
.. todo:: (7) Render $inverse_ with display hint.
Below is the actual prose.
(7) Render $inverse_ with display hint.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -1322,9 +1297,8 @@ Memory Instructions

$${rule-prose: Step_read/load}

.. todo::
.. todo:: (7) Render $inverse_of_nbytes with display hint.
Below is the actual prose.
(7) Render $inverse_of_nbytes with display hint.

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -1816,9 +1790,8 @@ $${rule: {Step_pure/br_on_non_null-*}}

$${rule-prose: Step_read/br_on_cast}

.. todo::
.. todo:: (9) Need to handle RulePr s \|- ref : rt properly in prose instead of $ref_type_of
Below is the acutal prose.
(9) Need to handle RulePr s \|- ref : rt properly in prose instead of $ref_type_of

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -1847,9 +1820,8 @@ $${rule: {Step_read/br_on_cast-*}}

$${rule-prose: Step_read/br_on_cast_fail}

.. todo::
.. todo:: (9) Need to handle RulePr s \|- ref : rt properly in prose instead of $ref_type_of
Below is the actual prose.
(9) Need to handle RulePr s \|- ref : rt properly in prose instead of $ref_type_of

1. Let :math:`F` be the :ref:`current <exec-notation-textual>` :ref:`frame <syntax-frame>`.

Expand Down Expand Up @@ -1934,8 +1906,7 @@ $${rule: {Step_read/return_call}}
:math:`\RETURNCALLREF~x`
........................

.. todo::
(*) Prose not spliced, Sphinx cannot build the document with deeply nested ordered list. (mainly caused by spurious conditions that should be assertions)
.. todo:: (*) Prose not spliced, Sphinx cannot build the document with deeply nested ordered list. (mainly caused by spurious conditions that should be assertions)

1. Assert: due to :ref:`validation <valid-return_call_ref>`, a :ref:`function reference <syntax-ref>` is on the top of the stack.

Expand Down
2 changes: 1 addition & 1 deletion document/core/exec/modules.rst
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ and list of :ref:`reference <syntax-ref>` lists for the module's :ref:`element s

8. For each :ref:`element segment <syntax-elem>` :math:`\elem_i` in :math:`\module.\MELEMS`, do:

a. Let :math:`\reftype_i` be the element :ref:`reference type <syntax-reftype>` obtained by `instantiating <type-inst>` :math:`\elem_i.\ETYPE` in :math:`\moduleinst` defined below.
a. Let :math:`\reftype_i` be the element :ref:`reference type <syntax-reftype>` obtained by :ref:`instantiating <type-inst>` :math:`\elem_i.\ETYPE` in :math:`\moduleinst` defined below.

b. Let :math:`\elemaddr_i` be the :ref:`element address <syntax-elemaddr>` resulting from :ref:`allocating <alloc-elem>` a :ref:`element instance <syntax-eleminst>` of :ref:`reference type <syntax-reftype>` :math:`\reftype_i` with contents :math:`(\reff_{\F{e}}^\ast)^\ast[i]`.

Expand Down
20 changes: 20 additions & 0 deletions document/core/syntax/types.rst
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,26 @@ Global Types
$${syntax: globaltype}


.. index:: ! tag type, function type, defined type, exception
pair: abstract syntax; tag type
pair: tag; type
.. _syntax-tagtype:

Tag Types
~~~~~~~~~

*Tag types* classify the signature of :ref:`tags <syntax-tag>` with a defined type |deftype|, which expands to a function type |functype|.

$${syntax: tagtype}

Tags are used for categorizing exceptions.
The parameters of |functype| define the list of values associated with the exception thrown with this tag.
Furthermore, it is an invariant of the semantics that every |functype| in a :ref:`valid <valid-tagtype>` tag type for an exception has an empty result type.

.. note::
Future versions of WebAssembly may have additional uses for tags, and may allow non-empty result types in the function types of tags.


.. index:: ! element type, reference type, table, element
pair: abstract syntax; element type
pair: element; type
Expand Down
13 changes: 9 additions & 4 deletions document/core/valid/matching.rst
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,7 @@ Heap Types

$${rule-prose: Heaptype_sub}

.. todo::
below is the official specification
.. todo:: below is the official specification

A :ref:`heap type <syntax-heaptype>` ${:heaptype_1} matches a :ref:`heap type <syntax-heaptype>` ${:heaptype_2} if and only if:

Expand Down Expand Up @@ -90,8 +89,8 @@ Reference Types
~~~~~~~~~~~~~~~

$${rule-prose: Reftype_sub}
.. todo::
below is the official specification

.. todo:: below is the official specification

A :ref:`reference type <syntax-reftype>` ${reftype: REF nul1 heaptype_1} matches a :ref:`reference type <syntax-reftype>` ${reftype: REF nul2 heaptype_2} if and only if:

Expand Down Expand Up @@ -264,6 +263,12 @@ $${rule-prose: Tagtype_sub}

$${rule: {Tagtype_sub}}

.. note::
Although the conclusion of this rule looks identical to its premise,
they in fact describe different relations:
the premise invokes subtyping on defined types,
while the conclusion defines it on tag types that happen to be expressed as defined types.


.. index:: external type, function type, table type, memory type, global type
.. _match-externtype:
Expand Down
Loading
Loading