diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2022-03-15 10:45:24 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-15 10:45:24 -0400 |
| commit | 8533dd2344d8be040a992a86f23e7cf696d59c4a (patch) | |
| tree | 9121a5a5fa98eb4f5101421341142616ac703ba8 /tools/slang-cpp-extractor/parser.h | |
| parent | 06d04ab5e63ad43d7ad9de3fbc4c8ed64b13265a (diff) | |
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.
Diffstat (limited to 'tools/slang-cpp-extractor/parser.h')
| -rw-r--r-- | tools/slang-cpp-extractor/parser.h | 17 |
1 files changed, 16 insertions, 1 deletions
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<Token>& outToks); SlangResult _maybeParseType(UnownedStringSlice& outType); + SlangResult _parseExpression(List<Token>& 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; }; |
