Example #1
0
        protected override void PrintChildren(TextBuilder result, LabelTableToken labelTable, bool showStartOffsets)
        {
            result.PushIndent();
            bool indented = false;

            for (int i = 0; i < Children.Count; i++)
            {
                var stmt = Children[i];
                if (stmt.Token is CaseToken || stmt.Token is DefaultToken)
                {
                    if (indented)
                    {
                        result.PopIndent();
                        indented = false;
                    }
                    result.Indent().Append(stmt.Token.ToString()).Append(":").NewLine();
                }
                else
                {
                    if (!indented)
                    {
                        indented = true;
                        result.PushIndent();
                    }
                    stmt.Print(result, labelTable, showStartOffsets);
                }
            }
            if (indented)
            {
                result.PopIndent();
            }
            result.PopIndent();
        }
Example #2
0
        public override void Decompile(TextBuilder result)
        {
            result.Indent().Append("state ").Append(_self.ObjectName).NewLine();
            result.Indent().Append("{").NewLine();
            result.PushIndent();
            DecompileChildren(result, false);
            result.PopIndent();

            StatementList bytecode = ReadBytecode();
            DecompileBytecode(bytecode, result, true);

            result.Indent().Append("}").NewLine().NewLine();
        }
Example #3
0
        public override void Decompile(TextBuilder result)
        {
            result.Indent().Append("state ").Append(_self.ObjectName).NewLine();
            result.Indent().Append("{").NewLine();
            result.PushIndent();
            DecompileChildren(result, false);
            result.PopIndent();

            StatementList bytecode = ReadBytecode();

            DecompileBytecode(bytecode, result, true);

            result.Indent().Append("}").NewLine().NewLine();
        }
Example #4
0
 public override void Decompile(TextBuilder result)
 {
     result.Indent().Append("struct ");
     if (Native) result.Append("native ");
     if (Transient) result.Append("transient ");
     result.Append(_self.ObjectName);
     if (_super != null)
     {
         result.Append(" extends ").Append(_super.ObjectName);
     }
     result.NewLine();
     result.Append("{").NewLine();
     result.PushIndent();
     DecompileChildren(result, true);
     result.PopIndent();
     result.Indent().Append("}").NewLine().NewLine();
 }
Example #5
0
 public override void Decompile(TextBuilder result)
 {
     result.Indent().Append("struct ");
     if (Native)
     {
         result.Append("native ");
     }
     if (Transient)
     {
         result.Append("transient ");
     }
     result.Append(_self.ObjectName);
     if (_super != null)
     {
         result.Append(" extends ").Append(_super.ObjectName);
     }
     result.NewLine();
     result.Append("{").NewLine();
     result.PushIndent();
     DecompileChildren(result, true);
     result.PopIndent();
     result.Indent().Append("}").NewLine().NewLine();
 }
Example #6
0
 protected override void PrintChildren(TextBuilder result, LabelTableToken labelTable, bool showStartOffsets)
 {
     result.PushIndent();
     bool indented = false;
     for (int i = 0; i < Children.Count; i++)
     {
         var stmt = Children[i];
         if (stmt.Token is CaseToken || stmt.Token is DefaultToken)
         {
             if (indented)
             {
                 result.PopIndent();
                 indented = false;
             }
             result.Indent().Append(stmt.Token.ToString()).Append(":").NewLine();
         }
         else
         {
             if (!indented)
             {
                 indented = true;
                 result.PushIndent();
             }
             stmt.Print(result, labelTable, showStartOffsets);
         }
     }
     if (indented) result.PopIndent();
     result.PopIndent();
 }
Example #7
0
 public void Print(TextBuilder result, LabelTableToken labelTable, bool showStartOffset)
 {
     result.PushIndent();
     _statements.ForEach(s => s.Print(result, labelTable, showStartOffset));
     result.PopIndent();
 }
Example #8
0
        public void Decompile(TextBuilder result, bool createControlStatements)
        {
            result.Indent();
            if (Native)
            {
                result.Append("native");
                if (_nativeIndex > 0)
                {
                    result.Append("(").Append(_nativeIndex).Append(")");
                }
                result.Append(" ");
            }

            _flags.Except("Native", "Event", "Delegate", "Defined", "Public", "HasDefaults", "HasOutParms").Each(f => result.Append(f.ToLower() + " "));

            if (HasFlag("Event"))
            {
                result.Append("event ");
            }
            else if (HasFlag("Delegate"))
            {
                result.Append("delegate ");
            }
            else
            {
                result.Append("function ");
            }
            string type = GetReturnType();

            if (type != null)
            {
                result.Append(type).Append(" ");
            }
            result.Append(_self.ObjectName).Append("(");
            int paramCount = 0;
            var locals     = new List <UnClassProperty>();

            var statements = ReadBytecode();

            foreach (UnExport export in _self.Children.Reverse())
            {
                object instance = export.ReadInstance();
                if (instance is UnClassProperty)
                {
                    var prop = (UnClassProperty)instance;
                    if (prop.Parm)
                    {
                        if (!prop.ReturnParm)
                        {
                            if (paramCount > 0)
                            {
                                result.Append(", ");
                            }

                            prop.Flags.Except("Parm").Each(f => result.Append(f.ToLower() + " "));
                            result.Append(prop.GetPropertyType()).Append(" ").Append(export.ObjectName);
                            if (prop.OptionalParm && statements.Count > 0)
                            {
                                if (statements[0].Token is NothingToken)
                                {
                                    statements.RemoveRange(0, 1);
                                }
                                else if (statements [0].Token is DefaultParamValueToken)
                                {
                                    result.Append(" = ").Append(statements[0].Token.ToString());
                                    statements.RemoveRange(0, 1);
                                }
                            }
                            paramCount++;
                        }
                    }
                    else
                    {
                        locals.Add(prop);
                    }
                }
            }
            result.Append(")");
            if (HasFlag("Defined"))
            {
                result.NewLine().Indent().Append("{").NewLine();
                result.PushIndent();
                foreach (var local in locals)
                {
                    result.Indent().Append("local ").Append(local.GetPropertyType()).Append(" ").Append(local.Name).Append(";").NewLine();
                }
                result.PopIndent();   // will be pushed again in DecompileBytecode()
                DecompileBytecode(statements, result, createControlStatements);
                result.Indent().Append("}").NewLine().NewLine();
            }
            else
            {
                result.Append(";").NewLine().NewLine();
            }
        }
Example #9
0
 public void Print(TextBuilder result, LabelTableToken labelTable, bool showStartOffset)
 {
     result.PushIndent();
     _statements.ForEach(s => s.Print(result, labelTable, showStartOffset));
     result.PopIndent();
 }
Example #10
0
        public void Decompile(TextBuilder result, bool createControlStatements)
        {
            result.Indent();
            if (Native)
            {
                result.Append("native");
                if (_nativeIndex > 0)
                    result.Append("(").Append(_nativeIndex).Append(")");
                result.Append(" ");
            }

            _flags.Except("Native", "Event", "Delegate", "Defined", "Public", "HasDefaults", "HasOutParms").Each(f => result.Append(f.ToLower() + " "));

            if (HasFlag("Event"))
                result.Append("event ");
            else if (HasFlag("Delegate"))
                result.Append("delegate ");
            else
                result.Append("function ");
            string type = GetReturnType();
            if (type != null)
            {
                result.Append(type).Append(" ");
            }
            result.Append(_self.ObjectName).Append("(");
            int paramCount = 0;
            var locals = new List<UnClassProperty>();

            var statements = ReadBytecode();
            foreach (UnExport export in _self.Children.Reverse())
            {
                object instance = export.ReadInstance();
                if (instance is UnClassProperty)
                {
                    var prop = (UnClassProperty)instance;
                    if (prop.Parm)
                    {
                        if (!prop.ReturnParm)
                        {
                            if (paramCount > 0)
                                result.Append(", ");

                            prop.Flags.Except("Parm").Each(f => result.Append(f.ToLower() + " "));
                            result.Append(prop.GetPropertyType()).Append(" ").Append(export.ObjectName);
                            if (prop.OptionalParm && statements.Count > 0)
                            {
                                if (statements[0].Token is NothingToken)
                                    statements.RemoveRange(0, 1);
                                else if (statements [0].Token is DefaultParamValueToken)
                                {
                                    result.Append(" = ").Append(statements[0].Token.ToString());
                                    statements.RemoveRange(0, 1);
                                }
                            }
                            paramCount++;
                        }
                    }
                    else
                    {
                        locals.Add(prop);
                    }
                }
            }
            result.Append(")");
            if (HasFlag("Defined"))
            {
                result.NewLine().Indent().Append("{").NewLine();
                result.PushIndent();
                foreach (var local in locals)
                {
                    result.Indent().Append("local ").Append(local.GetPropertyType()).Append(" ").Append(local.Name).Append(";").NewLine();
                }
                result.PopIndent();   // will be pushed again in DecompileBytecode()
                DecompileBytecode(statements, result, createControlStatements);
                result.Indent().Append("}").NewLine().NewLine();
            }
            else
            {
                result.Append(";").NewLine().NewLine();
            }
        }