public VeinField(VeinClass owner, FieldName fullName, FieldFlags flags, VeinClass fieldType) { this.Owner = owner; this.FullName = fullName; this.Flags = flags; this.FieldType = fieldType; }
internal MethodBuilder(ClassBuilder clazz, string name, VeinClass returnType, params VeinArgumentRef[] args) : base(name, 0, returnType, clazz, args) { classBuilder = clazz; _generator = new ILGenerator(this); clazz.moduleBuilder.InternString(Name); }
public VeinProperty(VeinClass owner, FieldName fullName, FieldFlags flags, VeinClass propType) { this.Owner = owner; this.FullName = fullName; this.Flags = flags; this.PropType = propType; }
public static unsafe RuntimeIshtarMethod DecodeMethod(byte[] arr, VeinClass @class, RuntimeIshtarModule ishtarModule) { using var mem = new MemoryStream(arr); using var binary = new BinaryReader(mem); var idx = binary.ReadInt32(); var flags = (MethodFlags)binary.ReadInt16(); var bodysize = binary.ReadInt32(); var stacksize = binary.ReadByte(); var locals = binary.ReadByte(); var retType = binary.ReadTypeName(ishtarModule); var args = ReadArguments(binary, ishtarModule); var body = binary.ReadBytes(bodysize); var mth = new RuntimeIshtarMethod(ishtarModule.GetConstStringByIndex(idx), flags, ishtarModule.FindType(retType, true, false), @class, args.ToArray()); if (mth.IsExtern) { return(mth); } ConstructIL(mth, body, stacksize, ishtarModule); return(mth); }
internal RuntimeIshtarField DefineField(string name, FieldFlags flags, VeinClass type) { var f = new RuntimeIshtarField(this, new FieldName(name, Name), flags, type); this.Fields.Add(f); return(f); }
internal RuntimeIshtarClass(QualityTypeName name, VeinClass parent, RuntimeIshtarModule module) : base(name, parent, module) { if (module is null) { return; } ID = module.Vault.TokenGranted.GrantClassID(); runtime_token = new RuntimeToken(module.ID, ID); }
public static void DecodeField(BinaryReader binary, VeinClass @class, ModuleReader module) { foreach (var _ in..binary.ReadInt32()) { var name = FieldName.Resolve(binary.ReadInt32(), module); var type_name = binary.ReadTypeName(module); var type = module.FindType(type_name, true, false); var flags = (FieldFlags)binary.ReadInt16(); var method = new VeinField(@class, name, flags, type); @class.Fields.Add(method); } }
internal RuntimeIshtarMethod DefineMethod(string name, VeinClass returnType, MethodFlags flags, params VeinArgumentRef[] args) { var method = new RuntimeIshtarMethod(name, flags, returnType, this, args); method.Arguments.AddRange(args); if (Methods.Any(x => x.Name.Equals(method.Name))) { throw new Exception(); } Methods.Add(method); return(method); }
public static VeinMethod DecodeMethod(byte[] arr, VeinClass @class, ModuleReader module) { using var mem = new MemoryStream(arr); using var binary = new BinaryReader(mem); var idx = binary.ReadInt32(); var flags = (MethodFlags)binary.ReadInt16(); var bodysize = binary.ReadInt32(); var stacksize = binary.ReadByte(); var locals = binary.ReadByte(); var retType = binary.ReadTypeName(module); var args = ReadArguments(binary, module); var _ = binary.ReadBytes(bodysize); return(new VeinMethod(module.GetConstStringByIndex(idx), flags, module.FindType(retType, true, false), @class, args.ToArray())); }
public static VeinClass DecodeClass(byte[] arr, ModuleReader module) { using var mem = new MemoryStream(arr); using var binary = new BinaryReader(mem); var className = binary.ReadTypeName(module); var flags = (ClassFlags)binary.ReadInt16(); var parentLen = binary.ReadInt16(); var parents = new List <VeinClass>(); foreach (var _ in..parentLen) { var parentIdx = binary.ReadTypeName(module); parents.Add(module.FindType(parentIdx, true, false)); } var len = binary.ReadInt32(); var @class = new VeinClass(className, parents.ToArray(), module) { Flags = flags }; foreach (var _ in..len) { var body = binary.ReadBytes(binary.ReadInt32()); var method = DecodeMethod(body, @class, module); @class.Methods.Add(method); } DecodeField(binary, @class, module); return(@class); }
public RuntimeIshtarField(VeinClass owner, FieldName fullName, FieldFlags flags, VeinClass fieldType) : base(owner, fullName, flags, fieldType) { }
public static void Indicate(VeinClass clazz) { switch (clazz.FullName.NameWithNS) { case "global::vein/lang/Aspect": clazz.TypeCode = VeinTypeCode.TYPE_CLASS; VeinCore.AspectClass = clazz; break; case "global::vein/lang/Raw": clazz.TypeCode = VeinTypeCode.TYPE_RAW; VeinCore.RawClass = clazz; break; case "global::vein/lang/Object": clazz.TypeCode = VeinTypeCode.TYPE_OBJECT; VeinCore.ObjectClass = clazz; break; case "global::vein/lang/ValueType": clazz.TypeCode = VeinTypeCode.TYPE_OBJECT; VeinCore.ValueTypeClass = clazz; break; case "global::vein/lang/Array": clazz.TypeCode = VeinTypeCode.TYPE_ARRAY; VeinCore.ArrayClass = clazz; break; case "global::vein/lang/Void": clazz.TypeCode = VeinTypeCode.TYPE_VOID; VeinCore.VoidClass = clazz; break; case "global::vein/lang/Int64": clazz.TypeCode = VeinTypeCode.TYPE_I8; VeinCore.Int64Class = clazz; break; case "global::vein/lang/Int32": clazz.TypeCode = VeinTypeCode.TYPE_I4; VeinCore.Int32Class = clazz; break; case "global::vein/lang/Int16": clazz.TypeCode = VeinTypeCode.TYPE_I2; VeinCore.Int16Class = clazz; break; case "global::vein/lang/UInt64": clazz.TypeCode = VeinTypeCode.TYPE_U8; VeinCore.UInt64Class = clazz; break; case "global::vein/lang/UInt32": clazz.TypeCode = VeinTypeCode.TYPE_U4; VeinCore.UInt32Class = clazz; break; case "global::vein/lang/UInt16": clazz.TypeCode = VeinTypeCode.TYPE_U2; VeinCore.UInt16Class = clazz; break; case "global::vein/lang/Boolean": clazz.TypeCode = VeinTypeCode.TYPE_BOOLEAN; VeinCore.BoolClass = clazz; break; case "global::vein/lang/String": clazz.TypeCode = VeinTypeCode.TYPE_STRING; VeinCore.StringClass = clazz; break; case "global::vein/lang/Char": clazz.TypeCode = VeinTypeCode.TYPE_CHAR; VeinCore.CharClass = clazz; break; case "global::vein/lang/Half": clazz.TypeCode = VeinTypeCode.TYPE_R2; VeinCore.HalfClass = clazz; break; case "global::vein/lang/Float": clazz.TypeCode = VeinTypeCode.TYPE_R4; VeinCore.FloatClass = clazz; break; case "global::vein/lang/Double": clazz.TypeCode = VeinTypeCode.TYPE_R8; VeinCore.DoubleClass = clazz; break; case "global::vein/lang/Decimal": clazz.TypeCode = VeinTypeCode.TYPE_R16; VeinCore.DecimalClass = clazz; break; case "global::vein/lang/Byte": clazz.TypeCode = VeinTypeCode.TYPE_U1; VeinCore.ByteClass = clazz; break; case "global::vein/lang/Exception": clazz.TypeCode = VeinTypeCode.TYPE_CLASS; VeinCore.ExceptionClass = clazz; break; default: throw new NotSupportedException(); } }
public static RuntimeIshtarMethod DefineEmptySystemMethod(string name, VeinClass clazz) => new RuntimeIshtarMethod(name, MethodFlags.Extern, clazz, new VeinArgumentRef("i", clazz)) { Owner = clazz };