tree-sitter/src/compiler/build_tables/get_metadata.cc

31 lines
1 KiB
C++
Raw Normal View History

2014-04-14 08:38:11 -07:00
#include "compiler/build_tables/get_metadata.h"
#include "compiler/rules/visitor.h"
#include "compiler/rules/seq.h"
namespace tree_sitter {
namespace build_tables {
int get_metadata(const rules::rule_ptr &rule, rules::MetadataKey key) {
class GetMetadata : public rules::RuleFn<int> {
rules::MetadataKey metadata_key;
int apply_to(const rules::Metadata *rule) {
int result = rule->value_for(metadata_key);
return (result != 0) ? result : apply(rule->rule);
}
2014-04-04 13:10:55 -07:00
// TODO -
// Remove this. It is currently needed to make the rule generated
// by `LexTableBuilder::after_separators` have the right precedence.
int apply_to(const rules::Seq *rule) {
return apply(rule->left);
}
public:
2014-04-28 21:46:43 -07:00
explicit GetMetadata(rules::MetadataKey key) : metadata_key(key) {}
};
2014-04-04 13:10:55 -07:00
return GetMetadata(key).apply(rule);
}
}
2014-04-28 21:46:43 -07:00
}