Drop release functions from callback structs

The caller can just as easily take care of the cleanup explicitly
This commit is contained in:
Max Brunsfeld 2015-09-08 23:24:33 -07:00
parent 7ee5eaa16a
commit ebd60213d9
10 changed files with 29 additions and 51 deletions

View file

@ -8,7 +8,7 @@ extern "C" {
#include "tree_sitter/runtime.h"
static inline TSDebugger ts_debugger_null() {
TSDebugger debugger = { 0, 0, 0 };
TSDebugger debugger = { 0, 0 };
return debugger;
}

View file

@ -14,8 +14,6 @@ TSDocument *ts_document_make() {
void ts_document_free(TSDocument *document) {
ts_parser_destroy(&document->parser);
if (document->input.release_fn)
document->input.release_fn(document->input.data);
if (document->tree)
ts_tree_release(document->tree);
free(document);

View file

@ -9,7 +9,7 @@
#define DEBUG(...) \
if (lexer->debugger.debug_fn) { \
snprintf(lexer->debug_buffer, TS_DEBUG_BUFFER_SIZE, __VA_ARGS__); \
lexer->debugger.debug_fn(lexer->debugger.data, TSDebugTypeLex, \
lexer->debugger.debug_fn(lexer->debugger.payload, TSDebugTypeLex, \
lexer->debug_buffer); \
}
@ -24,10 +24,10 @@ static const char *empty_chunk = "";
static void ts_lexer__get_chunk(TSLexer *lexer) {
TSInput input = lexer->input;
if (lexer->current_position.bytes != lexer->chunk_start + lexer->chunk_size)
input.seek_fn(input.data, lexer->current_position);
input.seek_fn(input.payload, lexer->current_position);
lexer->chunk_start = lexer->current_position.bytes;
lexer->chunk = input.read_fn(input.data, &lexer->chunk_size);
lexer->chunk = input.read_fn(input.payload, &lexer->chunk_size);
if (!lexer->chunk_size)
lexer->chunk = empty_chunk;
}

View file

@ -17,7 +17,7 @@
#define DEBUG(...) \
if (parser->lexer.debugger.debug_fn) { \
snprintf(parser->lexer.debug_buffer, TS_DEBUG_BUFFER_SIZE, __VA_ARGS__); \
parser->lexer.debugger.debug_fn(parser->lexer.debugger.data, \
parser->lexer.debugger.debug_fn(parser->lexer.debugger.payload, \
TSDebugTypeParse, \
parser->lexer.debug_buffer); \
}
@ -424,12 +424,8 @@ TSParser ts_parser_make() {
void ts_parser_destroy(TSParser *parser) {
ts_parse_stack_delete(parser->stack);
ts_stack_delete(&parser->right_stack);
if (parser->lookahead)
ts_tree_release(parser->lookahead);
if (parser->lexer.debugger.release_fn)
parser->lexer.debugger.release_fn(parser->lexer.debugger.data);
}
TSDebugger ts_parser_get_debugger(const TSParser *parser) {
@ -437,8 +433,6 @@ TSDebugger ts_parser_get_debugger(const TSParser *parser) {
}
void ts_parser_set_debugger(TSParser *parser, TSDebugger debugger) {
if (parser->lexer.debugger.release_fn)
parser->lexer.debugger.release_fn(parser->lexer.debugger.data);
parser->lexer.debugger = debugger;
}

View file

@ -7,31 +7,32 @@ typedef struct {
size_t length;
} TSStringInput;
const char *ts_string_input_read(void *d, size_t *bytes_read) {
TSStringInput *data = (TSStringInput *)d;
if (data->position >= data->length) {
const char *ts_string_input_read(void *payload, size_t *bytes_read) {
TSStringInput *input = (TSStringInput *)payload;
if (input->position >= input->length) {
*bytes_read = 0;
return "";
}
size_t previous_position = data->position;
data->position = data->length;
*bytes_read = data->position - previous_position;
return data->string + previous_position;
size_t previous_position = input->position;
input->position = input->length;
*bytes_read = input->position - previous_position;
return input->string + previous_position;
}
int ts_string_input_seek(void *d, TSLength position) {
TSStringInput *data = (TSStringInput *)d;
data->position = position.bytes;
return (position.bytes < data->length);
int ts_string_input_seek(void *payload, TSLength position) {
TSStringInput *input = (TSStringInput *)payload;
input->position = position.bytes;
return (position.bytes < input->length);
}
TSInput ts_string_input_make(const char *string) {
TSStringInput *data = malloc(sizeof(TSStringInput));
data->string = string;
data->position = 0;
data->length = strlen(string);
return (TSInput){.data = (void *)data,
.read_fn = ts_string_input_read,
.seek_fn = ts_string_input_seek,
.release_fn = free };
TSStringInput *input = malloc(sizeof(TSStringInput));
input->string = string;
input->position = 0;
input->length = strlen(string);
return (TSInput){
.payload = input,
.read_fn = ts_string_input_read,
.seek_fn = ts_string_input_seek,
};
}