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); }
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); }