Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        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);
        }