Exemplo n.º 1
0
            internal virtual void visitMethod(MethodNode methodNode)
            {
                // First parameter is "this" for non-static methods
                int firstIndex = Modifier.isStatic(method.Modifiers) ? 0 : 1;

                Type[] parameterTypes   = method.ParameterTypes;
                int    numberParameters = System.Math.Min(parameterTypes.Length, methodNode.localVariables.size() - firstIndex);

                Dictionary <int, int> parameterIndices = new Dictionary <int, int>();

                for (int i = 0, currentIndex = firstIndex; i < numberParameters; i++, currentIndex++)
                {
                    parameterIndices[currentIndex] = i;
                    if (parameterTypes[i] == typeof(long) || parameterTypes[i] == typeof(double))
                    {
                        currentIndex++;
                    }
                }

                parameters = new ParameterInfo[numberParameters];
                for (int i = 0; i < methodNode.localVariables.size(); i++)
                {
                    LocalVariableNode localVariableNode = (LocalVariableNode)methodNode.localVariables.get(i);
                    if (parameterIndices.ContainsKey(localVariableNode.index))
                    {
                        int parameterIndex = parameterIndices[localVariableNode.index];
                        parameters[parameterIndex] = new ParameterInfo(localVariableNode.name, parameterTypes[parameterIndex]);
                    }
                }
            }
Exemplo n.º 2
0
        public void ParseMethodBody()
        {
            TypeBodyParser parser = new TypeBodyParser();

            const string input = @"
                int GetValue(int someValue, System.Collections.Generic.Dictionary<int, UnityEngine.Vector3> dict) {
                    var f;
                    int localVar = 4;
                    string str;
                    return someValue;
                }
            ";

            TypeBodyNode astNode = parser.Parse(input, "", 0);

            Assert.AreEqual(1, astNode.nodes.size);
            MethodNode methodNode = (MethodNode)astNode.nodes[0];

            Assert.AreEqual(4, methodNode.body.statements.size);
            Assert.IsInstanceOf <LocalVariableNode>(methodNode.body.statements[0]);
            Assert.IsInstanceOf <LocalVariableNode>(methodNode.body.statements[1]);
            Assert.IsInstanceOf <LocalVariableNode>(methodNode.body.statements[2]);
            Assert.IsInstanceOf <ReturnStatementNode>(methodNode.body.statements[3]);
            LocalVariableNode   f        = (LocalVariableNode)methodNode.body.statements[0];
            LocalVariableNode   localVar = (LocalVariableNode)methodNode.body.statements[1];
            LocalVariableNode   str      = (LocalVariableNode)methodNode.body.statements[2];
            ReturnStatementNode retn     = (ReturnStatementNode)methodNode.body.statements[3];

            Assert.AreEqual("f", f.name);
            Assert.AreEqual(default, f.typeLookup.typeName);
Exemplo n.º 3
0
        // private StatementNode StatementExpressionPrime(ref ExpressionNode left)
        // {
        //     if (ConsumeOnMatch(TokenType.PAREN_OPEN))
        //     {
        //         var args = ArgumentList();
        //         MatchExactly(TokenType.PAREN_CLOSE);
        //     }
        //     else if (MatchAny(increment_decrement_operators))
        //     {
        //         IncrementDecrement();
        //     }
        //     else
        //     {
        //         return null;
        //     }
        // }

        private StatementNode LocalVariableDeclaration()
        {
            printDebug("Local Variable Declaration");
            if (!MatchAny(this.types.Concat(new TokenType[] { TokenType.VAR_KEYWORD }).ToArray()))
            {
                ThrowSyntaxException("Type or Var expected");
            }

            TypeDeclarationNode type = null;

            if (Match(TokenType.VAR_KEYWORD))
            {
                var token = ConsumeToken();
                type = TypeDetector(token.type, new IdentifierNode(token));
            }
            else
            {
                type = Type();
            }
            var variables      = VariableDeclaratorList(null, null, type);
            var variablesNodes = new List <LocalVariableNode>();

            foreach (var x in variables)
            {
                var y = new LocalVariableNode(x.type, x.identifier, x.assignment);
                variablesNodes.Add(y);
            }

            return(new LocalVariablesNode(variablesNodes));
        }
Exemplo n.º 4
0
 public ForeachStatementNode(LocalVariableNode localVariable, ExpressionNode collection)
 {
     this.localVariable = localVariable;
     this.collection    = collection;
 }