start making it so structs include their generic info in them

This commit is contained in:
2026-07-01 21:40:50 +10:00
parent 5e8c300111
commit e9e71759cf
4 changed files with 20 additions and 0 deletions

View File

@@ -79,6 +79,8 @@ typedef struct {
uint32_t numFields;
uint32_t numMethods;
uint32_t* vtable;
CometType* genericTypes;
uint32_t numGenericTypes;
} CometSerializedStruct;
typedef struct {

View File

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

View File

@@ -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++) {

View File

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