public LuaStatementSyntax Transpile(JassIfStatementSyntax ifStatement) { var luaIfStatement = new LuaIfStatementSyntax(Transpile(ifStatement.Condition, out _)); luaIfStatement.Body.Statements.AddRange(Transpile(ifStatement.Body)); luaIfStatement.ElseIfStatements.AddRange(ifStatement.ElseIfClauses.Select(Transpile)); luaIfStatement.Else = ifStatement.ElseClause is null ? null : Transpile(ifStatement.ElseClause); return(luaIfStatement); }
private bool TryAdaptStatement(JassMapScriptAdapterContext context, IStatementSyntax statement, [NotNullWhen(true)] out IStatementSyntax?adaptedStatement) { return(statement switch { JassLocalVariableDeclarationStatementSyntax localVariableDeclarationStatement => TryAdaptLocalVariableDeclarationStatement(context, localVariableDeclarationStatement, out adaptedStatement), JassSetStatementSyntax setStatement => TryAdaptSetStatement(context, setStatement, out adaptedStatement), JassCallStatementSyntax callStatement => TryAdaptCallStatement(context, callStatement, out adaptedStatement), JassIfStatementSyntax ifStatement => TryAdaptIfStatement(context, ifStatement, out adaptedStatement), JassLoopStatementSyntax loopStatement => TryAdaptLoopStatement(context, loopStatement, out adaptedStatement), JassExitStatementSyntax exitStatement => TryAdaptExitStatement(context, exitStatement, out adaptedStatement), JassReturnStatementSyntax returnStatement => TryAdaptReturnStatement(context, returnStatement, out adaptedStatement), JassDebugStatementSyntax debugStatement => TryAdaptDebugStatement(context, debugStatement, out adaptedStatement), _ => TryAdaptDummy(context, statement, out adaptedStatement), });
public LuaStatementSyntax Transpile(IStatementSyntax statement) { return(statement switch { JassEmptyStatementSyntax emptyStatement => Transpile(emptyStatement), JassCommentStatementSyntax commentStatement => Transpile(commentStatement), JassLocalVariableDeclarationStatementSyntax localVariableDeclarationStatement => Transpile(localVariableDeclarationStatement), JassSetStatementSyntax setStatement => Transpile(setStatement), JassCallStatementSyntax callStatement => Transpile(callStatement), JassIfStatementSyntax ifStatement => Transpile(ifStatement), JassLoopStatementSyntax loopStatement => Transpile(loopStatement), JassExitStatementSyntax exitStatement => Transpile(exitStatement), JassReturnStatementSyntax returnStatement => Transpile(returnStatement), JassDebugStatementSyntax debugStatement => Transpile(debugStatement), });
public StatementSyntax Transpile(JassIfStatementSyntax ifStatement) { ElseClauseSyntax?elseClause = null; if (ifStatement.ElseClause is not null) { elseClause = Transpile(ifStatement.ElseClause); } foreach (var elseIfClause in ifStatement.ElseIfClauses.Reverse()) { elseClause = SyntaxFactory.ElseClause(Transpile(elseIfClause, elseClause)); } return(SyntaxFactory.IfStatement( SyntaxFactory.List <AttributeListSyntax>(), Transpile(ifStatement.Condition), SyntaxFactory.Block(Transpile(ifStatement.Body)), elseClause)); }
public void Render(JassIfStatementSyntax ifStatement) { Write($"{JassKeyword.If} "); Render(ifStatement.Condition); WriteLine($" {JassKeyword.Then}"); Indent(); Render(ifStatement.Body); Outdent(); foreach (var elseIfClause in ifStatement.ElseIfClauses) { Render(elseIfClause); } if (ifStatement.ElseClause is not null) { Render(ifStatement.ElseClause); } Write(JassKeyword.EndIf); }
private bool TryAdaptIfStatement(JassMapScriptAdapterContext context, JassIfStatementSyntax ifStatement, [NotNullWhen(true)] out IStatementSyntax?adaptedIfStatement) { var isAdapted = false; var elseIfClausesBuilder = ImmutableArray.CreateBuilder <JassElseIfClauseSyntax>(); foreach (var elseIfClause in ifStatement.ElseIfClauses) { if (TryAdaptElseIfClause(context, elseIfClause, out var adaptedElseIfClause)) { elseIfClausesBuilder.Add(adaptedElseIfClause); isAdapted = true; } else { elseIfClausesBuilder.Add(elseIfClause); } } if (TryAdaptExpression(context, ifStatement.Condition, out var adaptedCondition) | TryAdaptStatementList(context, ifStatement.Body, out var adaptedBody) | isAdapted | TryAdaptElseClause(context, ifStatement.ElseClause, out var adaptedElseClause)) { adaptedIfStatement = new JassIfStatementSyntax( adaptedCondition ?? ifStatement.Condition, adaptedBody ?? ifStatement.Body, isAdapted ? elseIfClausesBuilder.ToImmutable() : ifStatement.ElseIfClauses, adaptedElseClause ?? ifStatement.ElseClause); return(true); } adaptedIfStatement = null; return(false); }