Beispiel #1
0
        /// <summary>
        /// Parse function body
        /// </summary>
        /// <param name="funcInfo">Function to parse</param>
        private void ParseFunction(Parser1To2Pass.FunctionInfo funcInfo)
        {
            var funcElem = new FunctionElement();

            m_currentFunction = funcElem;

            funcElem.Info = funcInfo.Info;

            StatementListElement statements = new StatementListElement();

            m_currentBlock.Push(statements);

            foreach (var arg in funcInfo.Info.Arguments)
            {
                var declElem = new VarDeclarationElement
                {
                    VarType = arg.TypeInfo.Name,
                    VarName = arg.ArgName,
                    IgnoreInitialization = true
                };
                declElem.SetParent(statements);
                funcElem.AddArgumentVariable(declElem);
            }

            if (funcInfo.FuncLexemes.Count > 0)
            {
                for (int i = 0, end = funcInfo.FuncLexemes.Count;;)
                {
                    TreeElement element;
                    i = ParseStatement(funcInfo.FuncLexemes, i, out element);
                    if (element != null) //if null => ignore (block element)
                    {
                        var statementElem = new StatementElement();
                        statementElem.AddChild(element);

                        m_currentBlock.Peek().AddChild(statementElem);
                    }

                    if (i >= end)
                    {
                        break;
                    }
                }
            }

            funcElem.AddChild(statements);

            m_parserOutput.Functions.Add(funcElem);

            m_currentBlock.Pop();
        }
Beispiel #2
0
        /// <summary>
        /// Parse function default arguments and save it before body parsing
        /// </summary>
        /// <param name="funcInfo">Parsed function</param>
        private void ParseFunctionDefaultVals(Parser1To2Pass.FunctionInfo funcInfo)
        {
            for (int i = 0, end = funcInfo.ArgInitLexemes.Count; i < end; ++i)
            {
                ValueElement valElement;
                if (funcInfo.ArgInitLexemes[i].Count != 0)
                {
                    ParseExpression(funcInfo.ArgInitLexemes[i], 0, -1, ExpressionFlags.AllowDefaultValue,
                                    out valElement);
                }
                else
                {
                    valElement = null;
                }

                funcInfo.Info.Arguments[i].DefaultVal = valElement;
            }
            m_symbols.UpdateFunction(funcInfo.Info);
        }