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); }
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)); }
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); }
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); }
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)); }
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(), });
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)); }
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); } }
public abstract T Parse(Stream stream, BHeader header);
protected override void ParseDebug(Stream stream, BHeader header, LFunctionParseState s) { s.Name = header.String.Parse(stream, header); base.ParseDebug(stream, header, s); }
public override LUpvalue Parse(Stream stream, BHeader header) => new()