private bool TryAdaptGlobalDeclarationList(JassMapScriptAdapterContext context, JassGlobalDeclarationListSyntax globalDeclarationList, [NotNullWhen(true)] out ITopLevelDeclarationSyntax?adaptedGlobalDeclarationList)
        {
            var isAdapted = false;

            var declarationsBuilder = ImmutableArray.CreateBuilder <IGlobalDeclarationSyntax>();

            foreach (var declaration in globalDeclarationList.Globals)
            {
                if (TryAdaptIGlobalDeclaration(context, declaration, out var adaptedDeclaration))
                {
                    declarationsBuilder.Add(adaptedDeclaration);
                    isAdapted = true;
                }
                else
                {
                    declarationsBuilder.Add(declaration);
                }
            }

            if (isAdapted)
            {
                adaptedGlobalDeclarationList = new JassGlobalDeclarationListSyntax(declarationsBuilder.ToImmutable());
                return(true);
            }

            adaptedGlobalDeclarationList = null;
            return(false);
        }
Пример #2
0
 public IEnumerable <MemberDeclarationSyntax> Transpile(JassGlobalDeclarationListSyntax globalDeclarationList)
 {
     foreach (var declaration in globalDeclarationList.Globals)
     {
         if (declaration is JassGlobalDeclarationSyntax globalDeclaration)
         {
             yield return(Transpile(globalDeclaration));
         }
     }
 }
Пример #3
0
 public IEnumerable <LuaStatementSyntax> Transpile(JassGlobalDeclarationListSyntax globalDeclarationList)
 {
     return(globalDeclarationList.Globals
            .Where(declaration => !(declaration is JassCommentDeclarationSyntax && IgnoreComments))
            .Where(declaration => !(declaration is JassEmptyDeclarationSyntax && IgnoreEmptyDeclarations))
            .Select(declaration => declaration switch
     {
         JassEmptyDeclarationSyntax emptyDeclaration => Transpile(emptyDeclaration),
         JassCommentDeclarationSyntax commentDeclaration => Transpile(commentDeclaration),
         JassGlobalDeclarationSyntax globalDeclaration => Transpile(globalDeclaration),
     }));
Пример #4
0
        private bool TryAdaptDeclaration(JassMapScriptAdapterContext context, ITopLevelDeclarationSyntax declaration, [NotNullWhen(true)] out ITopLevelDeclarationSyntax?adaptedDeclaration)
        {
            return(declaration switch
            {
                JassGlobalDeclarationListSyntax globalDeclarationList => TryAdaptGlobalDeclarationList(context, globalDeclarationList, out adaptedDeclaration),
                JassNativeFunctionDeclarationSyntax nativeFunctionDeclaration => TryAdaptNativeFunctionDeclaration(context, nativeFunctionDeclaration, out adaptedDeclaration),
                JassFunctionDeclarationSyntax functionDeclaration => TryAdaptFunctionDeclaration(context, functionDeclaration, out adaptedDeclaration),
                JassTypeDeclarationSyntax typeDeclaration => TryAdaptTypeDeclaration(context, typeDeclaration, out adaptedDeclaration),

                _ => TryAdaptDummy(context, declaration, out adaptedDeclaration),
            });
Пример #5
0
 public IEnumerable <MemberDeclarationSyntax> Transpile(IDeclarationSyntax declaration)
 {
     return(declaration switch
     {
         JassTypeDeclarationSyntax typeDeclaration => new[] { Transpile(typeDeclaration) },
         JassGlobalDeclarationListSyntax globalDeclarationList => Transpile(globalDeclarationList),
         JassGlobalDeclarationSyntax globalDeclaration => new[] { Transpile(globalDeclaration) },
         JassNativeFunctionDeclarationSyntax nativeFunctionDeclaration => new[] { Transpile(nativeFunctionDeclaration) },
         JassFunctionDeclarationSyntax functionDeclaration => new[] { Transpile(functionDeclaration) },
         _ => Array.Empty <MemberDeclarationSyntax>(),
     });
Пример #6
0
        public void Render(JassGlobalDeclarationListSyntax globalDeclarationList)
        {
            WriteLine(JassKeyword.Globals);
            Indent();

            foreach (var globalDeclaration in globalDeclarationList.Globals)
            {
                Render(globalDeclaration);
                WriteLine();
            }

            Outdent();
            Write(JassKeyword.EndGlobals);
        }
Пример #7
0
        public IEnumerable <LuaStatementSyntax> Transpile(IDeclarationSyntax declaration)
        {
            if (declaration is JassNativeFunctionDeclarationSyntax nativeFunctionDeclaration)
            {
                RegisterFunctionReturnType(nativeFunctionDeclaration.FunctionDeclarator);
            }

            return(declaration switch
            {
                JassEmptyDeclarationSyntax emptyDeclaration => IgnoreEmptyDeclarations?Array.Empty <LuaStatementSyntax>() : new[] { Transpile(emptyDeclaration) },
                JassCommentDeclarationSyntax commentDeclaration => IgnoreComments?Array.Empty <LuaStatementSyntax>() : new[] { Transpile(commentDeclaration) },
                JassGlobalDeclarationListSyntax globalDeclarationList => Transpile(globalDeclarationList),
                JassGlobalDeclarationSyntax globalDeclaration => new[] { Transpile(globalDeclaration) },
                JassFunctionDeclarationSyntax functionDeclaration => IgnoreEmptyDeclarations && KeepFunctionsSeparated ? new[] { Transpile(functionDeclaration), LuaBlankLinesStatement.One } : new[] { Transpile(functionDeclaration) },
                _ => Array.Empty <LuaStatementSyntax>(),
            });