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); }
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 <>()); }