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);
        }
Exemple #2
0
        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);
        }