Esempio n. 1
0
        WasmNodeResult IWasmOpcodeVisitor <WasmNodeArg, WasmNodeResult> .Visit(LoopOpcode opcode, WasmNodeArg arg)
        {
            var loopNode = new LoopNode(opcode.Signature);

            arg.Push(loopNode);
            arg.PushBlock(loopNode.Nodes);
            return(null);
        }
Esempio n. 2
0
        WasmNodeResult IWasmOpcodeVisitor <WasmNodeArg, WasmNodeResult> .Visit(BlockOpcode opcode, WasmNodeArg arg)
        {
            var blockNode = new BlockNode(opcode.Signature);

            arg.Push(blockNode);
            arg.PushBlock(blockNode.Nodes);
            return(null);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
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);
        }