@@ -1827,6 +1827,7 @@ static unsigned ts_parser__condense_stack(TSParser *self) {
1827
1827
1828
1828
static bool ts_parser_has_outstanding_parse (TSParser * self ) {
1829
1829
return (
1830
+ self -> external_scanner_payload ||
1830
1831
ts_stack_state (self -> stack , 0 ) != 1 ||
1831
1832
ts_stack_node_count_since_error (self -> stack , 0 ) != 0
1832
1833
);
@@ -1889,7 +1890,7 @@ const TSLanguage *ts_parser_language(const TSParser *self) {
1889
1890
}
1890
1891
1891
1892
bool ts_parser_set_language (TSParser * self , const TSLanguage * language ) {
1892
- ts_parser__external_scanner_destroy (self );
1893
+ ts_parser_reset (self );
1893
1894
ts_language_delete (self -> language );
1894
1895
self -> language = NULL ;
1895
1896
@@ -1908,8 +1909,6 @@ bool ts_parser_set_language(TSParser *self, const TSLanguage *language) {
1908
1909
}
1909
1910
1910
1911
self -> language = ts_language_copy (language );
1911
- ts_parser__external_scanner_create (self );
1912
- ts_parser_reset (self );
1913
1912
return true;
1914
1913
}
1915
1914
@@ -1966,8 +1965,9 @@ const TSRange *ts_parser_included_ranges(const TSParser *self, uint32_t *count)
1966
1965
}
1967
1966
1968
1967
void ts_parser_reset (TSParser * self ) {
1969
- if (self -> language && self -> language -> external_scanner .deserialize ) {
1970
- self -> language -> external_scanner .deserialize (self -> external_scanner_payload , NULL , 0 );
1968
+ ts_parser__external_scanner_destroy (self );
1969
+ if (self -> wasm_store ) {
1970
+ ts_wasm_store_reset (self -> wasm_store );
1971
1971
}
1972
1972
1973
1973
if (self -> old_tree .ptr ) {
@@ -2006,24 +2006,29 @@ TSTree *ts_parser_parse(
2006
2006
2007
2007
if (ts_parser_has_outstanding_parse (self )) {
2008
2008
LOG ("resume_parsing" );
2009
- } else if (old_tree ) {
2010
- ts_subtree_retain (old_tree -> root );
2011
- self -> old_tree = old_tree -> root ;
2012
- ts_range_array_get_changed_ranges (
2013
- old_tree -> included_ranges , old_tree -> included_range_count ,
2014
- self -> lexer .included_ranges , self -> lexer .included_range_count ,
2015
- & self -> included_range_differences
2016
- );
2017
- reusable_node_reset (& self -> reusable_node , old_tree -> root );
2018
- LOG ("parse_after_edit" );
2019
- LOG_TREE (self -> old_tree );
2020
- for (unsigned i = 0 ; i < self -> included_range_differences .size ; i ++ ) {
2021
- TSRange * range = & self -> included_range_differences .contents [i ];
2022
- LOG ("different_included_range %u - %u" , range -> start_byte , range -> end_byte );
2023
- }
2024
2009
} else {
2025
- reusable_node_clear (& self -> reusable_node );
2026
- LOG ("new_parse" );
2010
+ ts_parser__external_scanner_create (self );
2011
+ if (self -> has_scanner_error ) goto exit ;
2012
+
2013
+ if (old_tree ) {
2014
+ ts_subtree_retain (old_tree -> root );
2015
+ self -> old_tree = old_tree -> root ;
2016
+ ts_range_array_get_changed_ranges (
2017
+ old_tree -> included_ranges , old_tree -> included_range_count ,
2018
+ self -> lexer .included_ranges , self -> lexer .included_range_count ,
2019
+ & self -> included_range_differences
2020
+ );
2021
+ reusable_node_reset (& self -> reusable_node , old_tree -> root );
2022
+ LOG ("parse_after_edit" );
2023
+ LOG_TREE (self -> old_tree );
2024
+ for (unsigned i = 0 ; i < self -> included_range_differences .size ; i ++ ) {
2025
+ TSRange * range = & self -> included_range_differences .contents [i ];
2026
+ LOG ("different_included_range %u - %u" , range -> start_byte , range -> end_byte );
2027
+ }
2028
+ } else {
2029
+ reusable_node_clear (& self -> reusable_node );
2030
+ LOG ("new_parse" );
2031
+ }
2027
2032
}
2028
2033
2029
2034
self -> operation_count = 0 ;
0 commit comments