Fix parsing of valid code with halt_on_error flag set
Signed-off-by: Tim Clem <timothy.clem@gmail.com>
This commit is contained in:
parent
a98d449d88
commit
74f5ceddf7
2 changed files with 20 additions and 1 deletions
|
|
@ -194,7 +194,10 @@ static CondenseResult parser__condense_stack(Parser *self) {
|
|||
}
|
||||
}
|
||||
|
||||
if (!has_version_without_errors) result |= CondenseResultAllVersionsHadError;
|
||||
if (!has_version_without_errors && ts_stack_version_count(self->stack) > 0) {
|
||||
result |= CondenseResultAllVersionsHadError;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -1225,6 +1228,7 @@ Tree *parser_parse(Parser *self, TSInput input, Tree *old_tree, bool halt_on_err
|
|||
CondenseResult condense_result = parser__condense_stack(self);
|
||||
if (halt_on_error && (condense_result & CondenseResultAllVersionsHadError)) {
|
||||
LOG("halting_parse");
|
||||
LOG_STACK();
|
||||
|
||||
ts_lexer_advance_to_end(&self->lexer);
|
||||
Length remaining_length = length_sub(
|
||||
|
|
|
|||
|
|
@ -396,6 +396,21 @@ describe("Document", [&]() {
|
|||
AssertThat(ts_node_end_char(root), Equals(input_string.size()));
|
||||
AssertThat(ts_node_end_byte(root), Equals(input_string.size()));
|
||||
});
|
||||
|
||||
it("can parse valid code with the halt_on_error flag set", [&]() {
|
||||
string input_string = "[1, null, 3]";
|
||||
ts_document_set_language(document, load_real_language("json"));
|
||||
ts_document_set_input_string(document, input_string.c_str());
|
||||
|
||||
TSParseOptions options;
|
||||
options.changed_ranges = nullptr;
|
||||
options.halt_on_error = true;
|
||||
ts_document_parse_with_options(document, options);
|
||||
root = ts_document_root_node(document);
|
||||
assert_node_string_equals(
|
||||
root,
|
||||
"(array (number) (null) (number))");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue