public static DyNativeFunction Create(FunSym sym, int unitId, int funcId, FastList <DyObject[]> captures, DyObject[] locals, int varArgIndex = -1) { var vars = new FastList <DyObject[]>(captures) { locals }; return(new(sym, unitId, funcId, vars, varArgIndex)); }
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); } }
private static string GetFunName(FunSym funSym) { if (funSym.Name is not null && funSym.TypeName is not null) { return($"{funSym.TypeName}.{funSym.Name}"); }
private CodeFrame Read(BinaryReader bw) { var frame = new CodeFrame(); frame.GlobalScope = new Scope(false, null); var v = bw.ReadInt32(); if (v != Version) { throw new ElaLinkerException(Strings.GetMessage("InvalidObjectFile", Version), null); } bw.ReadInt32(); //Version: Major bw.ReadInt32(); //Version: Minor bw.ReadInt32(); //Version: Build bw.ReadInt32(); //Version: Revision bw.ReadInt64(); //Version: Date stamp var c = bw.ReadInt32(); for (var i = 0; i < c; i++) { var alias = bw.ReadString(); var modName = bw.ReadString(); var dllName = bw.ReadString(); dllName = dllName.Length == 0 ? null : dllName; var qual = bw.ReadBoolean(); var pl = bw.ReadInt32(); var list = new string[pl]; for (var j = 0; j < pl; j++) { list[j] = bw.ReadString(); } var lh = bw.ReadInt32(); frame.AddReference(alias, new ModuleReference(frame, modName, dllName, list, 0, 0, qual, lh)); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { frame.GlobalScope.Locals.Add(bw.ReadString(), new ScopeVar((ElaVariableFlags)bw.ReadInt32(), bw.ReadInt32(), bw.ReadInt32())); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { frame.LateBounds.Add(new LateBoundSymbol( bw.ReadString(), bw.ReadInt32(), bw.ReadInt32(), bw.ReadInt32(), bw.ReadInt32(), bw.ReadInt32())); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { var l = new MemoryLayout(bw.ReadInt32(), bw.ReadInt32(), bw.ReadInt32()); frame.Layouts.Add(l); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { frame.Strings.Add(bw.ReadString()); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { var opCode = (Op)bw.ReadByte(); frame.Ops.Add(opCode); frame.OpData.Add(OpSizeHelper.OpSize[(Int32)opCode] > 1 ? bw.ReadInt32() : 0); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { frame.InternalTypes.Add(bw.ReadString(), bw.ReadInt32()); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { var k = bw.ReadString(); var cc = bw.ReadInt32(); var mbr = new ElaClassMember[cc]; for (var j = 0; j < cc; j++) { var m = new ElaClassMember(); m.Components = bw.ReadInt32(); m.Mask = bw.ReadInt32(); m.Name = bw.ReadString(); mbr[j] = m; } frame.InternalClasses.Add(k, new ClassData(mbr)); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { frame.InternalInstances.Add(new InstanceData( bw.ReadString(), bw.ReadString(), bw.ReadInt32(), bw.ReadInt32(), bw.ReadInt32(), bw.ReadInt32())); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { var ct = new ConstructorData { Code = -1, Name = bw.ReadString(), TypeName = bw.ReadString(), TypeModuleId = bw.ReadInt32() }; var cc = bw.ReadInt32(); if (cc > 0) { ct.Parameters = new List <String>(); for (var j = 0; j < cc; j++) { ct.Parameters.Add(bw.ReadString()); } } frame.InternalConstructors.Add(ct); } var di = bw.ReadBoolean(); if (di) { var sym = new DebugInfo(); c = bw.ReadInt32(); for (var i = 0; i < c; i++) { var ln = new LineSym(bw.ReadInt32(), bw.ReadInt32(), bw.ReadInt32()); sym.Lines.Add(ln); } c = bw.ReadInt32(); for (var i = 0; i < c; i++) { var fn = new FunSym(bw.ReadString(), bw.ReadInt32(), bw.ReadInt32()); fn.Handle = bw.ReadInt32(); fn.EndOffset = bw.ReadInt32(); sym.Functions.Add(fn); } frame.Symbols = sym; } return(frame); }