private IList <Node> evalFunctionCall(Node node) { return(EvaluateFunctionsCalls.evalFunctionCall(node, activationFrameStack, mainFunctionName, functionNodeMap, this)); }
public static IList <Node> evalVariableDeclWithAssignment(Node n, ActivationFrameStack activationFrameStack, string mainName, IDictionary <string, Node> functionNodeMap) { VariableDeclarationNode variableDeclarationNode = (VariableDeclarationNode)n; IList <Node> instructionsToReturnAndExecute = new List <Node>(); IList <Node> instructions = variableDeclarationNode.Instructions; KeywordNode keywordNode = variableDeclarationNode.KeyWordNode; Node rightHandSide = null; if (variableDeclarationNode.DeclarationWithAssignment) { if (!variableDeclarationNode.OperatorEqualSign) { throw new Exception("Invalid operator for expression"); } rightHandSide = variableDeclarationNode.RightValue; switch (rightHandSide.Type) { case LiteralType: if (rightHandSide is LiteralNode) { LiteralNode literalNode = (LiteralNode)rightHandSide; EvaluateAssignments <LiteralNode> literalNodeEvaluateAssignments = new EvaluateAssignments <LiteralNode>(); if (literalNodeEvaluateAssignments.canLiteralBeAssigned(keywordNode, literalNode)) { if (instructions[1] is VariableNode) { VariableNode variableNode = (VariableNode)instructions[1]; if (activationFrameStack.peek().variableSet.ContainsKey(variableNode.variableName)) { throw new Exception("Variable already declared"); } else { activationFrameStack.peek().variableSet[variableNode.variableName] = rightHandSide; } } } } break; case FunctionaCallType: instructionsToReturnAndExecute = EvaluateFunctionsCalls.evalFunctionCall(rightHandSide, activationFrameStack, mainName, functionNodeMap, interpreterCallback); if (activationFrameStack.peek().parameterStack.Count > 0) { VariableNode variableNode = (VariableNode)instructions[1]; if (activationFrameStack.peek().variableSet.ContainsKey(variableNode.variableName)) { throw new Exception("Variable already declared"); } else { activationFrameStack.peek().variableSet[variableNode.variableName] = activationFrameStack.peek().parameterStack.Pop(); } } break; } } return(instructionsToReturnAndExecute); }