public GlobalNode(WasmType type, bool mutable) { AssertValueType(type); Type = type; Init = new NodesList(type); Mutable = mutable; }
public void PushBlock(NodesList node) { if (string.IsNullOrWhiteSpace(node.Label.Name)) { node.Label.Name = $"label_{Blocks.Count}"; } Blocks.Push(node); }
WasmNodeResult IWasmOpcodeVisitor <WasmNodeArg, WasmNodeResult> .Visit(IfOpcode opcode, WasmNodeArg arg) { var condition = arg.Pop(); var ifNode = new IfNode(condition, opcode.Signature); var thenBlock = new NodesList(opcode.Signature); ifNode.Then = thenBlock; arg.Push(ifNode); arg.PushBlock(thenBlock); return(null); }
WasmNodeResult IWasmOpcodeVisitor <WasmNodeArg, WasmNodeResult> .Visit(ElseOpcode opcode, WasmNodeArg arg) { arg.PopBlock(); var parentNode = arg.Pop(); var ifNode = parentNode as IfNode; if (ifNode == null) { throw new WasmNodeException("if node expected"); } var elseBlock = new NodesList(ifNode.Signature); ifNode.Else = elseBlock; arg.Push(ifNode); arg.PushBlock(elseBlock); return(null); }
public BlockNode(WasmType signature) { Nodes = new NodesList(signature); }
public LoopNode(WasmType signature) { Nodes = new NodesList(signature); }
public ElseNode(NodesList nodes) { Nodes = nodes; }