Example #1
0
        private void CheckCtorsFunction(LuaBlockSyntax body)
        {
            bool hasInit  = initStatements_.Count > 0;
            bool hasCtors = ctors_.Count > 0;

            if (hasCtors)
            {
                if (hasInit)
                {
                    if (ctors_.Count == 1)
                    {
                        ctors_.First().Body.Statements.InsertRange(0, initStatements_);
                    }
                    else
                    {
                        var initIdentifier = LuaIdentifierNameSyntax.Init;
                        AddInitFunction(body, initIdentifier, GetInitFunction(), false);
                        foreach (var ctor in ctors_)
                        {
                            if (!ctor.IsInvokeThisCtor)
                            {
                                LuaInvocationExpressionSyntax invocationInit = new LuaInvocationExpressionSyntax(initIdentifier, LuaIdentifierNameSyntax.This);
                                ctor.Body.Statements.Insert(0, new LuaExpressionStatementSyntax(invocationInit));
                            }
                        }
                    }
                }

                if (ctors_.Count == 1)
                {
                    var ctor = ctors_.First();
                    if (ctor.Body.Statements.Count > 0)
                    {
                        AddInitFunction(body, LuaIdentifierNameSyntax.Ctor, ctor);
                    }
                }
                else
                {
                    LuaTableInitializerExpression ctrosTable = new LuaTableInitializerExpression();
                    int index = 1;
                    foreach (var ctor in ctors_)
                    {
                        string name = SpecailWord(Tokens.Ctor + index);
                        LuaIdentifierNameSyntax nameIdentifier = new LuaIdentifierNameSyntax(name);
                        AddInitFunction(body, nameIdentifier, ctor, false);
                        ctrosTable.Items.Add(new LuaSingleTableItemSyntax(nameIdentifier));
                        ++index;
                    }
                    AddResultTable(LuaIdentifierNameSyntax.Ctor, ctrosTable);
                }
            }
            else
            {
                if (hasInit)
                {
                    AddInitFunction(body, LuaIdentifierNameSyntax.Ctor, GetInitFunction());
                }
            }
        }
        private void CheckUsingDeclares()
        {
            var imports = usingDeclares_.Where(i => !i.IsFromCode).ToList();

            if (imports.Count > 0)
            {
                imports.Sort((x, y) => x.Prefix.CompareTo(y.Prefix));
                foreach (var import in imports)
                {
                    AddImport(new LuaIdentifierNameSyntax(import.NewPrefix), new LuaIdentifierNameSyntax(import.Prefix));
                }
            }

            var usingDeclares = usingDeclares_.Where(i => i.IsFromCode).ToList();

            if (usingDeclares.Count > 0)
            {
                usingDeclares.Sort((x, y) => x.Prefix.CompareTo(y.Prefix));
                foreach (var usingDeclare in usingDeclares)
                {
                    AddImport(new LuaIdentifierNameSyntax(usingDeclare.NewPrefix), null);
                }

                var global = LuaIdentifierNameSyntax.Global;
                LuaFunctionExpressionSyntax functionExpression = new LuaFunctionExpressionSyntax();
                functionExpression.AddParameter(global);
                foreach (var usingDeclare in usingDeclares)
                {
                    if (usingDeclare.Prefix != usingDeclare.NewPrefix)
                    {
                        LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(new LuaIdentifierNameSyntax(usingDeclare.NewPrefix), new LuaIdentifierNameSyntax(usingDeclare.Prefix));
                        functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment));
                    }
                    else
                    {
                        LuaMemberAccessExpressionSyntax right      = new LuaMemberAccessExpressionSyntax(global, new LuaIdentifierNameSyntax(usingDeclare.Prefix));
                        LuaAssignmentExpressionSyntax   assignment = new LuaAssignmentExpressionSyntax(new LuaIdentifierNameSyntax(usingDeclare.NewPrefix), right);
                        functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment));
                    }
                }

                LuaInvocationExpressionSyntax invocationExpression = new LuaInvocationExpressionSyntax(LuaIdentifierNameSyntax.UsingDeclare, functionExpression);
                importAreaStatements.Statements.Add(new LuaExpressionStatementSyntax(invocationExpression));
            }

            int index = Statements.FindIndex(i => i is LuaNamespaceDeclarationSyntax);

            if (index != -1)
            {
                Statements.Insert(index, importAreaStatements);
            }
        }
Example #3
0
 public LuaArrayTypeAdapterExpressionSyntax(LuaInvocationExpressionSyntax invocationExpression, LuaArrayRankSpecifierSyntax rankSpecifier)
 {
     if (invocationExpression == null)
     {
         throw new ArgumentNullException(nameof(invocationExpression));
     }
     if (rankSpecifier == null)
     {
         throw new ArgumentNullException(nameof(rankSpecifier));
     }
     InvocationExpression = invocationExpression;
     RankSpecifier        = rankSpecifier;
 }
 internal bool IsUsingDeclareConflict(LuaInvocationExpressionSyntax generic)
 {
     if (generic.Expression is LuaIdentifierNameSyntax identifier)
     {
         int pos = identifier.ValueText.IndexOf('.');
         if (pos != -1)
         {
             string prefix = identifier.ValueText.Substring(0, pos);
             return(UsingDeclares.Exists(i => i.NewPrefix == prefix));
         }
     }
     return(false);
 }
 public LuaForInStatementSyntax(LuaIdentifierNameSyntax identifier, LuaExpressionSyntax expression)
 {
     if (identifier == null)
     {
         throw new ArgumentNullException(nameof(identifier));
     }
     if (expression == null)
     {
         throw new ArgumentNullException(nameof(expression));
     }
     Identifier = identifier;
     Expression = new LuaInvocationExpressionSyntax(LuaIdentifierNameSyntax.Each, expression);
 }
Example #6
0
 internal void AddImport(LuaInvocationExpressionSyntax invocationExpression, string name, List <string> argumentTypeNames, bool isFromCode)
 {
     if (!genericUsingDeclares_.Exists(i => i.NewName == name))
     {
         genericUsingDeclares_.Add(new GenericUsingDeclare()
         {
             InvocationExpression = invocationExpression,
             NewName           = name,
             ArgumentTypeNames = argumentTypeNames,
             IsFromCode        = isFromCode,
         });
     }
 }
Example #7
0
        protected void UpdateIdentifiers(LuaIdentifierNameSyntax name, LuaIdentifierNameSyntax target, LuaIdentifierNameSyntax memberName, LuaIdentifierNameSyntax parameter = null)
        {
            LuaMemberAccessExpressionSyntax memberAccess = new LuaMemberAccessExpressionSyntax(target, memberName);
            LuaInvocationExpressionSyntax   invoke       = new LuaInvocationExpressionSyntax(memberAccess);

            invoke.AddArgument(new LuaStringLiteralExpressionSyntax(name));
            invoke.AddArgument(function_);
            if (parameter != null)
            {
                function_.AddParameter(parameter);
            }
            Statement = new LuaExpressionStatementSyntax(invoke);
        }
Example #8
0
        internal (bool success, bool hasAdd) AddGenericImport(LuaInvocationExpressionSyntax invocationExpression, string name, List <string> argumentTypeNames, bool isFromCode)
        {
            if (genericUsingDeclares_.Exists(i => i.NewName == name))
            {
                return(true, false);
            }

            genericUsingDeclares_.Add(new GenericUsingDeclare()
            {
                InvocationExpression = invocationExpression,
                ArgumentTypeNames    = argumentTypeNames,
                NewName    = name,
                IsFromCode = isFromCode
            });
            return(true, true);
        }
Example #9
0
        internal bool AddGenericImport(LuaInvocationExpressionSyntax invocationExpression, string name, List <string> argumentTypeNames, bool isFromCode, out GenericUsingDeclare genericUsingDeclare)
        {
            if (genericUsingDeclares_.Exists(i => i.NewName == name))
            {
                genericUsingDeclare = null;
                return(true);
            }

            genericUsingDeclare = new GenericUsingDeclare()
            {
                InvocationExpression = invocationExpression,
                ArgumentTypeNames    = argumentTypeNames,
                NewName    = name,
                IsFromCode = isFromCode
            };
            genericUsingDeclares_.Add(genericUsingDeclare);
            return(true);
        }
 public LuaForInStatementSyntax(LuaIdentifierNameSyntax identifier, LuaExpressionSyntax expression, bool isAsync = false)
 {
     if (identifier == null)
     {
         throw new ArgumentNullException(nameof(identifier));
     }
     if (expression == null)
     {
         throw new ArgumentNullException(nameof(expression));
     }
     Identifier = identifier;
     if (isAsync)
     {
         Expression = new LuaInvocationExpressionSyntax(LuaIdentifierNameSyntax.AsyncEach, LuaIdentifierNameSyntax.Async, expression);
     }
     else
     {
         Expression = new LuaInvocationExpressionSyntax(LuaIdentifierNameSyntax.Each, expression);
     }
 }
        private void AddPropertyOrEvent(bool isProperty, LuaIdentifierNameSyntax name, LuaIdentifierNameSyntax innerName, LuaExpressionSyntax value, bool isImmutable, bool isStatic, bool isPrivate)
        {
            LuaIdentifierNameSyntax initMethodIdentifier;
            LuaPropertyOrEventIdentifierNameSyntax get, set;

            if (isProperty)
            {
                initMethodIdentifier = LuaIdentifierNameSyntax.Property;
                get = new LuaPropertyOrEventIdentifierNameSyntax(true, true, name);
                set = new LuaPropertyOrEventIdentifierNameSyntax(true, false, name);
            }
            else
            {
                initMethodIdentifier = LuaIdentifierNameSyntax.Event;
                get = new LuaPropertyOrEventIdentifierNameSyntax(false, true, name);
                set = new LuaPropertyOrEventIdentifierNameSyntax(false, false, name);
            }

            local_.Variables.Add(get);
            local_.Variables.Add(set);
            LuaMultipleAssignmentExpressionSyntax assignment = new LuaMultipleAssignmentExpressionSyntax();

            assignment.Lefts.Add(get);
            assignment.Lefts.Add(set);
            LuaInvocationExpressionSyntax invocation = new LuaInvocationExpressionSyntax(initMethodIdentifier);

            invocation.AddArgument(new LuaStringLiteralExpressionSyntax(innerName));
            assignment.Rights.Add(invocation);
            methodList_.Statements.Add(new LuaExpressionStatementSyntax(assignment));

            if (value != null)
            {
                if (isStatic)
                {
                    if (isImmutable)
                    {
                        AddResultTable(name, value);
                    }
                    else
                    {
                        LuaAssignmentExpressionSyntax thisAssignment = new LuaAssignmentExpressionSyntax(name, value);
                        staticLazyStatements_.Add(new LuaExpressionStatementSyntax(thisAssignment));
                    }
                }
                else
                {
                    if (isImmutable)
                    {
                        AddResultTable(name, value);
                    }
                    else
                    {
                        AddInitFiled(name, value);
                    }
                }
            }

            if (!isPrivate)
            {
                AddResultTable(get);
                AddResultTable(set);
            }
        }
Example #12
0
        private void CheckUsingDeclares()
        {
            var imports = UsingDeclares.Where(i => !i.IsFromCode).ToList();

            if (imports.Count > 0)
            {
                imports.Sort();
                foreach (var import in imports)
                {
                    AddImport(import.NewPrefix, import.Prefix);
                }
            }

            var genericImports = GenericUsingDeclares.Where(i => !i.IsFromCode).ToList();

            if (genericImports.Count > 0)
            {
                genericImports.Sort();
                foreach (var import in genericImports)
                {
                    AddImport(import.NewName, import.InvocationExpression);
                }
            }

            var usingDeclares   = UsingDeclares.Where(i => i.IsFromCode).ToList();
            var genericDeclares = GenericUsingDeclares.Where(i => i.IsFromCode).ToList();

            if (usingDeclares.Count > 0 || genericDeclares.Count > 0)
            {
                usingDeclares.Sort();
                genericDeclares.Sort();

                foreach (var usingDeclare in usingDeclares)
                {
                    AddImport(usingDeclare.NewPrefix, null);
                }

                foreach (var usingDeclare in genericDeclares)
                {
                    AddImport(usingDeclare.NewName, null);
                }

                var global             = LuaIdentifierNameSyntax.Global;
                var functionExpression = new LuaFunctionExpressionSyntax();
                functionExpression.AddParameter(global);
                foreach (var usingDeclare in usingDeclares)
                {
                    LuaIdentifierNameSyntax newPrefixIdentifier = usingDeclare.NewPrefix;
                    if (usingDeclare.Prefix != usingDeclare.NewPrefix)
                    {
                        functionExpression.Body.AddStatement(newPrefixIdentifier.Assignment(usingDeclare.Prefix));
                    }
                    else
                    {
                        functionExpression.Body.AddStatement(newPrefixIdentifier.Assignment(global.MemberAccess(usingDeclare.Prefix)));
                    }
                }

                foreach (var usingDeclare in genericDeclares)
                {
                    functionExpression.Body.AddStatement(((LuaIdentifierNameSyntax)usingDeclare.NewName).Assignment(usingDeclare.InvocationExpression));
                }

                var invocationExpression = new LuaInvocationExpressionSyntax(LuaIdentifierNameSyntax.Import, functionExpression);
                importAreaStatements.Statements.Add(invocationExpression);
            }

            int index = Statements.FindIndex(i => i is LuaNamespaceDeclarationSyntax);

            if (index != -1)
            {
                Statements.Insert(index, importAreaStatements);
            }
        }
Example #13
0
        private void AddPropertyOrEvent(bool isProperty, LuaIdentifierNameSyntax name, LuaIdentifierNameSyntax innerName, LuaExpressionSyntax value, bool isImmutable, bool isStatic, bool isPrivate, LuaExpressionSyntax typeExpression, List <LuaStatementSyntax> statements)
        {
            LuaPropertyOrEventIdentifierNameSyntax get, set;

            if (isProperty)
            {
                get = new LuaPropertyOrEventIdentifierNameSyntax(true, true, name);
                set = new LuaPropertyOrEventIdentifierNameSyntax(true, false, name);
            }
            else
            {
                get = new LuaPropertyOrEventIdentifierNameSyntax(false, true, name);
                set = new LuaPropertyOrEventIdentifierNameSyntax(false, false, name);
            }

            local_.Variables.Add(get);
            local_.Variables.Add(set);
            if (!isStatic)
            {
                LuaIdentifierNameSyntax initMethodIdentifier     = isProperty ? LuaIdentifierNameSyntax.Property : LuaIdentifierNameSyntax.Event;
                LuaMultipleAssignmentExpressionSyntax assignment = new LuaMultipleAssignmentExpressionSyntax();
                assignment.Lefts.Add(get);
                assignment.Lefts.Add(set);
                LuaInvocationExpressionSyntax invocation = new LuaInvocationExpressionSyntax(initMethodIdentifier);
                invocation.AddArgument(new LuaStringLiteralExpressionSyntax(innerName));
                assignment.Rights.Add(invocation);
                methodList_.Statements.Add(assignment.ToStatement());
            }
            else
            {
                var memberAccess = new LuaMemberAccessExpressionSyntax(typeExpression, innerName);
                var getFunction  = new LuaFunctionExpressionSyntax();
                var setFunction  = new LuaFunctionExpressionSyntax();
                if (isProperty)
                {
                    getFunction.AddStatement(new LuaReturnStatementSyntax(memberAccess));
                    setFunction.AddParameter(LuaIdentifierNameSyntax.Value);
                    var assignment = new LuaAssignmentExpressionSyntax(memberAccess, LuaIdentifierNameSyntax.Value);
                    setFunction.AddStatement(assignment.ToStatement());
                }
                else
                {
                    getFunction.AddParameter(LuaIdentifierNameSyntax.Value);
                    var getAssignment = new LuaAssignmentExpressionSyntax(memberAccess, new LuaBinaryExpressionSyntax(memberAccess, Tokens.Plus, LuaIdentifierNameSyntax.Value));
                    getFunction.AddStatement(getAssignment.ToStatement());
                    setFunction.AddParameter(LuaIdentifierNameSyntax.Value);
                    var setAssignment = new LuaAssignmentExpressionSyntax(memberAccess, new LuaBinaryExpressionSyntax(memberAccess, Tokens.Sub, LuaIdentifierNameSyntax.Value));
                    setFunction.AddStatement(setAssignment.ToStatement());
                }
                methodList_.Statements.Add(new LuaAssignmentExpressionSyntax(get, getFunction).ToStatement());
                methodList_.Statements.Add(new LuaAssignmentExpressionSyntax(set, setFunction).ToStatement());
            }

            if (value != null)
            {
                if (isStatic)
                {
                    if (isImmutable)
                    {
                        AddResultTable(innerName, value);
                    }
                    else
                    {
                        if (statements != null)
                        {
                            staticInitStatements_.AddRange(statements);
                        }
                        LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(new LuaMemberAccessExpressionSyntax(LuaIdentifierNameSyntax.This, innerName), value);
                        staticInitStatements_.Add(new LuaExpressionStatementSyntax(assignment));
                    }
                }
                else
                {
                    if (isImmutable)
                    {
                        AddResultTable(innerName, value);
                    }
                    else
                    {
                        if (statements != null)
                        {
                            initStatements_.AddRange(statements);
                        }
                        AddInitFiled(innerName, value);
                    }
                }
            }

            if (!isPrivate)
            {
                AddResultTable(get);
                AddResultTable(set);
            }
        }
Example #14
0
        private (LuaPropertyOrEventIdentifierNameSyntax, LuaPropertyOrEventIdentifierNameSyntax) AddPropertyOrEvent(bool isProperty, LuaIdentifierNameSyntax name, LuaIdentifierNameSyntax innerName, LuaExpressionSyntax value, bool isImmutable, bool isStatic, bool isPrivate, LuaExpressionSyntax typeExpression, List <LuaStatementSyntax> statements, bool isGetOnly = false)
        {
            LuaPropertyOrEventIdentifierNameSyntax get, set;

            if (isProperty)
            {
                get = new LuaPropertyOrEventIdentifierNameSyntax(true, true, name);
                set = isGetOnly ? null : new LuaPropertyOrEventIdentifierNameSyntax(true, false, name);
            }
            else
            {
                get = new LuaPropertyOrEventIdentifierNameSyntax(false, true, name);
                set = new LuaPropertyOrEventIdentifierNameSyntax(false, false, name);
            }

            local_.Variables.Add(get);
            if (set != null)
            {
                local_.Variables.Add(set);
            }
            if (!isStatic)
            {
                var initMethodIdentifier = isProperty ? LuaIdentifierNameSyntax.Property : LuaIdentifierNameSyntax.Event;
                var assignment           = new LuaMultipleAssignmentExpressionSyntax();
                assignment.Lefts.Add(get);
                if (set != null)
                {
                    assignment.Lefts.Add(set);
                }
                var invocation = new LuaInvocationExpressionSyntax(initMethodIdentifier, new LuaStringLiteralExpressionSyntax(innerName));
                if (set == null)
                {
                    invocation.AddArgument(LuaIdentifierNameSyntax.True);
                }
                assignment.Rights.Add(invocation);
                methodList_.Statements.Add(assignment);
            }
            else
            {
                var memberAccess = typeExpression.MemberAccess(innerName);
                var getFunction  = new LuaFunctionExpressionSyntax();
                var setFunction  = new LuaFunctionExpressionSyntax();
                if (isProperty)
                {
                    getFunction.AddStatement(new LuaReturnStatementSyntax(memberAccess));
                    setFunction.AddParameter(LuaIdentifierNameSyntax.Value);
                    setFunction.AddStatement(memberAccess.Assignment(LuaIdentifierNameSyntax.Value));
                }
                else
                {
                    getFunction.AddParameter(LuaIdentifierNameSyntax.Value);
                    var getAssignment = memberAccess.Assignment(memberAccess.Binary(Tokens.Plus, LuaIdentifierNameSyntax.Value));
                    getFunction.AddStatement(getAssignment);
                    setFunction.AddParameter(LuaIdentifierNameSyntax.Value);
                    var setAssignment = memberAccess.Assignment(memberAccess.Binary(Tokens.Sub, LuaIdentifierNameSyntax.Value));
                    setFunction.AddStatement(setAssignment);
                }
                methodList_.Statements.Add(get.Assignment(getFunction));
                if (set != null)
                {
                    methodList_.Statements.Add(set.Assignment(setFunction));
                }
            }

            if (value != null)
            {
                if (isStatic)
                {
                    if (isImmutable)
                    {
                        AddResultTable(innerName, value);
                    }
                    else
                    {
                        if (statements != null)
                        {
                            staticInitStatements_.AddRange(statements);
                        }
                        staticInitStatements_.Add(LuaIdentifierNameSyntax.This.MemberAccess(innerName).Assignment(value));
                    }
                }
                else
                {
                    if (isImmutable)
                    {
                        AddResultTable(innerName, value);
                    }
                    else
                    {
                        if (statements != null)
                        {
                            initStatements_.AddRange(statements);
                        }
                        AddInitFiled(innerName, value);
                    }
                }
            }

            if (!isPrivate)
            {
                AddResultTable(get);
                if (set != null)
                {
                    AddResultTable(set);
                }
            }

            return(get, set);
        }
Example #15
0
 internal void AddImport(LuaInvocationExpressionSyntax invocationExpression, string name, List <string> argumentTypeNames, bool isFromCode)
 {
     GenericUsingDeclare.AddImportTo(genericUsingDeclares_, invocationExpression, name, argumentTypeNames, isFromCode);
 }
Example #16
0
        private void CheckCtorsFunction(LuaBlockSyntax body)
        {
            bool hasInit  = initStatements_.Count > 0;
            bool hasCtors = ctors_.Count > 0;

            if (hasCtors)
            {
                if (hasInit)
                {
                    if (ctors_.Count == 1)
                    {
                        ctors_.First().Function.Body.Statements.InsertRange(0, initStatements_);
                    }
                    else
                    {
                        var init = LuaIdentifierNameSyntax.Init;
                        AddInitFunction(body, init, GetInitFunction(), false);
                        foreach (var ctor in ctors_)
                        {
                            if (!ctor.Function.IsInvokeThisCtor)
                            {
                                var invocationInit = new LuaInvocationExpressionSyntax(init, LuaIdentifierNameSyntax.This);
                                ctor.Function.Body.Statements.Insert(0, invocationInit);
                            }
                        }
                    }
                }

                if (ctors_.Count == 1)
                {
                    var ctor = ctors_.First();
                    if (ctor.Function.Body.Statements.Count > 0)
                    {
                        if (ctor.Document != null)
                        {
                            body.AddStatement(ctor.Document);
                        }
                        AddInitFunction(body, LuaIdentifierNameSyntax.Ctor, ctor.Function);
                    }
                }
                else
                {
                    LuaTableExpression ctrosTable = new LuaTableExpression();
                    int index = 1;
                    foreach (var ctor in ctors_)
                    {
                        if (ctor.Document != null)
                        {
                            body.AddStatement(ctor.Document);
                        }
                        LuaIdentifierNameSyntax nameIdentifier = GetCtorNameString(index);
                        AddInitFunction(body, nameIdentifier, ctor.Function, false);
                        ctrosTable.Add(nameIdentifier);
                        ++index;
                    }
                    AddResultTable(LuaIdentifierNameSyntax.Ctor, ctrosTable);
                }
            }
            else
            {
                if (hasInit)
                {
                    AddInitFunction(body, LuaIdentifierNameSyntax.Ctor, GetInitFunction());
                }
            }
        }
        private void CheckUsingDeclares()
        {
            var imports = usingDeclares_.Where(i => !i.IsFromCode).ToList();

            if (imports.Count > 0)
            {
                imports.Sort();
                foreach (var import in imports)
                {
                    AddImport(import.NewPrefix, import.Prefix);
                }
            }

            var genericImports = genericUsingDeclares_.Where(i => !i.IsFromCode).ToList();

            if (genericImports.Count > 0)
            {
                genericImports.Sort();
                foreach (var import in genericImports)
                {
                    AddImport(import.NewName, import.InvocationExpression);
                }
            }

            var usingDeclares   = usingDeclares_.Where(i => i.IsFromCode).ToList();
            var genericDeclares = genericUsingDeclares_.Where(i => i.IsFromCode).ToList();

            if (usingDeclares.Count > 0 || genericDeclares.Count > 0)
            {
                usingDeclares.Sort();
                genericDeclares.Sort();

                foreach (var usingDeclare in usingDeclares)
                {
                    AddImport(usingDeclare.NewPrefix, null);
                }

                foreach (var usingDeclare in genericDeclares)
                {
                    AddImport(usingDeclare.NewName, null);
                }

                var global             = LuaIdentifierNameSyntax.Global;
                var functionExpression = new LuaFunctionExpressionSyntax();
                functionExpression.AddParameter(global);
                foreach (var usingDeclare in usingDeclares)
                {
                    if (usingDeclare.Prefix != usingDeclare.NewPrefix)
                    {
                        var assignment = new LuaAssignmentExpressionSyntax(usingDeclare.NewPrefix, usingDeclare.Prefix);
                        functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment));
                    }
                    else
                    {
                        var right      = new LuaMemberAccessExpressionSyntax(global, usingDeclare.Prefix);
                        var assignment = new LuaAssignmentExpressionSyntax(usingDeclare.NewPrefix, right);
                        functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment));
                    }
                }

                foreach (var usingDeclare in genericDeclares)
                {
                    var assignment = new LuaAssignmentExpressionSyntax(usingDeclare.NewName, usingDeclare.InvocationExpression);
                    functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment));
                }

                var invocationExpression = new LuaInvocationExpressionSyntax(LuaIdentifierNameSyntax.UsingDeclare, functionExpression);
                importAreaStatements.Statements.Add(new LuaExpressionStatementSyntax(invocationExpression));
            }

            int index = Statements.FindIndex(i => i is LuaNamespaceDeclarationSyntax);

            if (index != -1)
            {
                Statements.Insert(index, importAreaStatements);
            }
        }