From 8533dd2344d8be040a992a86f23e7cf696d59c4a Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Tue, 15 Mar 2022 10:45:24 -0400 Subject: C++ extractor callable support (#2159) * #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. --- tools/slang-cpp-extractor/parser.h | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'tools/slang-cpp-extractor/parser.h') diff --git a/tools/slang-cpp-extractor/parser.h b/tools/slang-cpp-extractor/parser.h index 5ed862d65..4815821c5 100644 --- a/tools/slang-cpp-extractor/parser.h +++ b/tools/slang-cpp-extractor/parser.h @@ -33,6 +33,11 @@ public: void setKindEnabled(Node::Kind kind, bool isEnabled = true); bool isTypeEnabled(Node::Kind kind) { return (m_nodeTypeEnabled & (NodeTypeBitType(1) << int(kind))) != 0; } + + /// If set classes require a 'marker' to be reflected + void setRequireMarker(bool requireMarker) { m_requireMarker = requireMarker; } + bool getRequireMarker() const { return m_requireMarker; } + void setKindsEnabled(const Node::Kind* kinds, Index kindsCount, bool isEnabled = true); Parser(NodeTree* nodeTree, DiagnosticSink* sink); @@ -48,14 +53,17 @@ protected: SlangResult _parseTypeSet(); SlangResult _maybeParseNode(Node::Kind kind); - SlangResult _maybeParseField(); + SlangResult _maybeParseContained(Node** outNode); SlangResult _parseTypeDef(); SlangResult _parseEnum(); + SlangResult _parseMarker(); SlangResult _maybeParseType(List& outToks); SlangResult _maybeParseType(UnownedStringSlice& outType); + SlangResult _parseExpression(List& outExprTokens); + SlangResult _maybeParseType(Index& ioTemplateDepth); SlangResult _maybeParseTemplateArgs(Index& ioTemplateDepth); SlangResult _maybeParseTemplateArg(Index& ioTemplateDepth); @@ -66,9 +74,14 @@ protected: /// Concatenate all tokens from start to the current position UnownedStringSlice _concatTokens(TokenReader::ParsingCursor start); + /// Consume what looks like a template definition + SlangResult _consumeTemplate(); + void _consumeTypeModifiers(); SlangResult _consumeToSync(); + /// Consumes balanced parens. Will return an error if not matched. Assumes starts on opening ( + SlangResult _consumeBalancedParens(); NodeTypeBitType m_nodeTypeEnabled; @@ -82,6 +95,8 @@ protected: NodeTree* m_nodeTree; ///< Shared state between parses. Nodes will be added to this + bool m_requireMarker = true; + const Options* m_options; }; -- cgit v1.2.3