Exemple #1
0
 private IList <Node> evalUserDefinedFunctionCall(Node n)
 {
     return(EvaluateFunctionsCalls.evalUserDefinedFunctionCall(n, this));
 }
Exemple #2
0
 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);
        }