Esempio n. 1
0
        public override BSizeT Parse(Stream stream, BHeader header)
        {
            var value = new BSizeT(this.m_integerType.RawParse(stream, header));

            if (header.Debug)
            {
                Console.WriteLine("-- parsed <size_t> " + value.AsInteger());
            }

            return(value);
        }
Esempio n. 2
0
        public BList <T> ParseList(Stream stream, BHeader header)
        {
            var length = header.Integer.Parse(stream, header);
            var values = new List <T>();

            length.Iterate(() =>
            {
                values.Add(this.Parse(stream, header));
            });
            return(new BList <T>(length, values));
        }
Esempio n. 3
0
 protected override void ParseMain(Stream stream, BHeader header, LFunctionParseState s)
 {
     s.LineBegin        = header.Integer.Parse(stream, header).AsInteger();
     s.LineEnd          = header.Integer.Parse(stream, header).AsInteger();
     s.LenParameter     = stream.ReadByte();
     s.VarArg           = stream.ReadByte();
     s.MaximumStackSize = stream.ReadByte();
     this.ParseCode(stream, header, s);
     this.ParseConstants(stream, header, s);
     this.ParseUpvalues(stream, header, s);
     this.ParseDebug(stream, header, s);
 }
Esempio n. 4
0
        public override LNumber Parse(Stream stream, BHeader header)
        {
            // HACK HACK HACK
            var     bigEndian = header.BigEndian;
            LNumber value     = null;

            if (this.Integral)
            {
                switch (this.Size)
                {
                case 4:
                {
                    value = new LIntNumber(stream.ReadInt32(bigEndian));
                    break;
                }

                case 8:
                {
                    value = new LLongNumber(stream.ReadInt64(bigEndian));
                    break;
                }
                }
            }
            else
            {
                switch (this.Size)
                {
                case 4:
                {
                    value = new LFloatNumber(stream.ReadSingle(bigEndian));
                    break;
                }

                case 8:
                {
                    value = new LDoubleNumber(stream.ReadDouble(bigEndian));
                    break;
                }
                }
            }

            if (value == null)
            {
                throw new InvalidOperationException("The input chunk has an unsupported Lua number format");
            }

            if (header.Debug)
            {
                Console.WriteLine("-- parsed <number> " + value);
            }

            return(value);
        }
Esempio n. 5
0
        public override LLocal Parse(Stream stream, BHeader header)
        {
            var name  = header.String.Parse(stream, header);
            var start = header.Integer.Parse(stream, header);
            var end   = header.Integer.Parse(stream, header);

            if (header.Debug)
            {
                Console.WriteLine("-- parsing local, name: {0} from {1} to {2}", name, start.AsInteger(), end.AsInteger());
            }

            return(new LLocal(name, start, end));
        }
Esempio n. 6
0
        public override LObject Parse(Stream stream, BHeader header)
        {
            var type = stream.ReadByte();

            if (header.Debug && type < m_constantTypes.Length)
            {
                var cType = m_constantTypes[type];
                Console.WriteLine("-- parsing <constant>, type is {0}", type != 2 ? cType : "illegal " + type);
            }

            return(type switch
            {
                0 => LNil.NIL,
                1 => header.Bool.Parse(stream, header),
                3 => header.Number.Parse(stream, header),
                4 => header.String.Parse(stream, header),
                _ => throw new InvalidOperationException(),
            });
Esempio n. 7
0
        public override LString Parse(Stream stream, BHeader header)
        {
            var sizeT = header.SizeT.Parse(stream, header);
            var sb    = new StringBuilder();

            sizeT.Iterate(() =>
            {
                sb.Append(stream.ReadChar());
            });
            var str = sb.ToString();

            if (header.Debug)
            {
                Console.WriteLine("-- parsed <string> \"" + str + "\"");
            }

            return(new LString(sizeT, str));
        }
Esempio n. 8
0
        public override LBoolean Parse(Stream stream, BHeader header)
        {
            var value = stream.ReadByte();

            if ((value & 0xFFFFFFFE) != 0)
            {
                throw new InvalidOperationException();
            }
            else
            {
                var boolean = (value == 0) ? LBoolean.LFALSE : LBoolean.LTRUE;
                if (header.Debug)
                {
                    Console.WriteLine("-- parsed <boolean> " + boolean);
                }

                return(boolean);
            }
        }
Esempio n. 9
0
 public abstract T Parse(Stream stream, BHeader header);
Esempio n. 10
0
 protected override void ParseDebug(Stream stream, BHeader header, LFunctionParseState s)
 {
     s.Name = header.String.Parse(stream, header);
     base.ParseDebug(stream, header, s);
 }
Esempio n. 11
0
 public override LUpvalue Parse(Stream stream, BHeader header)
 => new()