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); }
public void Render(JassCompilationUnitSyntax compilationUnit) { foreach (var declaration in compilationUnit.Declarations) { Render(declaration); WriteLine(); } }
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)); }