예제 #1
0
 private void DecompileReplicationBlock(TextBuilder result, StatementList statementList)
 {
     result.Append("replication\n{\n").PushIndent();
     for (int i = 0; i < statementList.Count; i++)
     {
         List <string> names = FindReplicatedProperties(statementList[i].StartOffset);
         if (names.Count > 0)
         {
             result.Indent().Append("if (").Append(statementList[i].Token.ToString()).Append(")").NewLine();
             result.Indent().Append("    ");
             foreach (string name in names)
             {
                 result.Append(name);
                 if (name != names.Last())
                 {
                     result.Append(", ");
                 }
             }
             result.Append(";").NewLine().NewLine();
         }
     }
     result.Append("}").NewLine().NewLine().PopIndent();
 }
예제 #2
0
        public void DecompileBytecode(StatementList statements, TextBuilder result, bool createControlStatements)
        {
            var labelTableStatement = statements.Find(s => s.Token is LabelTableToken);
            var labelTable          = (LabelTableToken)labelTableStatement?.Token;

            result.HasErrors = statements.HasErrors();
            if (createControlStatements)
            {
                try
                {
                    statements.CreateControlStatements();
                }
                catch (Exception)
                {
                    ProblemRegistry.RegisterIncompleteControlFlow(this);
                }
                if (statements.IsIncompleteControlFlow())
                {
                    ProblemRegistry.RegisterIncompleteControlFlow(this);
                }
                statements.RemoveRedundantReturns();
            }
            statements.Print(result, labelTable, !createControlStatements);
        }
예제 #3
0
 internal void ReplaceRange(int index, StatementList oldStatements, Statement newStatement)
 {
     oldStatements.statements.ForEach(c => statements.Remove(c));
     statements.Insert(index, newStatement);
     newStatement.Parent = _parent;
 }
예제 #4
0
 public SwitchStatement(int startOffset, BytecodeToken token, StatementList children, int endOffset)
     : base(startOffset, token, children, endOffset)
 {
 }