Skip to content

Commit 2ca476f

Browse files
committed
Parser: Add kind() for parse_function.
1 parent c1b376f commit 2ca476f

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

gram/create_parse_functions.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,10 @@ class NAME : public ParseFunction<N> { \\
391391
public: \\
392392
constexpr static basic::mem::TraceTag::tag_type kTag = #NAME; \\
393393
using base = ParseFunction< N>; \\
394-
constexpr static ParseFunctionKind kind = ParseFunctionKind::TYPE; \\
394+
ParseFunctionKind kind() override{\\
395+
constexpr static ParseFunctionKind kKind = ParseFunctionKind::TYPE; \\
396+
return kKind;\\
397+
}\\
395398
~NAME() = default; \\
396399
template <typename... Params> \\
397400
explicit NAME(bool opt, Params... params) : base(#NAME,opt, params...) {} \\

include/parse_function/parallel_serial_recursive_function.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ class ParallelParseFunctions : public ParseFunction<NumElements> {
4141
: base(kName, param), parse_functions_(funcs...) {}
4242
ParseFunctionOutputs operator()() override;
4343
void reset() override;
44+
ParseFunctionKind kind() override {
45+
static constexpr ParseFunctionKind kKind = ParseFunctionKind::kUnknown;
46+
return kKind;
47+
}
4448

4549
protected:
4650
std::tuple<ParseFuncs...> parse_functions_;
@@ -57,6 +61,10 @@ class SerialParseFunctions : public ParseFunction<1> {
5761
: base(kName, param), parse_functions_(funcs...) {}
5862
ParseFunctionOutputs operator()() override;
5963
void reset() override;
64+
ParseFunctionKind kind() override {
65+
static constexpr ParseFunctionKind kKind = ParseFunctionKind::kUnknown;
66+
return kKind;
67+
}
6068

6169
protected:
6270
std::tuple<ParseFuncs...> parse_functions_;
@@ -75,6 +83,10 @@ class RecursiveParseFunctions : public ParseFunction<1> {
7583
ParseFuncs&&... funcs)
7684
: base(kName, param), parse_functions_(funcs...) {}
7785
ParseFunctionOutputs operator()() override;
86+
ParseFunctionKind kind() override {
87+
static constexpr ParseFunctionKind kKind = ParseFunctionKind::kUnknown;
88+
return kKind;
89+
}
7890

7991
protected:
8092
void execute(ParseFunctionOutputs&, working_list_type& executed_mask);

include/parser.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,12 @@ class ParseFunction {
225225
using custom_func_type = std::function<output_type(type*)>;
226226
using bitset_type = basic::Bitset<NumElements>;
227227
static constexpr size_t kNumberOfElements = NumElements;
228-
const ParseFunctionKind kKind = ParseFunctionKind::kExpectedToken;
228+
229+
virtual ParseFunctionKind kind() {
230+
static constexpr ParseFunctionKind kKind =
231+
ParseFunctionKind::kExpectedToken;
232+
return kKind;
233+
}
229234

230235
template <typename... Params>
231236
explicit ParseFunction(const char* kName, Params... params)

0 commit comments

Comments
 (0)