示例#1
0
        public bool TryAdaptCompilationUnit(JassMapScriptAdapterContext context, JassCompilationUnitSyntax compilationUnit, [NotNullWhen(true)] out JassCompilationUnitSyntax?adaptedCompilationUnit)
        {
            if (compilationUnit is null)
            {
                throw new ArgumentNullException(nameof(compilationUnit));
            }

            var isAdapted = false;

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

            foreach (var declaration in compilationUnit.Declarations)
            {
                if (TryAdaptDeclaration(context, declaration, out var adaptedDeclaration))
                {
                    declarationsBuilder.Add(adaptedDeclaration);
                    isAdapted = true;
                }
                else
                {
                    declarationsBuilder.Add(declaration);
                }
            }

            if (isAdapted)
            {
                adaptedCompilationUnit = new JassCompilationUnitSyntax(declarationsBuilder.ToImmutable());
                return(true);
            }

            adaptedCompilationUnit = null;
            return(false);
        }
        public LuaCompilationUnitSyntax Transpile(JassCompilationUnitSyntax compilationUnit)
        {
            var luaCompilationUnit = new LuaCompilationUnitSyntax(hasGeneratedMark: false);

            luaCompilationUnit.Statements.AddRange(compilationUnit.Declarations.SelectMany(Transpile));

            return(luaCompilationUnit);
        }
示例#3
0
 public void Render(JassCompilationUnitSyntax compilationUnit)
 {
     foreach (var declaration in compilationUnit.Declarations)
     {
         Render(declaration);
         WriteLine();
     }
 }
示例#4
0
 public void RegisterJassFile(JassCompilationUnitSyntax compilationUnit)
 {
     foreach (var declaration in compilationUnit.Declarations)
     {
         if (declaration is JassGlobalDeclarationListSyntax globalDeclarationList)
         {
             foreach (var global in globalDeclarationList.Globals)
             {
                 if (global is JassGlobalDeclarationSyntax globalDeclaration)
                 {
                     RegisterVariableType(globalDeclaration.Declarator, false);
                 }
             }
         }
         else if (declaration is JassNativeFunctionDeclarationSyntax nativeFunctionDeclaration)
         {
             RegisterFunctionReturnType(nativeFunctionDeclaration.FunctionDeclarator);
         }
         else if (declaration is JassFunctionDeclarationSyntax functionDeclaration)
         {
             RegisterFunctionReturnType(functionDeclaration.FunctionDeclarator);
         }
     }
 }
 public IEnumerable <MemberDeclarationSyntax> Transpile(JassCompilationUnitSyntax compilationUnit)
 {
     return(compilationUnit.Declarations.SelectMany(Transpile));
 }