Beispiel #1
0
 public GlobalNode(WasmType type, bool mutable)
 {
     AssertValueType(type);
     Type    = type;
     Init    = new NodesList(type);
     Mutable = mutable;
 }
Beispiel #2
0
 public void PushBlock(NodesList node)
 {
     if (string.IsNullOrWhiteSpace(node.Label.Name))
     {
         node.Label.Name = $"label_{Blocks.Count}";
     }
     Blocks.Push(node);
 }
Beispiel #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);
        }
Beispiel #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);
        }
Beispiel #5
0
 public BlockNode(WasmType signature)
 {
     Nodes = new NodesList(signature);
 }
Beispiel #6
0
 public LoopNode(WasmType signature)
 {
     Nodes = new NodesList(signature);
 }
Beispiel #7
0
 public ElseNode(NodesList nodes)
 {
     Nodes = nodes;
 }