2014-04-03 19:10:09 -07:00
|
|
|
#include "compiler/rules/metadata.h"
|
2016-11-19 13:53:16 -08:00
|
|
|
#include <climits>
|
2017-07-13 17:17:22 -07:00
|
|
|
#include <string>
|
2017-03-17 12:52:01 -07:00
|
|
|
#include "compiler/rule.h"
|
2014-04-03 19:10:09 -07:00
|
|
|
|
2014-07-20 21:43:27 -07:00
|
|
|
namespace tree_sitter {
|
|
|
|
|
namespace rules {
|
|
|
|
|
|
2017-07-13 17:17:22 -07:00
|
|
|
using std::move;
|
|
|
|
|
using std::string;
|
|
|
|
|
|
2017-03-17 12:52:01 -07:00
|
|
|
Metadata::Metadata(const Rule &rule, MetadataParams params) :
|
|
|
|
|
rule(std::make_shared<Rule>(rule)), params(params) {}
|
2014-07-20 21:43:27 -07:00
|
|
|
|
2017-03-17 12:52:01 -07:00
|
|
|
bool Metadata::operator==(const Metadata &other) const {
|
|
|
|
|
return rule->operator==(*other.rule) && params == other.params;
|
2016-11-19 13:53:16 -08:00
|
|
|
}
|
|
|
|
|
|
2017-03-17 12:52:01 -07:00
|
|
|
Metadata Metadata::token(const Rule &rule) {
|
2016-11-19 13:53:16 -08:00
|
|
|
MetadataParams params;
|
2017-03-17 12:52:01 -07:00
|
|
|
params.is_token = true;
|
|
|
|
|
return Metadata{rule, params};
|
2016-11-19 13:53:16 -08:00
|
|
|
}
|
|
|
|
|
|
2017-03-17 12:52:01 -07:00
|
|
|
Metadata Metadata::active_prec(int precedence, const Rule &rule) {
|
2016-11-19 13:53:16 -08:00
|
|
|
MetadataParams params;
|
|
|
|
|
params.has_precedence = true;
|
2017-03-17 12:52:01 -07:00
|
|
|
params.precedence = precedence;
|
2016-11-19 13:53:16 -08:00
|
|
|
params.is_active = true;
|
2017-03-17 12:52:01 -07:00
|
|
|
return Metadata{rule, params};
|
2015-10-12 15:26:50 -07:00
|
|
|
}
|
|
|
|
|
|
2017-03-17 12:52:01 -07:00
|
|
|
Metadata Metadata::prec(int precedence, const Rule &rule) {
|
|
|
|
|
MetadataParams params;
|
|
|
|
|
params.has_precedence = true;
|
|
|
|
|
params.precedence = precedence;
|
|
|
|
|
return Metadata{rule, params};
|
2014-07-20 21:43:27 -07:00
|
|
|
}
|
|
|
|
|
|
2017-03-17 12:52:01 -07:00
|
|
|
Metadata Metadata::prec_left(int precedence, const Rule &rule) {
|
|
|
|
|
MetadataParams params;
|
|
|
|
|
params.has_precedence = true;
|
|
|
|
|
params.precedence = precedence;
|
|
|
|
|
params.has_associativity = true;
|
|
|
|
|
params.associativity = AssociativityLeft;
|
|
|
|
|
return Metadata{rule, params};
|
2014-07-20 21:43:27 -07:00
|
|
|
}
|
|
|
|
|
|
2017-03-17 12:52:01 -07:00
|
|
|
Metadata Metadata::prec_right(int precedence, const Rule &rule) {
|
|
|
|
|
MetadataParams params;
|
|
|
|
|
params.has_precedence = true;
|
|
|
|
|
params.precedence = precedence;
|
|
|
|
|
params.has_associativity = true;
|
|
|
|
|
params.associativity = AssociativityRight;
|
|
|
|
|
return Metadata{rule, params};
|
2014-07-20 21:43:27 -07:00
|
|
|
}
|
|
|
|
|
|
2017-07-06 15:20:11 -07:00
|
|
|
Metadata Metadata::prec_dynamic(int dynamic_precedence, const Rule &rule) {
|
|
|
|
|
MetadataParams params;
|
|
|
|
|
params.dynamic_precedence = dynamic_precedence;
|
|
|
|
|
return Metadata{rule, params};
|
|
|
|
|
}
|
|
|
|
|
|
2017-03-17 12:52:01 -07:00
|
|
|
Metadata Metadata::separator(const Rule &rule) {
|
|
|
|
|
MetadataParams params;
|
|
|
|
|
params.has_precedence = true;
|
|
|
|
|
params.precedence = INT_MIN;
|
|
|
|
|
params.is_active = true;
|
|
|
|
|
return Metadata{rule, params};
|
2014-07-20 21:43:27 -07:00
|
|
|
}
|
|
|
|
|
|
2017-03-17 12:52:01 -07:00
|
|
|
Metadata Metadata::main_token(const Rule &rule) {
|
|
|
|
|
MetadataParams params;
|
|
|
|
|
params.has_precedence = true;
|
|
|
|
|
params.precedence = 0;
|
|
|
|
|
params.is_main_token = true;
|
|
|
|
|
return Metadata{rule, params};
|
2015-07-31 16:32:24 -07:00
|
|
|
}
|
2014-07-20 21:43:27 -07:00
|
|
|
|
2017-07-13 17:17:22 -07:00
|
|
|
Metadata Metadata::rename(string &&name, const Rule &rule) {
|
|
|
|
|
MetadataParams params;
|
|
|
|
|
params.name_replacement = move(name);
|
|
|
|
|
return Metadata{rule, params};
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-20 21:43:27 -07:00
|
|
|
} // namespace rules
|
|
|
|
|
} // namespace tree_sitter
|