refactor: support multiple variants for games in zonecode

This commit is contained in:
Jan Laupetin committed 2026-10-31 07:50:46 +01:00
1 parent c266c160a8
commit bf89ae06ae
61 files changed
+411 -288

No files matched your search

@@ -13,7 +13,7 @@ DataDefinitionType BaseTypeDefinition::GetType() const
return DataDefinitionType::BASE_TYPE;
}
unsigned BaseTypeDefinition::GetAlignment() const
unsigned BaseTypeDefinition::GetAlignment(const WordSize wordSize) const
{
return m_size;
}
@@ -23,7 +23,7 @@ bool BaseTypeDefinition::GetForceAlignment() const
return false;
}
unsigned BaseTypeDefinition::GetSize() const
unsigned BaseTypeDefinition::GetSize(const WordSize wordSize) const
{
return m_size;
}
@@ -23,9 +23,9 @@ public:
static const size_t ALL_BASE_TYPES_COUNT;
[[nodiscard]] DataDefinitionType GetType() const override;
[[nodiscard]] unsigned GetAlignment() const override;
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
[[nodiscard]] bool GetForceAlignment() const override;
[[nodiscard]] unsigned GetSize() const override;
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
const unsigned m_size;
@@ -1,5 +1,7 @@
#pragma once
#include "Domain/WordSize.h"
#include <string>
enum class DataDefinitionType
@@ -25,9 +27,9 @@ public:
DataDefinition& operator=(DataDefinition&& other) noexcept = default;
[[nodiscard]] virtual DataDefinitionType GetType() const = 0;
[[nodiscard]] virtual unsigned GetAlignment() const = 0;
[[nodiscard]] virtual unsigned GetAlignment(WordSize wordSize) const = 0;
[[nodiscard]] virtual bool GetForceAlignment() const = 0;
[[nodiscard]] virtual unsigned GetSize() const = 0;
[[nodiscard]] virtual unsigned GetSize(WordSize wordSize) const = 0;
[[nodiscard]] std::string GetFullName() const;
@@ -11,11 +11,11 @@ DefinitionWithMembers::DefinitionWithMembers(std::string _namespace, std::string
{
}
unsigned DefinitionWithMembers::GetAlignment() const
unsigned DefinitionWithMembers::GetAlignment(const WordSize wordSize) const
{
assert(m_flags & FLAG_FIELDS_CALCULATED);
return m_alignment;
return m_alignment[std::to_underlying(wordSize)];
}
bool DefinitionWithMembers::GetForceAlignment() const
@@ -23,11 +23,11 @@ bool DefinitionWithMembers::GetForceAlignment() const
return m_flags & FLAG_ALIGNMENT_FORCED;
}
unsigned DefinitionWithMembers::GetSize() const
unsigned DefinitionWithMembers::GetSize(const WordSize wordSize) const
{
assert(m_flags & FLAG_FIELDS_CALCULATED);
return m_size;
return m_size[std::to_underlying(wordSize)];
}
bool DefinitionWithMembers::IsAnonymous() const
@@ -16,14 +16,14 @@ public:
DefinitionWithMembers(std::string _namespace, std::string name, unsigned pack);
[[nodiscard]] unsigned GetAlignment() const override;
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
[[nodiscard]] bool GetForceAlignment() const override;
[[nodiscard]] unsigned GetSize() const override;
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
[[nodiscard]] bool IsAnonymous() const;
unsigned m_flags;
unsigned m_size;
unsigned m_alignment;
unsigned m_size[WORD_SIZE_COUNT];
unsigned m_alignment[WORD_SIZE_COUNT];
unsigned m_pack;
std::vector<std::shared_ptr<Variable>> m_members;
@@ -14,9 +14,9 @@ DataDefinitionType EnumDefinition::GetType() const
return DataDefinitionType::ENUM;
}
unsigned EnumDefinition::GetAlignment() const
unsigned EnumDefinition::GetAlignment(const WordSize wordSize) const
{
return m_parent_type->GetAlignment();
return m_parent_type->GetAlignment(wordSize);
}
bool EnumDefinition::GetForceAlignment() const
@@ -24,9 +24,9 @@ bool EnumDefinition::GetForceAlignment() const
return m_parent_type->GetForceAlignment();
}
unsigned EnumDefinition::GetSize() const
unsigned EnumDefinition::GetSize(const WordSize wordSize) const
{
return m_parent_type->GetSize();
return m_parent_type->GetSize(wordSize);
}
void EnumDefinition::AddEnumMember(EnumMember enumMember)
@@ -13,9 +13,9 @@ public:
EnumDefinition(std::string _namespace, std::string name, const BaseTypeDefinition* parentType);
[[nodiscard]] DataDefinitionType GetType() const override;
[[nodiscard]] unsigned GetAlignment() const override;
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
[[nodiscard]] bool GetForceAlignment() const override;
[[nodiscard]] unsigned GetSize() const override;
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
void AddEnumMember(EnumMember enumMember);
@@ -12,7 +12,7 @@ DataDefinitionType ForwardDeclaration::GetType() const
return DataDefinitionType::FORWARD_DECLARATION;
}
unsigned ForwardDeclaration::GetAlignment() const
unsigned ForwardDeclaration::GetAlignment(const WordSize wordSize) const
{
return 0;
}
@@ -22,7 +22,7 @@ bool ForwardDeclaration::GetForceAlignment() const
return false;
}
unsigned ForwardDeclaration::GetSize() const
unsigned ForwardDeclaration::GetSize(const WordSize wordSize) const
{
return 0;
}
@@ -8,9 +8,9 @@ public:
ForwardDeclaration(std::string _namespace, std::string name, DataDefinitionType type);
[[nodiscard]] DataDefinitionType GetType() const override;
[[nodiscard]] unsigned GetAlignment() const override;
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
[[nodiscard]] bool GetForceAlignment() const override;
[[nodiscard]] unsigned GetSize() const override;
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
const DataDefinitionType m_forwarded_type;
const DataDefinition* m_definition;
@@ -10,22 +10,22 @@ TypeDeclaration::TypeDeclaration(const DataDefinition* type)
m_type(type),
m_custom_bit_size(0),
m_flags(0),
m_size(0),
m_alignment(0)
m_size{},
m_alignment{}
{
assert(m_type != nullptr);
}
unsigned TypeDeclaration::GetSize() const
unsigned TypeDeclaration::GetSize(const WordSize wordSize) const
{
assert(m_flags & FLAG_FIELDS_CALCULATED);
return m_size;
return m_size[std::to_underlying(wordSize)];
}
unsigned TypeDeclaration::GetAlignment() const
unsigned TypeDeclaration::GetAlignment(const WordSize wordSize) const
{
assert(m_flags & FLAG_FIELDS_CALCULATED);
return m_alignment;
return m_alignment[std::to_underlying(wordSize)];
}
bool TypeDeclaration::GetForceAlignment() const
@@ -2,6 +2,7 @@
#include "DataDefinition.h"
#include "DeclarationModifier.h"
#include "Domain/WordSize.h"
#include <memory>
#include <vector>
@@ -14,8 +15,8 @@ public:
explicit TypeDeclaration(const DataDefinition* type);
[[nodiscard]] unsigned GetSize() const;
[[nodiscard]] unsigned GetAlignment() const;
[[nodiscard]] unsigned GetSize(WordSize wordSize) const;
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const;
[[nodiscard]] bool GetForceAlignment() const;
std::vector<std::unique_ptr<DeclarationModifier>> m_declaration_modifiers;
@@ -27,6 +28,6 @@ public:
unsigned m_custom_bit_size;
unsigned m_flags;
unsigned m_size;
unsigned m_alignment;
unsigned m_size[WORD_SIZE_COUNT];
unsigned m_alignment[WORD_SIZE_COUNT];
};
@@ -13,13 +13,14 @@ DataDefinitionType TypedefDefinition::GetType() const
return DataDefinitionType::TYPEDEF;
}
unsigned TypedefDefinition::GetAlignment() const
unsigned TypedefDefinition::GetAlignment(WordSize wordSize) const
{
if (m_has_alignment_override)
{
return m_alignment_override;
}
return m_type_declaration->GetAlignment();
return m_type_declaration->GetAlignment(wordSize);
}
bool TypedefDefinition::GetForceAlignment() const
@@ -27,7 +28,7 @@ bool TypedefDefinition::GetForceAlignment() const
return m_has_alignment_override || m_type_declaration->GetForceAlignment();
}
unsigned TypedefDefinition::GetSize() const
unsigned TypedefDefinition::GetSize(const WordSize wordSize) const
{
return m_type_declaration->GetSize();
return m_type_declaration->GetSize(wordSize);
}
@@ -9,9 +9,9 @@ public:
TypedefDefinition(std::string _namespace, std::string name, std::unique_ptr<TypeDeclaration> typeDeclaration);
[[nodiscard]] DataDefinitionType GetType() const override;
[[nodiscard]] unsigned GetAlignment() const override;
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const override;
[[nodiscard]] bool GetForceAlignment() const override;
[[nodiscard]] unsigned GetSize() const override;
[[nodiscard]] unsigned GetSize(WordSize wordSize) const override;
bool m_has_alignment_override;
unsigned m_alignment_override;
@@ -9,12 +9,12 @@ Variable::Variable(std::string name, std::unique_ptr<TypeDeclaration> typeDeclar
{
}
unsigned Variable::GetAlignment() const
unsigned Variable::GetAlignment(const WordSize wordSize) const
{
if (m_has_alignment_override)
return m_alignment_override;
return m_type_declaration->GetAlignment();
return m_type_declaration->GetAlignment(wordSize);
}
bool Variable::GetForceAlignment() const
@@ -10,7 +10,7 @@ class Variable
public:
Variable(std::string name, std::unique_ptr<TypeDeclaration> typeDeclaration);
[[nodiscard]] unsigned GetAlignment() const;
[[nodiscard]] unsigned GetAlignment(WordSize wordSize) const;
[[nodiscard]] bool GetForceAlignment() const;
std::string m_name;