Avoid missing field initializer warnings w/o default field syntax

The default field syntax aint working on windows
This commit is contained in:
Max Brunsfeld 2018-06-14 11:12:04 -07:00
parent 587d1a740a
commit 6e72c2943d
6 changed files with 67 additions and 85 deletions

View file

@ -17,7 +17,7 @@ struct InitialSyntaxGrammar {
std::set<std::set<rules::Symbol>> expected_conflicts;
std::vector<ExternalToken> external_tokens;
std::set<rules::Symbol> variables_to_inline;
rules::Symbol word_rule = rules::NONE();
rules::Symbol word_rule;
};
} // namespace prepare_grammar

View file

@ -60,7 +60,7 @@ struct SyntaxGrammar {
std::set<std::set<rules::Symbol>> expected_conflicts;
std::vector<ExternalToken> external_tokens;
std::set<rules::Symbol> variables_to_inline;
rules::Symbol word_rule = rules::NONE();
rules::Symbol word_rule;
};
} // namespace tree_sitter

View file

@ -28,11 +28,11 @@ static inline TSNode ts_node__null() {
// TSNode - accessors
uint32_t ts_node_start_byte(const TSNode self) {
uint32_t ts_node_start_byte(TSNode self) {
return self.context[0];
}
TSPoint ts_node_start_point(const TSNode self) {
TSPoint ts_node_start_point(TSNode self) {
return (TSPoint) {self.context[1], self.context[2]};
}

View file

@ -25,7 +25,8 @@ describe("ParseItemSetBuilder", []() {
LexicalGrammar lexical_grammar{lexical_variables, {}};
it("adds items at the beginnings of referenced rules", [&]() {
SyntaxGrammar grammar{{
SyntaxGrammar grammar;
grammar.variables = {
SyntaxVariable{"rule0", VariableTypeNamed, {
Production({
{Symbol::non_terminal(1), 0, AssociativityNone, Alias{}},
@ -47,7 +48,7 @@ describe("ParseItemSetBuilder", []() {
{Symbol::terminal(15), 0, AssociativityNone, Alias{}},
}, 0)
}},
}, {}, {}, {}, {}};
};
auto production = [&](int variable_index, int production_index) -> const Production & {
return grammar.variables[variable_index].productions[production_index];
@ -84,7 +85,8 @@ describe("ParseItemSetBuilder", []() {
});
it("handles rules with empty productions", [&]() {
SyntaxGrammar grammar{{
SyntaxGrammar grammar;
grammar.variables = {
SyntaxVariable{"rule0", VariableTypeNamed, {
Production({
{Symbol::non_terminal(1), 0, AssociativityNone, Alias{}},
@ -98,7 +100,7 @@ describe("ParseItemSetBuilder", []() {
}, 0),
Production{{}, 0}
}},
}, {}, {}, {}, {}};
};
auto production = [&](int variable_index, int production_index) -> const Production & {
return grammar.variables[variable_index].productions[production_index];

View file

@ -11,11 +11,9 @@ START_TEST
describe("expand_repeats", []() {
it("replaces repeat rules with pairs of recursive rules", [&]() {
InitialSyntaxGrammar grammar{
{
Variable{"rule0", VariableTypeNamed, Repeat{Symbol::terminal(0)}},
},
{}, {}, {}, {}
InitialSyntaxGrammar grammar;
grammar.variables = {
Variable{"rule0", VariableTypeNamed, Repeat{Symbol::terminal(0)}},
};
auto result = expand_repeats(grammar);
@ -30,14 +28,12 @@ describe("expand_repeats", []() {
});
it("replaces repeats inside of sequences", [&]() {
InitialSyntaxGrammar grammar{
{
Variable{"rule0", VariableTypeNamed, Rule::seq({
Symbol::terminal(10),
Repeat{Symbol::terminal(11)},
})},
},
{}, {}, {}, {}
InitialSyntaxGrammar grammar;
grammar.variables = {
Variable{"rule0", VariableTypeNamed, Rule::seq({
Symbol::terminal(10),
Repeat{Symbol::terminal(11)},
})},
};
auto result = expand_repeats(grammar);
@ -55,14 +51,12 @@ describe("expand_repeats", []() {
});
it("replaces repeats inside of choices", [&]() {
InitialSyntaxGrammar grammar{
{
Variable{"rule0", VariableTypeNamed, Rule::choice({
Symbol::terminal(10),
Repeat{Symbol::terminal(11)}
})},
},
{}, {}, {}, {}
InitialSyntaxGrammar grammar;
grammar.variables = {
Variable{"rule0", VariableTypeNamed, Rule::choice({
Symbol::terminal(10),
Repeat{Symbol::terminal(11)}
})},
};
auto result = expand_repeats(grammar);
@ -80,18 +74,16 @@ describe("expand_repeats", []() {
});
it("does not create redundant auxiliary rules", [&]() {
InitialSyntaxGrammar grammar{
{
Variable{"rule0", VariableTypeNamed, Rule::choice({
Rule::seq({ Symbol::terminal(1), Repeat{Symbol::terminal(4)} }),
Rule::seq({ Symbol::terminal(2), Repeat{Symbol::terminal(4)} }),
})},
Variable{"rule1", VariableTypeNamed, Rule::seq({
Symbol::terminal(3),
Repeat{Symbol::terminal(4)}
})},
},
{}, {}, {}, {}
InitialSyntaxGrammar grammar;
grammar.variables = {
Variable{"rule0", VariableTypeNamed, Rule::choice({
Rule::seq({ Symbol::terminal(1), Repeat{Symbol::terminal(4)} }),
Rule::seq({ Symbol::terminal(2), Repeat{Symbol::terminal(4)} }),
})},
Variable{"rule1", VariableTypeNamed, Rule::seq({
Symbol::terminal(3),
Repeat{Symbol::terminal(4)}
})},
};
auto result = expand_repeats(grammar);
@ -113,14 +105,14 @@ describe("expand_repeats", []() {
});
it("can replace multiple repeats in the same rule", [&]() {
InitialSyntaxGrammar grammar{
InitialSyntaxGrammar grammar;
grammar.variables = {
{
Variable{"rule0", VariableTypeNamed, Rule::seq({
Repeat{Symbol::terminal(10)},
Repeat{Symbol::terminal(11)},
})},
},
{}, {}, {}, {}
}
};
auto result = expand_repeats(grammar);
@ -142,12 +134,10 @@ describe("expand_repeats", []() {
});
it("can replace repeats in multiple rules", [&]() {
InitialSyntaxGrammar grammar{
{
Variable{"rule0", VariableTypeNamed, Repeat{Symbol::terminal(10)}},
Variable{"rule1", VariableTypeNamed, Repeat{Symbol::terminal(11)}},
},
{}, {}, {}, {}
InitialSyntaxGrammar grammar;
grammar.variables = {
Variable{"rule0", VariableTypeNamed, Repeat{Symbol::terminal(10)}},
Variable{"rule1", VariableTypeNamed, Repeat{Symbol::terminal(11)}},
};
auto result = expand_repeats(grammar);

View file

@ -11,13 +11,11 @@ using prepare_grammar::intern_symbols;
describe("intern_symbols", []() {
it("replaces named symbols with numerically-indexed symbols", [&]() {
InputGrammar grammar{
{
{"x", VariableTypeNamed, Rule::choice({ NamedSymbol{"y"}, NamedSymbol{"_z"} })},
{"y", VariableTypeNamed, NamedSymbol{"_z"}},
{"_z", VariableTypeNamed, String{"stuff"}}
},
{}, {}, {}, {}
InputGrammar grammar;
grammar.variables = {
{"x", VariableTypeNamed, Rule::choice({ NamedSymbol{"y"}, NamedSymbol{"_z"} })},
{"y", VariableTypeNamed, NamedSymbol{"_z"}},
{"_z", VariableTypeNamed, String{"stuff"}}
};
auto result = intern_symbols(grammar);
@ -32,11 +30,9 @@ describe("intern_symbols", []() {
describe("when there are symbols that reference undefined rules", [&]() {
it("returns an error", []() {
InputGrammar grammar{
{
{"x", VariableTypeNamed, NamedSymbol{"y"}},
},
{}, {}, {}, {}
InputGrammar grammar;
grammar.variables = {
{"x", VariableTypeNamed, NamedSymbol{"y"}},
};
auto result = intern_symbols(grammar);
@ -46,16 +42,14 @@ describe("intern_symbols", []() {
});
it("translates the grammar's optional 'extra_tokens' to numerical symbols", [&]() {
InputGrammar grammar{
{
{"x", VariableTypeNamed, Rule::choice({ NamedSymbol{"y"}, NamedSymbol{"z"} })},
{"y", VariableTypeNamed, NamedSymbol{"z"}},
{"z", VariableTypeNamed, String{"stuff"}}
},
{
NamedSymbol{"z"}
},
{}, {}, {}
InputGrammar grammar;
grammar.variables = {
{"x", VariableTypeNamed, Rule::choice({ NamedSymbol{"y"}, NamedSymbol{"z"} })},
{"y", VariableTypeNamed, NamedSymbol{"z"}},
{"z", VariableTypeNamed, String{"stuff"}}
};
grammar.extra_tokens = {
NamedSymbol{"z"}
};
auto result = intern_symbols(grammar);
@ -66,19 +60,15 @@ describe("intern_symbols", []() {
});
it("records any rule names that match external token names", [&]() {
InputGrammar grammar{
{
{"x", VariableTypeNamed, Rule::choice({ NamedSymbol{"y"}, NamedSymbol{"z"} })},
{"y", VariableTypeNamed, NamedSymbol{"z"}},
{"z", VariableTypeNamed, String{"stuff"}},
},
{},
{},
{
NamedSymbol{"w"},
NamedSymbol{"z"},
},
{}
InputGrammar grammar;
grammar.variables = {
{"x", VariableTypeNamed, Rule::choice({ NamedSymbol{"y"}, NamedSymbol{"z"} })},
{"y", VariableTypeNamed, NamedSymbol{"z"}},
{"z", VariableTypeNamed, String{"stuff"}},
};
grammar.external_tokens = {
NamedSymbol{"w"},
NamedSymbol{"z"},
};
auto result = intern_symbols(grammar);