From 051b20c218124e9ffc72ae31b95529b35aa9a43c Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Fri, 23 Oct 2020 15:07:10 -0400 Subject: 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. --- source/slang/slang-ast-base.h | 2 -- source/slang/slang-ast-dump.cpp | 39 ++++++++++++-------------------------- source/slang/slang-ast-reflect.h | 3 ++- source/slang/slang.vcxproj | 10 ---------- source/slang/slang.vcxproj.filters | 30 ----------------------------- 5 files changed, 14 insertions(+), 70 deletions(-) (limited to 'source') 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(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 @@ - - - - - - - - @@ -315,8 +307,6 @@ - - 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 @@ Header Files - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - Header Files @@ -396,12 +372,6 @@ Header Files - - Header Files - - - Header Files - Header Files -- cgit v1.2.3