trimmed more fat

This commit is contained in:
Maieul BOYER 2024-06-30 19:37:09 +02:00
parent d9bf7fa721
commit 5898689697
No known key found for this signature in database
14 changed files with 432 additions and 3151 deletions

View file

@ -13,7 +13,6 @@
#include "./stack.h"
#include "./subtree.h"
#include "./tree.h"
#include "./wasm_store.h"
#include "api.h"
#include <assert.h>
#include <inttypes.h>
@ -96,7 +95,7 @@ static const unsigned MAX_SUMMARY_DEPTH = 16;
static const unsigned MAX_COST_DIFFERENCE = 16 * ERROR_COST_PER_SKIPPED_TREE;
static const unsigned OP_COUNT_PER_TIMEOUT_CHECK = 100;
typedef struct
typedef struct TokenCache
{
Subtree token;
Subtree last_external_token;
@ -109,7 +108,6 @@ struct TSParser
Stack *stack;
SubtreePool tree_pool;
const TSLanguage *language;
TSWasmStore *wasm_store;
ReduceActionSet reduce_actions;
Subtree finished_tree;
SubtreeArray trailing_extras;
@ -129,7 +127,7 @@ struct TSParser
bool has_scanner_error;
};
typedef struct
typedef struct ErrorStatus
{
unsigned cost;
unsigned node_count;
@ -137,7 +135,7 @@ typedef struct
bool is_in_error;
} ErrorStatus;
typedef enum
typedef enum ErrorComparison
{
ErrorComparisonTakeLeft,
ErrorComparisonPreferLeft,
@ -146,7 +144,7 @@ typedef enum
ErrorComparisonTakeRight,
} ErrorComparison;
typedef struct
typedef struct TSStringInput
{
const char *string;
uint32_t length;
@ -374,42 +372,22 @@ static bool ts_parser__better_version_exists(TSParser *self, StackVersion versio
static bool ts_parser__call_main_lex_fn(TSParser *self, TSLexMode lex_mode)
{
if (ts_language_is_wasm(self->language))
{
return ts_wasm_store_call_lex_main(self->wasm_store, lex_mode.lex_state);
}
else
{
return self->language->lex_fn(&self->lexer.data, lex_mode.lex_state);
}
return self->language->lex_fn(&self->lexer.data, lex_mode.lex_state);
}
static bool ts_parser__call_keyword_lex_fn(TSParser *self, TSLexMode lex_mode)
{
(void)(lex_mode);
if (ts_language_is_wasm(self->language))
{
return ts_wasm_store_call_lex_keyword(self->wasm_store, 0);
}
else
{
return self->language->keyword_lex_fn(&self->lexer.data, 0);
}
return self->language->keyword_lex_fn(&self->lexer.data, 0);
}
static void ts_parser__external_scanner_create(TSParser *self)
{
if (self->language && self->language->external_scanner.states)
{
if (ts_language_is_wasm(self->language))
{
self->external_scanner_payload = (void *)(uintptr_t)ts_wasm_store_call_scanner_create(self->wasm_store);
if (ts_wasm_store_has_error(self->wasm_store))
{
self->has_scanner_error = true;
}
}
else if (self->language->external_scanner.create)
if (self->language->external_scanner.create)
{
self->external_scanner_payload = self->language->external_scanner.create();
}
@ -418,8 +396,7 @@ static void ts_parser__external_scanner_create(TSParser *self)
static void ts_parser__external_scanner_destroy(TSParser *self)
{
if (self->language && self->external_scanner_payload && self->language->external_scanner.destroy &&
!ts_language_is_wasm(self->language))
if (self->language && self->external_scanner_payload && self->language->external_scanner.destroy)
{
self->language->external_scanner.destroy(self->external_scanner_payload);
}
@ -428,16 +405,10 @@ static void ts_parser__external_scanner_destroy(TSParser *self)
static unsigned ts_parser__external_scanner_serialize(TSParser *self)
{
if (ts_language_is_wasm(self->language))
{
return ts_wasm_store_call_scanner_serialize(self->wasm_store, (uintptr_t)self->external_scanner_payload, self->lexer.debug_buffer);
}
else
{
uint32_t length = self->language->external_scanner.serialize(self->external_scanner_payload, self->lexer.debug_buffer);
assert(length <= TREE_SITTER_SERIALIZATION_BUFFER_SIZE);
return length;
}
uint32_t length = self->language->external_scanner.serialize(self->external_scanner_payload, self->lexer.debug_buffer);
assert(length <= TREE_SITTER_SERIALIZATION_BUFFER_SIZE);
return length;
}
static void ts_parser__external_scanner_deserialize(TSParser *self, Subtree external_token)
@ -450,37 +421,13 @@ static void ts_parser__external_scanner_deserialize(TSParser *self, Subtree exte
length = external_token.ptr->external_scanner_state.length;
}
if (ts_language_is_wasm(self->language))
{
ts_wasm_store_call_scanner_deserialize(self->wasm_store, (uintptr_t)self->external_scanner_payload, data, length);
if (ts_wasm_store_has_error(self->wasm_store))
{
self->has_scanner_error = true;
}
}
else
{
self->language->external_scanner.deserialize(self->external_scanner_payload, data, length);
}
self->language->external_scanner.deserialize(self->external_scanner_payload, data, length);
}
static bool ts_parser__external_scanner_scan(TSParser *self, TSStateId external_lex_state)
{
if (ts_language_is_wasm(self->language))
{
bool result = ts_wasm_store_call_scanner_scan(self->wasm_store, (uintptr_t)self->external_scanner_payload,
external_lex_state * self->language->external_token_count);
if (ts_wasm_store_has_error(self->wasm_store))
{
self->has_scanner_error = true;
}
return result;
}
else
{
const bool *valid_external_tokens = ts_language_enabled_external_tokens(self->language, external_lex_state);
return self->language->external_scanner.scan(self->external_scanner_payload, &self->lexer.data, valid_external_tokens);
}
const bool *valid_external_tokens = ts_language_enabled_external_tokens(self->language, external_lex_state);
return self->language->external_scanner.scan(self->external_scanner_payload, &self->lexer.data, valid_external_tokens);
}
static bool ts_parser__can_reuse_first_leaf(TSParser *self, TSStateId state, Subtree tree, TableEntry *table_entry)
@ -1876,7 +1823,6 @@ void ts_parser_delete(TSParser *self)
ts_subtree_release(&self->tree_pool, self->old_tree);
self->old_tree = NULL_SUBTREE;
}
ts_wasm_store_delete(self->wasm_store);
ts_lexer_delete(&self->lexer);
ts_parser__set_cached_token(self, 0, NULL_SUBTREE, NULL_SUBTREE);
ts_subtree_pool_delete(&self->tree_pool);
@ -1902,12 +1848,6 @@ bool ts_parser_set_language(TSParser *self, const TSLanguage *language)
{
if (language->version > TREE_SITTER_LANGUAGE_VERSION || language->version < TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION)
return false;
if (ts_language_is_wasm(language))
{
if (!self->wasm_store || !ts_wasm_store_start(self->wasm_store, &self->lexer.data, language))
return false;
}
}
self->language = ts_language_copy(language);
@ -1978,11 +1918,6 @@ const TSRange *ts_parser_included_ranges(const TSParser *self, uint32_t *count)
void ts_parser_reset(TSParser *self)
{
ts_parser__external_scanner_destroy(self);
if (self->wasm_store)
{
ts_wasm_store_reset(self->wasm_store);
}
if (self->old_tree.ptr)
{
ts_subtree_release(&self->tree_pool, self->old_tree);
@ -2009,13 +1944,6 @@ TSTree *ts_parser_parse(TSParser *self, const TSTree *old_tree, TSInput input)
if (!self->language || !input.read)
return NULL;
if (ts_language_is_wasm(self->language))
{
if (!self->wasm_store)
return NULL;
ts_wasm_store_start(self->wasm_store, &self->lexer.data, self->language);
}
ts_lexer_set_input(&self->lexer, input);
self->included_range_difference_index = 0;
@ -2140,17 +2068,4 @@ TSTree *ts_parser_parse_string_encoding(TSParser *self, const TSTree *old_tree,
});
}
void ts_parser_set_wasm_store(TSParser *self, TSWasmStore *store)
{
ts_wasm_store_delete(self->wasm_store);
self->wasm_store = store;
}
TSWasmStore *ts_parser_take_wasm_store(TSParser *self)
{
TSWasmStore *result = self->wasm_store;
self->wasm_store = NULL;
return result;
}
#undef LOG