public static ConstantDeclaration Parse(BytecodeReader reader, BytecodeReader decReader)
        {
            var result     = new ConstantDeclaration();
            var nameOffset = decReader.ReadUInt32();

            result.RegisterSet   = (RegisterSet)decReader.ReadUInt16();
            result.RegisterIndex = decReader.ReadUInt16();
            result.RegisterCount = decReader.ReadUInt16();
            decReader.ReadUInt16();             //Reserved
            var typeInfoOffset     = decReader.ReadUInt32();
            var defaultValueOffset = decReader.ReadUInt32();

            var nameReader = reader.CopyAtOffset((int)nameOffset);

            result.Name = nameReader.ReadString();

            var typeReader = reader.CopyAtOffset((int)typeInfoOffset);

            result.Type = ConstantType.Parse(reader, typeReader);

            if (defaultValueOffset != 0)
            {
                //Note: thre are corrisponding def instructions. TODO: check that they are the same
                var defaultValueReader = reader.CopyAtOffset((int)defaultValueOffset);
                for (int i = 0; i < 4; i++)
                {
                    result.DefaultValue.Add(defaultValueReader.ReadSingle());
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        public static StructMember Parse(BytecodeReader reader, BytecodeReader memberReader)
        {
            var result     = new StructMember();
            var nameOffset = memberReader.ReadUInt32();
            var typeOffset = memberReader.ReadUInt32();
            var nameReader = reader.CopyAtOffset((int)nameOffset);

            result.Name = nameReader.ReadString();
            var typeReader = reader.CopyAtOffset((int)typeOffset);

            result.Type = ConstantType.Parse(reader, typeReader);
            return(result);
        }