private int GetNextLocal(TypeInfo type) { for (int i = 0; i < Locals.Count; i++) { if (!Locals[i].Used && Locals[i].Type.Equals(type)) { var localInfo = Locals[i]; localInfo.Used = true; Locals[i] = localInfo; _localsFrameStack.Peek().Add(i); return(i); } } int id = Locals.Count; Locals.Add(new VarInfo() { Name = "", Offset = _localOffset, Used = true, Type = type }); _localOffset += type.SizeOf(); _localsFrameStack.Peek().Add(id); return(id); }
public StructTypeInfo(string name, TypeKind kind, BinaryReader reader) : base(name, kind, reader) { int fieldCount = reader.ReadInt32(); int currentPos = 0; for (int i = 0; i < fieldCount; i++) { string fieldName = reader.ReadString(); TypeInfo fieldType = TypeInfo.Deserialize(reader); Fields.Add(new FieldInfo() { Name = fieldName, Index = i, FieldOffset = currentPos, FieldType = fieldType }); currentPos += fieldType.SizeOf(); } }
public override int SizeOf() { return(ElementType.SizeOf() * (int)ArraySize); }
public override int SizeOf() { return(InnerType.SizeOf() * (int)ElementCount); }