summaryrefslogtreecommitdiffstats
path: root/tools/slang-cpp-extractor/parser.h
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2022-03-15 10:45:24 -0400
committerGitHub <noreply@github.com>2022-03-15 10:45:24 -0400
commit8533dd2344d8be040a992a86f23e7cf696d59c4a (patch)
tree9121a5a5fa98eb4f5101421341142616ac703ba8 /tools/slang-cpp-extractor/parser.h
parent06d04ab5e63ad43d7ad9de3fbc4c8ed64b13265a (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.h17
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;
};