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 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>(), });
public void Render(IDeclarationSyntax declaration) { switch (declaration) { case JassCommentDeclarationSyntax commentDeclaration: Render(commentDeclaration); break; case JassTypeDeclarationSyntax typeDeclaration: Render(typeDeclaration); break; case JassGlobalDeclarationListSyntax globalDeclarationList: Render(globalDeclarationList); break; case JassGlobalDeclarationSyntax globalDeclaration: Render(globalDeclaration); break; case JassNativeFunctionDeclarationSyntax nativeFunctionDeclaration: Render(nativeFunctionDeclaration); break; case JassFunctionDeclarationSyntax functionDeclaration: Render(functionDeclaration); break; } }