WasmNodeResult IWasmOpcodeVisitor <WasmNodeArg, WasmNodeResult> .Visit(LoopOpcode opcode, WasmNodeArg arg) { var loopNode = new LoopNode(opcode.Signature); arg.Push(loopNode); arg.PushBlock(loopNode.Nodes); return(null); }
WasmNodeResult IWasmOpcodeVisitor <WasmNodeArg, WasmNodeResult> .Visit(BlockOpcode opcode, WasmNodeArg arg) { var blockNode = new BlockNode(opcode.Signature); arg.Push(blockNode); arg.PushBlock(blockNode.Nodes); return(null); }
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); }