Ejemplo n.º 1
0
 public void AddVarSym(string name, int address, int offset, int flags, int data)
 {
     Symbols.Vars.Add(LastVarSym = new VarSym(name, address, offset, scopes.Peek().Index, flags, data));
 }
Ejemplo n.º 2
0
        private static void ReadSymbols(BinaryReader reader, Unit unit)
        {
            var di = new DebugInfo();

            unit.Symbols = di;
            di.File      = reader.ReadString();

            var scopes = reader.ReadInt32();

            for (var i = 0; i < scopes; i++)
            {
                var s = new ScopeSym();
                s.Index       = reader.ReadInt32();
                s.ParentIndex = reader.ReadInt32();
                s.StartOffset = reader.ReadInt32();
                s.EndOffset   = reader.ReadInt32();
                s.StartLine   = reader.ReadInt32();
                s.StartColumn = reader.ReadInt32();
                s.EndLine     = reader.ReadInt32();
                s.EndColumn   = reader.ReadInt32();
                di.Scopes.Add(s);
            }

            var lines = reader.ReadInt32();

            for (var i = 0; i < lines; i++)
            {
                var l = new LineSym();
                l.Offset = reader.ReadInt32();
                l.Line   = reader.ReadInt32();
                l.Column = reader.ReadInt32();
                di.Lines.Add(l);
            }

            var vars = reader.ReadInt32();

            for (var i = 0; i < vars; i++)
            {
                var v = new VarSym();
                v.Name    = reader.ReadString();
                v.Address = reader.ReadInt32();
                v.Offset  = reader.ReadInt32();
                v.Scope   = reader.ReadInt32();
                v.Flags   = reader.ReadInt32();
                v.Data    = reader.ReadInt32();
                di.Vars.Add(v);
            }

            var funs = reader.ReadInt32();

            for (var i = 0; i < funs; i++)
            {
                var f = new FunSym();
                f.Name        = reader.ReadString();
                f.Handle      = reader.ReadInt32();
                f.StartOffset = reader.ReadInt32();
                f.EndOffset   = reader.ReadInt32();

                var pars = reader.ReadInt32();
                f.Parameters = new Par[pars];
                for (var j = 0; j < pars; j++)
                {
                    var name  = reader.ReadString();
                    var va    = reader.ReadBoolean();
                    var value = ObjectFile.DeserializeObject(reader);
                    var p     = new Par(name, value, va);
                    f.Parameters[j] = p;
                }

                di.Functions.Add(f.Handle, f);
            }
        }