From fd02adceeb646c9b5023aa24eb6e3fdc404f4bd2 Mon Sep 17 00:00:00 2001 From: gavrmg Date: Wed, 30 Jan 2019 15:30:56 +0300 Subject: [PATCH 1/2] Add files via upload Runtime implementation GetDecayedType --- Source/Runtime/Impl/TypeInfo.hpp | 12 ++++++++---- Source/Runtime/ReflectionDatabase.cpp | 12 ++++++------ Source/Runtime/TypeData.h | 4 +++- Source/Runtime/TypeInfo.h | 2 +- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/Source/Runtime/Impl/TypeInfo.hpp b/Source/Runtime/Impl/TypeInfo.hpp index f8e7b5b..d3715b9 100644 --- a/Source/Runtime/Impl/TypeInfo.hpp +++ b/Source/Runtime/Impl/TypeInfo.hpp @@ -27,10 +27,11 @@ namespace ursine bool TypeInfo::Defined = false; template - void TypeInfo::Register( - TypeID id, - TypeData &data, - bool beingDefined + void TypeInfo::Register( + TypeID id, + TypeData &data, + bool beingDefined, + TypeID DecayedTypeID ) { // already defined @@ -54,6 +55,9 @@ namespace ursine applyTrivialAttributes( data ); } + //For non pointer type id is passed to DecayedTypeID + data.DecayedTypeID = DecayedTypeID; + } template diff --git a/Source/Runtime/ReflectionDatabase.cpp b/Source/Runtime/ReflectionDatabase.cpp index d053a06..da861d1 100644 --- a/Source/Runtime/ReflectionDatabase.cpp +++ b/Source/Runtime/ReflectionDatabase.cpp @@ -10,18 +10,18 @@ #include "Type.h" -#define REGISTER_NATIVE_TYPE(type) \ +#define REGISTER_NATIVE_TYPE(type, decayed_type) \ { \ auto id = AllocateType( #type ); \ auto &handle = types[ id ]; \ - \ - TypeInfo::Register( id, handle, true ); \ + auto &decayed_handle = typeidof(decayed_type); \ + TypeInfo::Register( id, handle, true, decayed_handle ); \ } \ #define REGISTER_NATIVE_TYPE_VARIANTS(type) \ - REGISTER_NATIVE_TYPE( type ) \ - REGISTER_NATIVE_TYPE( type* ) \ - REGISTER_NATIVE_TYPE( const type* ) \ + REGISTER_NATIVE_TYPE( type, type ) \ + REGISTER_NATIVE_TYPE( type*, type ) \ + REGISTER_NATIVE_TYPE( const type*, type ) \ #define REGISTER_NATIVE_TYPE_VARIANTS_W_ARRAY(type) \ REGISTER_NATIVE_TYPE_VARIANTS( type ) \ diff --git a/Source/Runtime/TypeData.h b/Source/Runtime/TypeData.h index 7db5c7f..be6cf5f 100644 --- a/Source/Runtime/TypeData.h +++ b/Source/Runtime/TypeData.h @@ -42,7 +42,9 @@ namespace ursine // enum type Enum enumeration; - + + //DecayedTypeID + TypeID DecayedTypeID; // class type Type::Set baseClasses; diff --git a/Source/Runtime/TypeInfo.h b/Source/Runtime/TypeInfo.h index dcdf097..b5c1ddf 100644 --- a/Source/Runtime/TypeInfo.h +++ b/Source/Runtime/TypeInfo.h @@ -33,7 +33,7 @@ namespace ursine { static bool Defined; - static void Register(TypeID id, TypeData &data, bool beingDefined); + static void Register(TypeID id, TypeData &data, bool beingDefined, TypeID DecayedTypeID); private: template From 6073a9d5654dace79b7352d40f1fb4701d94e51f Mon Sep 17 00:00:00 2001 From: gavrmg Date: Wed, 30 Jan 2019 15:31:45 +0300 Subject: [PATCH 2/2] Add files via upload --- Resources/Templates/module-file-source.mustache | 13 +++++++------ Resources/Templates/module-source.mustache | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Resources/Templates/module-file-source.mustache b/Resources/Templates/module-file-source.mustache index 7945ec7..39851f3 100644 --- a/Resources/Templates/module-file-source.mustache +++ b/Resources/Templates/module-file-source.mustache @@ -21,18 +21,19 @@ void meta_generated::AllocateModuleFile{{targetName}}{{moduleFileName}}(m::Refle /////////////////////////////////////////////////////////////////////////// {{#class}} { + //ID of decayed type + auto decayed_id = db.AllocateType( "{{& displayName}}" ); { // Base Type - auto id = db.AllocateType( "{{& displayName}}" ); - auto &type = db.types[ id ]; + auto &type = db.types[ decayed_id ]; - m::TypeInfo<{{& qualifiedName}}>::Register( id, type, true ); + m::TypeInfo<{{& qualifiedName}}>::Register( decayed_id, type, true, decayed_id ); } {{#ptrTypeEnabled}} { // Pointer Type auto id = db.AllocateType( "{{& displayName}}*" ); auto &type = db.types[ id ]; - m::TypeInfo<{{& qualifiedName}}*>::Register( id, type, false ); + m::TypeInfo<{{& qualifiedName}}*>::Register( id, type, false, decayed_id ); } {{/ptrTypeEnabled}} {{#constPtrTypeEnabled}} @@ -40,7 +41,7 @@ void meta_generated::AllocateModuleFile{{targetName}}{{moduleFileName}}(m::Refle auto id = db.AllocateType( "const {{& displayName}}*" ); auto &type = db.types[ id ]; - m::TypeInfo::Register( id, type, false ); + m::TypeInfo::Register( id, type, false, decayed_id ); } {{/constPtrTypeEnabled}} } @@ -61,7 +62,7 @@ void meta_generated::AllocateModuleFile{{targetName}}{{moduleFileName}}(m::Refle auto id = db.AllocateType( "{{& displayName}}*" ); auto &type = db.types[ id ]; - m::TypeInfo<{{& qualifiedName}}*>::Register( id, type, false ); + m::TypeInfo<{{& qualifiedName}}*>::Register( id, type, true ); } {{/ptrTypeEnabled}} {{#constPtrTypeEnabled}} diff --git a/Resources/Templates/module-source.mustache b/Resources/Templates/module-source.mustache index e7228f8..8b43423 100644 --- a/Resources/Templates/module-source.mustache +++ b/Resources/Templates/module-source.mustache @@ -26,18 +26,19 @@ meta_generated::Module{{targetName}}::Module{{targetName}}(m::ReflectionDatabase /////////////////////////////////////////////////////////////////////////// {{#external}} { - { // Base Type - auto id = db.AllocateType( "{{& displayName}}" ); - auto &type = db.types[ id ]; + auto decayed_id = db.AllocateType( "{{& displayName}}" ); + + { // Base Type + auto &type = db.types[ decayed_id ]; - m::TypeInfo<{{& qualifiedName}}>::Register( id, type, true ); + m::TypeInfo<{{& qualifiedName}}>::Register( decayed_id, type, true, decayed_id ); } {{#ptrTypeEnabled}} { // Pointer Type auto id = db.AllocateType( "{{& displayName}}*" ); auto &type = db.types[ id ]; - m::TypeInfo<{{& qualifiedName}}*>::Register( id, type, false ); + m::TypeInfo<{{& qualifiedName}}*>::Register( id, type, false, decayed_id ); } {{/ptrTypeEnabled}} {{#constPtrTypeEnabled}} @@ -45,7 +46,7 @@ meta_generated::Module{{targetName}}::Module{{targetName}}(m::ReflectionDatabase auto id = db.AllocateType( "const {{& displayName}}*" ); auto &type = db.types[ id ]; - m::TypeInfo::Register( id, type, false ); + m::TypeInfo::Register( id, type, false, decayed_id ); } {{/constPtrTypeEnabled}} }