diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-10-23 15:07:10 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-23 15:07:10 -0400 |
| commit | 051b20c218124e9ffc72ae31b95529b35aa9a43c (patch) | |
| tree | ea73a5ad64d29e6fb01ad4b8f7e34d4444f9b24e /source | |
| parent | 6d1fe29cdcbca18d559e302d6427a504d1762173 (diff) | |
C++ extractor fix for access modifiers (#1586)
* #include an absolute path didn't work - because paths were taken to always be relative.
* Fix handling of access modifiers inside type definition.
* Fix access problem for AST node.
Make dumping produce a single function with switch, to potentially make available without Dump specific access.
* Remove project references to previously generated files.
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-ast-base.h | 2 | ||||
| -rw-r--r-- | source/slang/slang-ast-dump.cpp | 39 | ||||
| -rw-r--r-- | source/slang/slang-ast-reflect.h | 3 | ||||
| -rw-r--r-- | source/slang/slang.vcxproj | 10 | ||||
| -rw-r--r-- | source/slang/slang.vcxproj.filters | 30 |
5 files changed, 14 insertions, 70 deletions
diff --git a/source/slang/slang-ast-base.h b/source/slang/slang-ast-base.h index 931f0d5bd..0d69b8633 100644 --- a/source/slang/slang-ast-base.h +++ b/source/slang/slang-ast-base.h @@ -134,8 +134,6 @@ class Type: public Val { SLANG_ABSTRACT_AST_CLASS(Type) - friend struct ASTDumpAccess; - typedef ITypeVisitor Visitor; void accept(ITypeVisitor* visitor, void* extra); diff --git a/source/slang/slang-ast-dump.cpp b/source/slang/slang-ast-dump.cpp index 552c97d7f..38dfa9c2f 100644 --- a/source/slang/slang-ast-dump.cpp +++ b/source/slang/slang-ast-dump.cpp @@ -616,37 +616,26 @@ struct ASTDumpContext struct ASTDumpAccess { -#define SLANG_AST_DUMP_FIELD(FIELD_NAME, TYPE, param) context.dumpField(#FIELD_NAME, node->FIELD_NAME); + +#define SLANG_AST_DUMP_FIELD(FIELD_NAME, TYPE, param) context.dumpField(#FIELD_NAME, static_cast<param*>(base)->FIELD_NAME); #define SLANG_AST_DUMP_FIELDS_IMPL(NAME, SUPER, ORIGIN, LAST, MARKER, TYPE, param) \ -static void dumpFields_##NAME(NAME* node, ASTDumpContext& context) \ +case ASTNodeType::NAME: \ { \ - SLANG_UNUSED(node); \ - SLANG_UNUSED(context); \ - SLANG_FIELDS_ASTNode_##NAME(SLANG_AST_DUMP_FIELD, _) \ + SLANG_FIELDS_ASTNode_##NAME(SLANG_AST_DUMP_FIELD, NAME) \ + break; \ } -SLANG_ALL_ASTNode_NodeBase(SLANG_AST_DUMP_FIELDS_IMPL, _) - -}; - -#define SLANG_AST_GET_DUMP_FUNC(NAME, SUPER, ORIGIN, LAST, MARKER, TYPE, param) m_funcs[Index(ASTNodeType::NAME)] = (DumpFieldsFunc)&ASTDumpAccess::dumpFields_##NAME; - -typedef void (*DumpFieldsFunc)(NodeBase* obj, ASTDumpContext& context); - -struct DumpFieldFuncs -{ - DumpFieldFuncs() + static void dump(ASTNodeType type, NodeBase* base, ASTDumpContext& context) { - memset(m_funcs, 0, sizeof(m_funcs)); - SLANG_ALL_ASTNode_NodeBase(SLANG_AST_GET_DUMP_FUNC, _) + switch (type) + { + SLANG_ALL_ASTNode_NodeBase(SLANG_AST_DUMP_FIELDS_IMPL, _) + default: break; + } } - - DumpFieldsFunc m_funcs[Index(ASTNodeType::CountOf)]; }; -static const DumpFieldFuncs s_funcs; - void ASTDumpContext::dumpObjectReference(const ReflectClassInfo& type, NodeBase* obj, Index objIndex) { SLANG_UNUSED(obj); @@ -678,11 +667,7 @@ void ASTDumpContext::dumpObjectFull(const ReflectClassInfo& type, NodeBase* obj, for (Index i = allTypes.getCount() - 1; i >= 0; --i) { const ReflectClassInfo* curType = allTypes[i]; - DumpFieldsFunc func = s_funcs.m_funcs[Index(curType->m_classId)]; - if (func) - { - func(obj, *this); - } + ASTDumpAccess::dump(ASTNodeType(curType->m_classId), obj, *this); } m_writer->dedent(); diff --git a/source/slang/slang-ast-reflect.h b/source/slang/slang-ast-reflect.h index 457e88d0d..61711b940 100644 --- a/source/slang/slang-ast-reflect.h +++ b/source/slang/slang-ast-reflect.h @@ -19,7 +19,8 @@ SLANG_CLASS_REFLECT_SUPER_##TYPE(SUPER) \ friend class ASTBuilder; \ friend struct ASTConstructAccess; \ - friend struct ASTFieldAccess; + friend struct ASTFieldAccess; \ + friend struct ASTDumpAccess; // Macro definitions - use the SLANG_ASTNode_ definitions to invoke the IMPL to produce the code // injected into AST classes diff --git a/source/slang/slang.vcxproj b/source/slang/slang.vcxproj index a09282a4a..2490b9caa 100644 --- a/source/slang/slang.vcxproj +++ b/source/slang/slang.vcxproj @@ -286,14 +286,6 @@ <ClInclude Include="slang-preprocessor.h" /> <ClInclude Include="slang-profile-defs.h" /> <ClInclude Include="slang-profile.h" /> - <ClInclude Include="slang-ref-object-generated-ast-macro.h" /> - <ClInclude Include="slang-ref-object-generated-ast.h" /> - <ClInclude Include="slang-ref-object-generated-macro.h" /> - <ClInclude Include="slang-ref-object-generated-obj-macro.h" /> - <ClInclude Include="slang-ref-object-generated-obj.h" /> - <ClInclude Include="slang-ref-object-generated-value-macro.h" /> - <ClInclude Include="slang-ref-object-generated-value.h" /> - <ClInclude Include="slang-ref-object-generated.h" /> <ClInclude Include="slang-ref-object-reflect.h" /> <ClInclude Include="slang-reflection.h" /> <ClInclude Include="slang-repro.h" /> @@ -315,8 +307,6 @@ <ClInclude Include="slang-token.h" /> <ClInclude Include="slang-type-layout.h" /> <ClInclude Include="slang-type-system-shared.h" /> - <ClInclude Include="slang-value-generated-macro.h" /> - <ClInclude Include="slang-value-generated.h" /> <ClInclude Include="slang-value-reflect.h" /> <ClInclude Include="slang-visitor.h" /> </ItemGroup> diff --git a/source/slang/slang.vcxproj.filters b/source/slang/slang.vcxproj.filters index ab0e52ddb..9abc2b21d 100644 --- a/source/slang/slang.vcxproj.filters +++ b/source/slang/slang.vcxproj.filters @@ -309,30 +309,6 @@ <ClInclude Include="slang-profile.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="slang-ref-object-generated-ast-macro.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="slang-ref-object-generated-ast.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="slang-ref-object-generated-macro.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="slang-ref-object-generated-obj-macro.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="slang-ref-object-generated-obj.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="slang-ref-object-generated-value-macro.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="slang-ref-object-generated-value.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="slang-ref-object-generated.h"> - <Filter>Header Files</Filter> - </ClInclude> <ClInclude Include="slang-ref-object-reflect.h"> <Filter>Header Files</Filter> </ClInclude> @@ -396,12 +372,6 @@ <ClInclude Include="slang-type-system-shared.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="slang-value-generated-macro.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="slang-value-generated.h"> - <Filter>Header Files</Filter> - </ClInclude> <ClInclude Include="slang-value-reflect.h"> <Filter>Header Files</Filter> </ClInclude> |
