Skip to content

Instantly share code, notes, and snippets.

@kripken
Last active April 3, 2024 22:58
Show Gist options
  • Save kripken/2e7f681ff7878a6e06bb721327328623 to your computer and use it in GitHub Desktop.
Save kripken/2e7f681ff7878a6e06bb721327328623 to your computer and use it in GitHub Desktop.
[
{
id: 'Block',
fields: [
{
form: 'CHILD_VECTOR',
name: 'list',
},
{
form: 'SCOPE_NAME_DEF',
name: 'name',
},
]
},
{
id: 'If',
fields: [
{
form: 'OPTIONAL_CHILD',
name: 'ifFalse',
},
{
form: 'CHILD',
name: 'ifTrue',
},
{
form: 'CHILD',
name: 'condition',
},
]
},
{
id: 'Loop',
fields: [
{
form: 'CHILD',
name: 'body',
},
{
form: 'SCOPE_NAME_DEF',
name: 'name',
},
]
},
{
id: 'Break',
fields: [
{
form: 'OPTIONAL_CHILD',
name: 'condition',
},
{
form: 'OPTIONAL_CHILD',
name: 'value',
},
{
form: 'SCOPE_NAME_USE',
name: 'name',
},
]
},
{
id: 'Switch',
fields: [
{
form: 'CHILD',
name: 'condition',
},
{
form: 'OPTIONAL_CHILD',
name: 'value',
},
{
form: 'SCOPE_NAME_USE',
name: 'default_',
},
{
form: 'SCOPE_NAME_USE_VECTOR',
name: 'targets',
},
]
},
{
id: 'Call',
fields: [
{
form: 'CHILD_VECTOR',
name: 'operands',
},
{
form: 'NAME_KIND',
name: 'target',
kind: 'Function',
},
{
form: 'INT',
name: 'isReturn',
},
]
},
{
id: 'CallIndirect',
fields: [
{
form: 'CHILD',
name: 'target',
},
{
form: 'NAME_KIND',
name: 'table',
kind: 'Table',
},
{
form: 'CHILD_VECTOR',
name: 'operands',
},
{
form: 'HEAPTYPE',
name: 'heapType',
},
{
form: 'INT',
name: 'isReturn',
},
]
},
{
id: 'LocalGet',
fields: [
{
form: 'INT',
name: 'index',
},
]
},
{
id: 'LocalSet',
fields: [
{
form: 'CHILD',
name: 'value',
},
{
form: 'INT',
name: 'index',
},
]
},
{
id: 'GlobalGet',
fields: [
{
form: 'NAME_KIND',
name: 'name',
kind: 'Global',
},
]
},
{
id: 'GlobalSet',
fields: [
{
form: 'CHILD',
name: 'value',
},
{
form: 'NAME_KIND',
name: 'name',
kind: 'Global',
},
]
},
{
id: 'Load',
fields: [
{
form: 'CHILD',
name: 'ptr',
},
{
form: 'INT',
name: 'bytes',
},
{
form: 'INT',
name: 'signed_',
},
{
form: 'ADDRESS',
name: 'offset',
},
{
form: 'ADDRESS',
name: 'align',
},
{
form: 'INT',
name: 'isAtomic',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'Store',
fields: [
{
form: 'CHILD',
name: 'value',
},
{
form: 'CHILD',
name: 'ptr',
},
{
form: 'INT',
name: 'bytes',
},
{
form: 'ADDRESS',
name: 'offset',
},
{
form: 'ADDRESS',
name: 'align',
},
{
form: 'INT',
name: 'isAtomic',
},
{
form: 'TYPE',
name: 'valueType',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'AtomicRMW',
fields: [
{
form: 'CHILD',
name: 'value',
},
{
form: 'CHILD',
name: 'ptr',
},
{
form: 'INT',
name: 'op',
},
{
form: 'INT',
name: 'bytes',
},
{
form: 'ADDRESS',
name: 'offset',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'AtomicCmpxchg',
fields: [
{
form: 'CHILD',
name: 'replacement',
},
{
form: 'CHILD',
name: 'expected',
},
{
form: 'CHILD',
name: 'ptr',
},
{
form: 'INT',
name: 'bytes',
},
{
form: 'ADDRESS',
name: 'offset',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'AtomicWait',
fields: [
{
form: 'CHILD',
name: 'timeout',
},
{
form: 'CHILD',
name: 'expected',
},
{
form: 'CHILD',
name: 'ptr',
},
{
form: 'ADDRESS',
name: 'offset',
},
{
form: 'TYPE',
name: 'expectedType',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'AtomicNotify',
fields: [
{
form: 'CHILD',
name: 'notifyCount',
},
{
form: 'CHILD',
name: 'ptr',
},
{
form: 'ADDRESS',
name: 'offset',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'AtomicFence',
fields: [
{
form: 'INT',
name: 'order',
},
]
},
{
id: 'SIMDExtract',
fields: [
{
form: 'CHILD',
name: 'vec',
},
{
form: 'INT',
name: 'op',
},
{
form: 'INT',
name: 'index',
},
]
},
{
id: 'SIMDReplace',
fields: [
{
form: 'CHILD',
name: 'value',
},
{
form: 'CHILD',
name: 'vec',
},
{
form: 'INT',
name: 'op',
},
{
form: 'INT',
name: 'index',
},
]
},
{
id: 'SIMDShuffle',
fields: [
{
form: 'CHILD',
name: 'right',
},
{
form: 'CHILD',
name: 'left',
},
{
form: 'INT_ARRAY',
name: 'mask',
},
]
},
{
id: 'SIMDTernary',
fields: [
{
form: 'CHILD',
name: 'c',
},
{
form: 'CHILD',
name: 'b',
},
{
form: 'CHILD',
name: 'a',
},
{
form: 'INT',
name: 'op',
},
]
},
{
id: 'SIMDShift',
fields: [
{
form: 'CHILD',
name: 'shift',
},
{
form: 'CHILD',
name: 'vec',
},
{
form: 'INT',
name: 'op',
},
]
},
{
id: 'SIMDLoad',
fields: [
{
form: 'CHILD',
name: 'ptr',
},
{
form: 'INT',
name: 'op',
},
{
form: 'ADDRESS',
name: 'offset',
},
{
form: 'ADDRESS',
name: 'align',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'SIMDLoadStoreLane',
fields: [
{
form: 'CHILD',
name: 'vec',
},
{
form: 'CHILD',
name: 'ptr',
},
{
form: 'INT',
name: 'op',
},
{
form: 'ADDRESS',
name: 'offset',
},
{
form: 'ADDRESS',
name: 'align',
},
{
form: 'INT',
name: 'index',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'MemoryInit',
fields: [
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'offset',
},
{
form: 'CHILD',
name: 'dest',
},
{
form: 'NAME_KIND',
name: 'segment',
kind: 'DataSegment',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'DataDrop',
fields: [
{
form: 'NAME_KIND',
name: 'segment',
kind: 'DataSegment',
},
]
},
{
id: 'MemoryCopy',
fields: [
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'source',
},
{
form: 'CHILD',
name: 'dest',
},
{
form: 'NAME_KIND',
name: 'sourceMemory',
kind: 'Memory',
},
{
form: 'NAME_KIND',
name: 'destMemory',
kind: 'Memory',
},
]
},
{
id: 'MemoryFill',
fields: [
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'value',
},
{
form: 'CHILD',
name: 'dest',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'Const',
fields: [
{
form: 'LITERAL',
name: 'value',
},
]
},
{
id: 'Unary',
fields: [
{
form: 'CHILD',
name: 'value',
},
{
form: 'INT',
name: 'op',
},
]
},
{
id: 'Binary',
fields: [
{
form: 'CHILD',
name: 'right',
},
{
form: 'CHILD',
name: 'left',
},
{
form: 'INT',
name: 'op',
},
]
},
{
id: 'Select',
fields: [
{
form: 'CHILD',
name: 'condition',
},
{
form: 'CHILD',
name: 'ifFalse',
},
{
form: 'CHILD',
name: 'ifTrue',
},
]
},
{
id: 'Drop',
fields: [
{
form: 'CHILD',
name: 'value',
},
]
},
{
id: 'Return',
fields: [
{
form: 'OPTIONAL_CHILD',
name: 'value',
},
]
},
{
id: 'MemorySize',
fields: [
{
form: 'TYPE',
name: 'ptrType',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'MemoryGrow',
fields: [
{
form: 'TYPE',
name: 'ptrType',
},
{
form: 'CHILD',
name: 'delta',
},
{
form: 'NAME_KIND',
name: 'memory',
kind: 'Memory',
},
]
},
{
id: 'RefNull',
fields: [
]
},
{
id: 'RefIsNull',
fields: [
{
form: 'CHILD',
name: 'value',
},
]
},
{
id: 'RefFunc',
fields: [
{
form: 'NAME_KIND',
name: 'func',
kind: 'Function',
},
]
},
{
id: 'RefEq',
fields: [
{
form: 'CHILD',
name: 'right',
},
{
form: 'CHILD',
name: 'left',
},
]
},
{
id: 'TableGet',
fields: [
{
form: 'CHILD',
name: 'index',
},
{
form: 'NAME_KIND',
name: 'table',
kind: 'Table',
},
]
},
{
id: 'TableSet',
fields: [
{
form: 'CHILD',
name: 'value',
},
{
form: 'CHILD',
name: 'index',
},
{
form: 'NAME_KIND',
name: 'table',
kind: 'Table',
},
]
},
{
id: 'TableSize',
fields: [
{
form: 'NAME_KIND',
name: 'table',
kind: 'Table',
},
]
},
{
id: 'TableGrow',
fields: [
{
form: 'CHILD',
name: 'delta',
},
{
form: 'CHILD',
name: 'value',
},
{
form: 'NAME_KIND',
name: 'table',
kind: 'Table',
},
]
},
{
id: 'TableFill',
fields: [
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'value',
},
{
form: 'CHILD',
name: 'dest',
},
{
form: 'NAME_KIND',
name: 'table',
kind: 'Table',
},
]
},
{
id: 'TableCopy',
fields: [
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'source',
},
{
form: 'CHILD',
name: 'dest',
},
{
form: 'NAME_KIND',
name: 'sourceTable',
kind: 'Table',
},
{
form: 'NAME_KIND',
name: 'destTable',
kind: 'Table',
},
]
},
{
id: 'Try',
fields: [
{
form: 'SCOPE_NAME_USE',
name: 'delegateTarget',
},
{
form: 'CHILD_VECTOR',
name: 'catchBodies',
},
{
form: 'NAME_KIND_VECTOR',
name: 'catchTags',
kind: 'Tag',
},
{
form: 'SCOPE_NAME_DEF',
name: 'name',
},
{
form: 'CHILD',
name: 'body',
},
]
},
{
id: 'TryTable',
fields: [
{
form: 'TYPE_VECTOR',
name: 'sentTypes',
},
{
form: 'INT_VECTOR',
name: 'catchRefs',
},
{
form: 'SCOPE_NAME_USE_VECTOR',
name: 'catchDests',
},
{
form: 'NAME_KIND_VECTOR',
name: 'catchTags',
kind: 'Tag',
},
{
form: 'CHILD',
name: 'body',
},
]
},
{
id: 'Throw',
fields: [
{
form: 'CHILD_VECTOR',
name: 'operands',
},
{
form: 'NAME_KIND',
name: 'tag',
kind: 'Tag',
},
]
},
{
id: 'Rethrow',
fields: [
{
form: 'SCOPE_NAME_USE',
name: 'target',
},
]
},
{
id: 'ThrowRef',
fields: [
{
form: 'CHILD',
name: 'exnref',
},
]
},
{
id: 'Nop',
fields: [
]
},
{
id: 'Unreachable',
fields: [
]
},
{
id: 'Pop',
fields: [
]
},
{
id: 'TupleMake',
fields: [
{
form: 'CHILD_VECTOR',
name: 'operands',
},
]
},
{
id: 'TupleExtract',
fields: [
{
form: 'CHILD',
name: 'tuple',
},
{
form: 'INT',
name: 'index',
},
]
},
{
id: 'RefI31',
fields: [
{
form: 'CHILD',
name: 'value',
},
]
},
{
id: 'I31Get',
fields: [
{
form: 'CHILD',
name: 'i31',
},
{
form: 'INT',
name: 'signed_',
},
]
},
{
id: 'CallRef',
fields: [
{
form: 'CHILD',
name: 'target',
},
{
form: 'CHILD_VECTOR',
name: 'operands',
},
{
form: 'INT',
name: 'isReturn',
},
]
},
{
id: 'RefTest',
fields: [
{
form: 'TYPE',
name: 'castType',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'RefCast',
fields: [
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'BrOn',
fields: [
{
form: 'INT',
name: 'op',
},
{
form: 'SCOPE_NAME_USE',
name: 'name',
},
{
form: 'TYPE',
name: 'castType',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'StructNew',
fields: [
{
form: 'CHILD_VECTOR',
name: 'operands',
},
]
},
{
id: 'StructGet',
fields: [
{
form: 'INT',
name: 'index',
},
{
form: 'CHILD',
name: 'ref',
},
{
form: 'INT',
name: 'signed_',
},
]
},
{
id: 'StructSet',
fields: [
{
form: 'INT',
name: 'index',
},
{
form: 'CHILD',
name: 'value',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'ArrayNew',
fields: [
{
form: 'CHILD',
name: 'size',
},
{
form: 'OPTIONAL_CHILD',
name: 'init',
},
]
},
{
id: 'ArrayNewData',
fields: [
{
form: 'NAME_KIND',
name: 'segment',
kind: 'DataSegment',
},
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'offset',
},
]
},
{
id: 'ArrayNewElem',
fields: [
{
form: 'NAME_KIND',
name: 'segment',
kind: 'ElementSegment',
},
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'offset',
},
]
},
{
id: 'ArrayNewFixed',
fields: [
{
form: 'CHILD_VECTOR',
name: 'values',
},
]
},
{
id: 'ArrayGet',
fields: [
{
form: 'CHILD',
name: 'index',
},
{
form: 'CHILD',
name: 'ref',
},
{
form: 'INT',
name: 'signed_',
},
]
},
{
id: 'ArraySet',
fields: [
{
form: 'CHILD',
name: 'value',
},
{
form: 'CHILD',
name: 'index',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'ArrayLen',
fields: [
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'ArrayCopy',
fields: [
{
form: 'CHILD',
name: 'length',
},
{
form: 'CHILD',
name: 'srcIndex',
},
{
form: 'CHILD',
name: 'srcRef',
},
{
form: 'CHILD',
name: 'destIndex',
},
{
form: 'CHILD',
name: 'destRef',
},
]
},
{
id: 'ArrayFill',
fields: [
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'value',
},
{
form: 'CHILD',
name: 'index',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'ArrayInitData',
fields: [
{
form: 'NAME_KIND',
name: 'segment',
kind: 'DataSegment',
},
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'offset',
},
{
form: 'CHILD',
name: 'index',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'ArrayInitElem',
fields: [
{
form: 'NAME_KIND',
name: 'segment',
kind: 'ElementSegment',
},
{
form: 'CHILD',
name: 'size',
},
{
form: 'CHILD',
name: 'offset',
},
{
form: 'CHILD',
name: 'index',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'RefAs',
fields: [
{
form: 'INT',
name: 'op',
},
{
form: 'CHILD',
name: 'value',
},
]
},
{
id: 'StringNew',
fields: [
{
form: 'INT',
name: 'op',
},
{
form: 'INT',
name: 'try_',
},
{
form: 'OPTIONAL_CHILD',
name: 'end',
},
{
form: 'OPTIONAL_CHILD',
name: 'start',
},
{
form: 'OPTIONAL_CHILD',
name: 'length',
},
{
form: 'CHILD',
name: 'ptr',
},
]
},
{
id: 'StringConst',
fields: [
{
form: 'NAME',
name: 'string',
},
]
},
{
id: 'StringMeasure',
fields: [
{
form: 'INT',
name: 'op',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'StringEncode',
fields: [
{
form: 'INT',
name: 'op',
},
{
form: 'OPTIONAL_CHILD',
name: 'start',
},
{
form: 'CHILD',
name: 'ptr',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'StringConcat',
fields: [
{
form: 'CHILD',
name: 'right',
},
{
form: 'CHILD',
name: 'left',
},
]
},
{
id: 'StringEq',
fields: [
{
form: 'INT',
name: 'op',
},
{
form: 'CHILD',
name: 'right',
},
{
form: 'CHILD',
name: 'left',
},
]
},
{
id: 'StringAs',
fields: [
{
form: 'INT',
name: 'op',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'StringWTF8Advance',
fields: [
{
form: 'CHILD',
name: 'bytes',
},
{
form: 'CHILD',
name: 'pos',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'StringWTF16Get',
fields: [
{
form: 'CHILD',
name: 'pos',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'StringIterNext',
fields: [
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'StringIterMove',
fields: [
{
form: 'INT',
name: 'op',
},
{
form: 'CHILD',
name: 'num',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'StringSliceWTF',
fields: [
{
form: 'INT',
name: 'op',
},
{
form: 'CHILD',
name: 'end',
},
{
form: 'CHILD',
name: 'start',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'StringSliceIter',
fields: [
{
form: 'CHILD',
name: 'num',
},
{
form: 'CHILD',
name: 'ref',
},
]
},
{
id: 'ContBind',
fields: [
{
form: 'CHILD',
name: 'cont',
},
{
form: 'CHILD_VECTOR',
name: 'operands',
},
{
form: 'HEAPTYPE',
name: 'contTypeAfter',
},
{
form: 'HEAPTYPE',
name: 'contTypeBefore',
},
]
},
{
id: 'ContNew',
fields: [
{
form: 'CHILD',
name: 'func',
},
{
form: 'HEAPTYPE',
name: 'contType',
},
]
},
{
id: 'Resume',
fields: [
{
form: 'TYPE_VECTOR',
name: 'sentTypes',
},
{
form: 'CHILD',
name: 'cont',
},
{
form: 'CHILD_VECTOR',
name: 'operands',
},
{
form: 'SCOPE_NAME_USE_VECTOR',
name: 'handlerBlocks',
},
{
form: 'NAME_KIND_VECTOR',
name: 'handlerTags',
kind: 'Tag',
},
{
form: 'HEAPTYPE',
name: 'contType',
},
]
},
{
id: 'Suspend',
fields: [
{
form: 'CHILD_VECTOR',
name: 'operands',
},
{
form: 'NAME_KIND',
name: 'tag',
kind: 'Tag',
},
]
},
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment