AGS.Plugin.Lua.CodeConvertPane.AddStatement C# (CSharp) Метод

AddStatement() приватный Метод

private AddStatement ( StringBuilder luaSB, int indent, SPAGS statement ) : void
luaSB StringBuilder
indent int
statement SPAGS
Результат void
        void AddStatement(StringBuilder luaSB, int indent, SPAGS.Statement statement)
        {
            switch (statement.Type)
            {
                case SPAGS.StatementType.Assign:
                    SPAGS.Statement.Assign assign = (SPAGS.Statement.Assign)statement;
                    AddExpression(luaSB, 0, assign.Target);
                    luaSB.Append(" = ");
                    AddExpression(luaSB, 0, assign.SimpleAssignValue());
                    luaSB.AppendLine();
                    break;
                case SPAGS.StatementType.Block:
                    luaSB.AppendLine("do");
                    AddBlockContent(luaSB, indent + 1, (SPAGS.Statement.Block)statement);
                    AddIndent(luaSB, indent);
                    luaSB.AppendLine("end");
                    break;
                case SPAGS.StatementType.Call:
                    SPAGS.Statement.Call call = (SPAGS.Statement.Call)statement;
                    if (call.CallExpression.Parameters.Count == 1
                        && call.CallExpression.Parameters[0] is SPAGS.Expression.StringLiteral)
                    {
                        AddExpression(luaSB, indent, call.CallExpression.CallingOn);
                        luaSB.Append(" ");
                        AddExpression(luaSB, indent, call.CallExpression.Parameters[0]);
                    }
                    else
                    {
                        AddExpression(luaSB, indent, call.CallExpression);
                    }
                    luaSB.AppendLine();
                    break;
                case SPAGS.StatementType.If:
                    SPAGS.Statement.If conditional = (SPAGS.Statement.If)statement;
                    luaSB.Append("if ");
                    AddExpression(luaSB, indent, conditional.IfThisIsTrue);
                    luaSB.AppendLine(" then");
                    AddBlockContent(luaSB, indent+1, Enblock(conditional.ThenDoThis));
                    while (conditional.ElseDoThis is SPAGS.Statement.If)
                    {
                        conditional = (SPAGS.Statement.If)conditional.ElseDoThis;
                        AddIndent(luaSB, indent);
                        luaSB.Append("elseif ");
                        AddExpression(luaSB, indent, conditional.IfThisIsTrue);
                        luaSB.AppendLine(" then");
                        AddBlockContent(luaSB, indent+1, Enblock(conditional.ThenDoThis));
                    }
                    if (conditional.ElseDoThis != null)
                    {
                        AddIndent(luaSB, indent);
                        luaSB.AppendLine("else");
                        AddBlockContent(luaSB, indent+1, Enblock(conditional.ElseDoThis));
                    }
                    AddIndent(luaSB, indent);
                    luaSB.AppendLine("end");
                    break;
                case SPAGS.StatementType.Return:
                    SPAGS.Statement.Return ret = (SPAGS.Statement.Return)statement;
                    if (ret.Value == null)
                    {
                        luaSB.AppendLine("return");
                    }
                    else
                    {
                        luaSB.Append("return ");
                        AddExpression(luaSB, indent, ret.Value);
                        luaSB.AppendLine();
                    }
                    break;
                case SPAGS.StatementType.VariableDeclaration:
                    SPAGS.Statement.VariableDeclaration vardef = (SPAGS.Statement.VariableDeclaration)statement;
                    luaSB.Append("local ");
                    for (int i = 0; i < vardef.Variables.Count; i++)
                    {
                        if (i > 0) luaSB.Append(", ");
                        luaSB.Append(vardef.Variables[i].Name);
                    }
                    luaSB.Append(" = ");
                    for (int i = 0; i < vardef.Variables.Count; i++)
                    {
                        if (i > 0) luaSB.Append(", ");
                        if (vardef.Variables[i].InitialValue != null)
                        {
                            AddExpression(luaSB, indent, vardef.Variables[i].InitialValue);
                        }
                        else
                        {
                            AddExpression(luaSB, indent, vardef.Variables[i].Type.CreateDefaultValueExpression());
                        }
                    }
                    luaSB.AppendLine();
                    break;
                case SPAGS.StatementType.While:
                    SPAGS.Statement.While loop = (SPAGS.Statement.While)statement;
                    luaSB.Append("while ");
                    AddExpression(luaSB, indent, loop.WhileThisIsTrue);
                    luaSB.AppendLine(" do");
                    AddBlockContent(luaSB, indent+1, Enblock(loop.KeepDoingThis));
                    AddIndent(luaSB, indent);
                    luaSB.AppendLine("end");
                    break;
                default:
                    luaSB.AppendLine("-- " + statement.Type.ToString());
                    break;
            }
        }