Remove/Rename Some Stuff

This commit is contained in:
TheBrokenRail 2024-11-08 02:28:05 -05:00
parent f72c4f0567
commit 308a36b4ba
3 changed files with 6 additions and 50 deletions

View File

@ -137,26 +137,6 @@ typedef unsigned char uchar;
typedef unsigned short ushort; typedef unsigned short ushort;
typedef unsigned int uint; typedef unsigned int uint;
// Duplicate VTable
#define RTTI_SIZE 4
template <typename T>
T *dup_vtable(T *vtable) {
// Check
static_assert(std::is_constructible_v<T>, "Unable To Construct VTable");
// Get Size
const uchar *real_vtable = (uchar *) vtable;
real_vtable -= RTTI_SIZE;
const size_t real_vtable_size = sizeof(T) + RTTI_SIZE;
// Allocate
uchar *new_vtable = (uchar *) ::operator new(real_vtable_size);
// Copy
memcpy(new_vtable, real_vtable, real_vtable_size);
// Return
new_vtable += RTTI_SIZE;
return (T *) new_vtable;
}
#undef RTTI_SIZE
// Internal Macros // Internal Macros
#define __PREVENT_DESTRUCTION(self) \ #define __PREVENT_DESTRUCTION(self) \
~self() = delete ~self() = delete
@ -167,28 +147,6 @@ T *dup_vtable(T *vtable) {
self(const self &) = delete; \ self(const self &) = delete; \
self &operator=(const self &) = delete self &operator=(const self &) = delete
// Easily Extend Structures
template<typename T, typename = void>
struct __HasAllocate : std::false_type {};
template<typename T>
struct __HasAllocate<T, std::enable_if_t<std::is_same_v<T *, decltype(T::allocate())>>> : std::true_type {};
template <typename Super, typename Self>
class __ExtendedStruct final {
static_assert(__HasAllocate<Super>::value, "Super Type Does Not Have A Defined Size");
__PREVENT_DESTRUCTION(__ExtendedStruct);
__PREVENT_COPY(__ExtendedStruct);
alignas(Super) uchar _super[sizeof(Super)];
public:
__ExtendedStruct() {}
Super *super() {
return (Super *) &_super[0];
}
Self data;
};
#define EXTEND_STRUCT(name, base, ...) \
typedef __VA_ARGS__ __##name##_data; \
typedef __ExtendedStruct<base, __##name##_data> name
// Forward Declarations // Forward Declarations
{{ forwardDeclarations }} {{ forwardDeclarations }}

View File

@ -47,7 +47,7 @@ export class Method {
// Overwrite Helper // Overwrite Helper
#getVirtualCall(self: string = this.self) { #getVirtualCall(self: string = this.self) {
return `${self}_vtable_base->${this.shortName}`; return `${self}_vtable::base->${this.shortName}`;
} }
generate(code: boolean, isVirtual: boolean, parentSelf?: string) { generate(code: boolean, isVirtual: boolean, parentSelf?: string) {
let out = ''; let out = '';

View File

@ -146,6 +146,10 @@ export class VTable {
// Prevent Construction // Prevent Construction
out += preventConstruction(this.#getName()); out += preventConstruction(this.#getName());
} }
if (this.#address !== null) {
// Base
out += `${INDENT}static ${this.#getName()} *base;\n`;
}
out += `};\n`; out += `};\n`;
// Sanity Check Size // Sanity Check Size
@ -153,12 +157,6 @@ export class VTable {
out += assertSize(this.#getName(), this.#size); out += assertSize(this.#getName(), this.#size);
} }
// Pointers
if (this.#address !== null) {
// Base
out += `extern ${this.#getName()} *${this.#getName()}_base;\n`;
}
// Return // Return
return out; return out;
} }
@ -173,7 +171,7 @@ export class VTable {
// Pointers // Pointers
if (this.#address !== null) { if (this.#address !== null) {
// Base // Base
out += `${this.#getName()} *${this.#getName()}_base = (${this.#getName()} *) ${toHex(this.#address)};\n`; out += `${this.#getName()} *${this.#getName()}::base = (${this.#getName()} *) ${toHex(this.#address)};\n`;
} }
// Method Wrappers // Method Wrappers