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); }
public IEnumerable <MemberDeclarationSyntax> Transpile(JassGlobalDeclarationListSyntax globalDeclarationList) { foreach (var declaration in globalDeclarationList.Globals) { if (declaration is JassGlobalDeclarationSyntax globalDeclaration) { yield return(Transpile(globalDeclaration)); } } }
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), }));
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), });
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>(), });
public void Render(JassGlobalDeclarationListSyntax globalDeclarationList) { WriteLine(JassKeyword.Globals); Indent(); foreach (var globalDeclaration in globalDeclarationList.Globals) { Render(globalDeclaration); WriteLine(); } Outdent(); Write(JassKeyword.EndGlobals); }
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>(), });