fix upgrading native type changes

This commit is contained in:
Till W
2025-05-25 10:34:28 +02:00
parent 18e7085aeb
commit 0c2d10d631
3 changed files with 19 additions and 7 deletions

View File

@@ -293,7 +293,7 @@ void CppFileWriter::WriteInternal(WriteBuffer& buf, const char* templateStr, va_
} }
void CppFileWriter::PrintTypeName( void CppFileWriter::PrintTypeName(
char* buf, int32_t bufSize, Def::TypeRef type, const Def::DefinitionFile& definitions, bool printActualEnumType) char* buf, int32_t bufSize, Def::TypeRef type, const Def::DefinitionFile& definitions, PrintFlags flags)
{ {
if (buf == nullptr || bufSize == 0 || !IsValid(type)) if (buf == nullptr || bufSize == 0 || !IsValid(type))
{ {
@@ -303,7 +303,8 @@ void CppFileWriter::PrintTypeName(
if (type.FieldKind == Def::EFieldType::DefinedClass) if (type.FieldKind == Def::EFieldType::DefinedClass)
{ {
auto& t = definitions.Types[type.TypeIdx]; auto& t = definitions.Types[type.TypeIdx];
if ((uint32_t)t.TypeFlags & (uint32_t)Def::ETypeFlags::IsNative) if (((uint32_t)t.TypeFlags & (uint32_t)Def::ETypeFlags::IsNative) &&
((uint32_t)flags & (uint32_t)PrintFlags::PrintNativeTypeName))
{ {
bx::strCopy(buf, bufSize, t.NativeCName); bx::strCopy(buf, bufSize, t.NativeCName);
} }
@@ -315,7 +316,7 @@ void CppFileWriter::PrintTypeName(
else if (type.FieldKind == Def::EFieldType::DefinedEnum) else if (type.FieldKind == Def::EFieldType::DefinedEnum)
{ {
bx::strCopy(buf, bufSize, definitions.Enums[type.TypeIdx].Name); bx::strCopy(buf, bufSize, definitions.Enums[type.TypeIdx].Name);
if (printActualEnumType) if ((int32_t)flags & (int32_t)PrintFlags::PrintFullEnumName)
{ {
bx::strCat(buf, bufSize, "::Enum"); bx::strCat(buf, bufSize, "::Enum");
} }
@@ -454,7 +455,10 @@ void CppFileWriter::WriteSaveLoadMethods(const Def::DefinitionFile& definitions)
for (int32_t fieldIdx = 0; fieldIdx < t.FieldCount; ++fieldIdx) for (int32_t fieldIdx = 0; fieldIdx < t.FieldCount; ++fieldIdx)
{ {
const char* fieldName = t.FieldNames[fieldIdx]; const char* fieldName = t.FieldNames[fieldIdx];
PrintTypeName(fieldTypeName, sizeof(fieldTypeName), t.FieldTypes[fieldIdx], definitions, false); // This prints native type name, seems wrong??
// Havent i already fixed this???
PrintTypeName(
fieldTypeName, sizeof(fieldTypeName), t.FieldTypes[fieldIdx], definitions, PrintFlags::None);
WriteCpp(WriteTemplates::LoadFuncBodyMemberCheck4, fieldName, fieldTypeName, typeName, fieldName); WriteCpp(WriteTemplates::LoadFuncBodyMemberCheck4, fieldName, fieldTypeName, typeName, fieldName);
} }
WriteCpp(WriteTemplates::LoadFuncBodyTypeUpgradeStart); WriteCpp(WriteTemplates::LoadFuncBodyTypeUpgradeStart);

View File

@@ -10,6 +10,13 @@ struct WriteBuffer
uint64_t WrittenBytes = 0; uint64_t WrittenBytes = 0;
}; };
enum class PrintFlags : uint32_t
{
None = 0,
PrintFullEnumName = 1 << 0,
PrintNativeTypeName = 1 << 1,
};
struct CppFileWriter struct CppFileWriter
{ {
private: private:
@@ -25,7 +32,8 @@ struct CppFileWriter
int32_t bufSize, int32_t bufSize,
Def::TypeRef type, Def::TypeRef type,
const Def::DefinitionFile& definitions, const Def::DefinitionFile& definitions,
bool printActualEnumType = true); PrintFlags flags = (PrintFlags)((uint32_t)PrintFlags::PrintFullEnumName |
(uint32_t)PrintFlags::PrintNativeTypeName));
void WriteEnums(const Def::DefinitionFile& definitions); void WriteEnums(const Def::DefinitionFile& definitions);
void WriteTypes(const Def::DefinitionFile& definitions); void WriteTypes(const Def::DefinitionFile& definitions);
void WriteSaveLoadMethods(const Def::DefinitionFile& definitions); void WriteSaveLoadMethods(const Def::DefinitionFile& definitions);

Binary file not shown.