start making it so structs include their generic info in them
This commit is contained in:
@@ -79,6 +79,8 @@ typedef struct {
|
||||
uint32_t numFields;
|
||||
uint32_t numMethods;
|
||||
uint32_t* vtable;
|
||||
CometType* genericTypes;
|
||||
uint32_t numGenericTypes;
|
||||
} CometSerializedStruct;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -43,6 +43,12 @@ CometSerializedStruct* serializeStruct(CometFunction** compilerFuncs, CometStruc
|
||||
serialized->vtable[i] = method->symbolIdx;
|
||||
}
|
||||
|
||||
printf("%s - %p\n", structType->name, structType->givenGenericTypes);
|
||||
serialized->numGenericTypes = structType->numGivenGenericTypes;
|
||||
if (structType->numGenericTypes > 0) {
|
||||
serialized->genericTypes = structType->givenGenericTypes;
|
||||
}
|
||||
|
||||
return serialized;
|
||||
|
||||
}
|
||||
|
||||
@@ -3981,6 +3981,10 @@ ResultType(voidPtr, ErrorMessage) outputToFile(CometCompiler* c, const char* fil
|
||||
fwrite(&serializedStruct->numFields, 1, sizeof(uint32_t), file);
|
||||
fwrite(&serializedStruct->numMethods, 1, sizeof(uint32_t), file);
|
||||
fwrite(serializedStruct->vtable, sizeof(uint32_t), serializedStruct->numMethods, file);
|
||||
fwrite(&serializedStruct->numGenericTypes, sizeof(uint32_t), 1, file);
|
||||
|
||||
if (structType->numGenericTypes > 0)
|
||||
fwrite(serializedStruct->genericTypes, sizeof(CometType), serializedStruct->numGenericTypes, file);
|
||||
}
|
||||
|
||||
for (size_t libIdx = 0; libIdx < c->libs.count; libIdx++) {
|
||||
|
||||
@@ -809,6 +809,14 @@ ResultType(vmPtr, charptr) newCometVM(char* filePath) {
|
||||
cursor,
|
||||
sizeof(uint32_t) * numMethods);
|
||||
|
||||
uint32_t numGenericTypes = 0;
|
||||
memcpy(&numGenericTypes, cursor, sizeof(uint32_t));
|
||||
newVM->structs[i].numGenericTypes = numGenericTypes;
|
||||
cursor += sizeof(uint32_t);
|
||||
|
||||
memcpy(newVM->structs[i].genericTypes, cursor, sizeof(CometType) * numGenericTypes);
|
||||
cursor += sizeof(CometType) * numGenericTypes;
|
||||
|
||||
cursor += sizeof(uint32_t) * numMethods;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user