예제 #1
0
        public override Node visitAssignmentOperatorExpression(JuliarParser.AssignmentOperatorExpressionContext ctx)
        {
            VariableReassignmentNode node = new VariableReassignmentNode();

            //TODO see if the node is in tye Symboltable and if it can be accessed. The original node with the type.
            iterateWrapper(ctx, this, node);
            if (symbolTable.doesChildExistAtScope(node.Instructions[0]))
            {
                VariableNode variableNode = (VariableNode)symbolTable.getNode(node.Instructions[0]);
                node.Instructions[0].VariableTypeByIntegralType = variableNode.IntegralType;
            }
            return(node);
        }
예제 #2
0
        public static IList <Node> evalReassignment(Node n, ActivationFrame activationFrame, Interpreter callback)
        {
            if (n != null)
            {
                VariableReassignmentNode node = (VariableReassignmentNode)n;

                VariableNode lValueVariableNode = (VariableNode)node.Instructions[0];
                string       variableName       = lValueVariableNode.variableName;

                Node rvalueVariableNode = node.Instructions[2];

                NodeType nodeType = rvalueVariableNode.Type;

                activationFrame.variableSet.Remove(variableName);
                switch (nodeType)
                {
                case com.juliar.nodes.NodeType.LiteralType:
                    LiteralNode literalNode = (LiteralNode)rvalueVariableNode;
                    activationFrame.variableSet[variableName] = literalNode;
                    break;

                case com.juliar.nodes.NodeType.VariableType:
                    VariableNode variableNode = (VariableNode)rvalueVariableNode;
                    activationFrame.variableSet[variableName] = variableNode;
                    break;

                case com.juliar.nodes.NodeType.EvaluatableType:
                    if (true)
                    {
                        Console.WriteLine("need to add code to evaluate");
                        //ArrayList<Node> evaluatableNode = new ArrayList<Node>()
                        //evaluatableNode.add( rvalueVariableNode );
                        callback.execute(new List <Node>(rvalueVariableNode));
                    }
                    break;
                }
            }

            return(new List <>());
        }