WasmNodeResult IWasmOpcodeVisitor <WasmNodeArg, WasmNodeResult> .Visit(EndOpcode opcode, WasmNodeArg arg) { if (arg.HasBlock) { arg.PopBlock(); } else { throw new WasmNodeException("there is no block to end"); } 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); }