From e1a331a2e2945f2b90c00d0af4d1ba5f67dbd256 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Thu, 24 Mar 2022 11:12:19 -0400 Subject: C++ extractor parsing slang.h (#2162) * #include an absolute path didn't work - because paths were taken to always be relative. * Split doc extractor such that can be used in C++ extractor. * Compiles. Update the stdlib docs. * Fix issue on release builds. * Add support for extracting documentation to C++ extractor. * Dump out markup. Make enum value backing type take tokens. * Node::Type -> Node::Kind * More improvements around Node::Type -> Node::Kind * Support for parsing callable types. * Fix issue params for callable, and default value for variable. * Add support for static. * Improve handling parsing of contained types. * Small improvements around template consumption. * Improve dumping with markup/static. * Small improvements around reflection. * Add more flexible handling of markers. Allow reflection without markers. * Handling external "C" unsigned/signed --- tools/slang-cpp-extractor/unit-test.cpp | 35 +++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'tools/slang-cpp-extractor/unit-test.cpp') diff --git a/tools/slang-cpp-extractor/unit-test.cpp b/tools/slang-cpp-extractor/unit-test.cpp index c239a2a2c..16b4c10dc 100644 --- a/tools/slang-cpp-extractor/unit-test.cpp +++ b/tools/slang-cpp-extractor/unit-test.cpp @@ -29,6 +29,9 @@ struct TestState m_sink.init(&m_sourceManager, Lexer::sourceLocationLexer); m_namePool.setRootNamePool(&m_rootNamePool); + + // We don't require marker + m_options.m_requireMark = false; } RootNamePool m_rootNamePool; @@ -41,9 +44,6 @@ struct TestState }; static const char someSource[] = -"#define SLANG_REFLECTED\n" -"\n" -"SLANG_REFLECTED\n" "class ISomeInterface\n" "{\n" " public:\n" @@ -51,15 +51,30 @@ static const char someSource[] = " virtual float SLANG_MCALL anotherMethod(float a) = 0;\n" "};\n" "\n" +"struct SomeStruct\n" +"{\n" +" SomeStruct() = default;\n" +" SomeStruct(float v = 0.0f):b(v) {}\n" +" ~SomeStruct() {}\n" +" int a = 10; \n" +" float b; \n" +" int another[10];\n" +" const char* yetAnother = nullptr;\n" +"};\n" +"\n" "enum SomeEnum\n" "{\n" " Value,\n" " Another = 10,\n" "};\n" +"\n" +"typedef int (*SomeFunc)(int a);\n" +"\n" "typedef SomeEnum AliasEnum;\n" "void someFunc(int a, float b) { }\n" "namespace Blah {\n" "int add(int a, int b) { return a + b; }\n" +"unsigned add(unsigned a, unsigned b) { return a + b; }\n" "}\n"; @@ -79,16 +94,24 @@ static const char someSource[] = SourceOrigin* sourceOrigin = tree.addSourceOrigin(sourceFile, state.m_options); Parser parser(&tree, &state.m_sink); - // We don't require markers to reflect - parser.setRequireMarker(false); + { const Node::Kind enableKinds[] = { Node::Kind::Enum, Node::Kind::EnumClass, Node::Kind::EnumCase, Node::Kind::TypeDef }; parser.setKindsEnabled(enableKinds, SLANG_COUNT_OF(enableKinds)); } - SLANG_RETURN_ON_FAIL(parser.parse(sourceOrigin, &state.m_options)); + SlangResult res = parser.parse(sourceOrigin, &state.m_options); + + if (state.m_sink.outputBuffer.getLength()) + { + printf("%s\n", state.m_sink.outputBuffer.getBuffer()); + } + if (SLANG_FAILED(res)) + { + return res; + } { StringBuilder buf; -- cgit v1.2.3