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/parser.h | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (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 4815821c5..cf0147e8b 100644 --- a/tools/slang-cpp-extractor/parser.h +++ b/tools/slang-cpp-extractor/parser.h @@ -34,10 +34,6 @@ 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); @@ -58,26 +54,33 @@ protected: SlangResult _parseTypeDef(); SlangResult _parseEnum(); SlangResult _parseMarker(); + SlangResult _parseSpecialMacro(); - SlangResult _maybeParseType(List& outToks); - SlangResult _maybeParseType(UnownedStringSlice& outType); + SlangResult _maybeParseType(List& outToks, Token& outName); + SlangResult _maybeParseType(UnownedStringSlice& outType, Token& outName); + SlangResult _maybeParseType(Index& ioTemplateDepth, TokenReader::ParsingCursor& outCursor); SlangResult _parseExpression(List& outExprTokens); - - SlangResult _maybeParseType(Index& ioTemplateDepth); + SlangResult _maybeParseTemplateArgs(Index& ioTemplateDepth); SlangResult _maybeParseTemplateArg(Index& ioTemplateDepth); /// Parse balanced - if a sink is set will report to that sink SlangResult _parseBalanced(DiagnosticSink* sink); + bool _isCtor(); + /// Concatenate all tokens from start to the current position UnownedStringSlice _concatTokens(TokenReader::ParsingCursor start); + UnownedStringSlice _concatTokens(const Token* toks, Index toksCount); + + UnownedStringSlice _concatType(TokenReader::ParsingCursor start, TokenReader::ParsingCursor nameCursor); + + void _getTypeTokens(TokenReader::ParsingCursor start, TokenReader::ParsingCursor nameCursor, List& outToks); /// Consume what looks like a template definition SlangResult _consumeTemplate(); - - void _consumeTypeModifiers(); + SlangResult _maybeConsume(IdentifierStyle style); SlangResult _consumeToSync(); /// Consumes balanced parens. Will return an error if not matched. Assumes starts on opening ( @@ -88,6 +91,8 @@ protected: TokenList m_tokenList; TokenReader m_reader; + List m_scopeStack; + ScopeNode* m_currentScope; ///< The current scope being processed SourceOrigin* m_sourceOrigin; ///< The source origin that all tokens are in @@ -95,8 +100,6 @@ 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