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);
        }
Exemple #2
0
        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);
 }
Exemple #4
0
 public override int SizeOf()
 {
     return(InnerType.SizeOf() * (int)ElementCount);
 }