summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-10-23 15:07:10 -0400
committerGitHub <noreply@github.com>2020-10-23 15:07:10 -0400
commit051b20c218124e9ffc72ae31b95529b35aa9a43c (patch)
treeea73a5ad64d29e6fb01ad4b8f7e34d4444f9b24e /source
parent6d1fe29cdcbca18d559e302d6427a504d1762173 (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.h2
-rw-r--r--source/slang/slang-ast-dump.cpp39
-rw-r--r--source/slang/slang-ast-reflect.h3
-rw-r--r--source/slang/slang.vcxproj10
-rw-r--r--source/slang/slang.vcxproj.filters30
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>