Upodated stuff

This commit is contained in:
Maieul BOYER 2024-09-01 18:50:47 +00:00
parent a8b09ab55a
commit 8be7417a61
43 changed files with 812 additions and 94973 deletions

View file

@ -33,6 +33,8 @@ parser \
point/point_funcs1 \
point/point_funcs2 \
scanner \
scanner/deserialize \
scanner/serialize \
stack/stack_add_link \
stack/stack_funcs1 \
stack/stack_funcs2 \

View file

@ -1,7 +1,7 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* heredoc_type.h :+: :+: :+: */
/* heredoc.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
@ -10,11 +10,10 @@
/* */
/* ************************************************************************** */
#ifndef HEREDOC_TYPE_H
#define HEREDOC_TYPE_H
#ifndef HEREDOC_H
#define HEREDOC_H
#include "me/string/string.h"
#include "me/types.h"
typedef struct s_heredoc t_heredoc;

View file

@ -0,0 +1,19 @@
#ifndef SCANNER_H
#define SCANNER_H
#include "me/types.h"
#include "parser/inner/heredoc.h"
#include "me/vec/vec_heredoc.h"
#include "parser/array.h"
typedef struct s_scanner t_scanner;
struct s_scanner
{
t_u8 last_glob_paren_depth;
bool ext_was_in_double_quote;
bool ext_saw_outside_quote;
t_vec_heredoc heredocs;
};
#endif

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/node.h"
#include "parser/inner/node.h"
t_u32 ts_node_child_count(TSNode self)
{

View file

@ -1,7 +1,7 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* node_child_inner.c :+: :+: :+: */
/* node_childinner.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/node.h"
#include "parser/inner/node.h"
TSNode ts_node__child(TSNode self, t_u32 child_index, bool include_anonymous)
{

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/node.h"
#include "parser/inner/node.h"
#include "parser/api.h"
#include "parser/language.h"
#include "parser/tree.h"

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/node.h"
#include "parser/inner/node.h"
#include "parser/language.h"
#include "parser/tree.h"

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/node.h"
#include "parser/inner/node.h"
#include "parser/language.h"
#include "parser/tree.h"

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/node.h"
#include "parser/inner/node.h"
#include "parser/language.h"
#include "parser/tree.h"

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/node.h"
#include "parser/inner/node.h"
#include "parser/language.h"
#include "parser/tree.h"

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/node.h"
#include "parser/inner/node.h"
#include "parser/language.h"
#include "parser/tree.h"

View file

@ -6,20 +6,19 @@
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/01 14:17:17 by maiboyer #+# #+# */
/* Updated: 2024/09/01 15:11:51 by maiboyer ### ########.fr */
/* Updated: 2024/09/01 18:50:23 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
#include "me/char/char.h"
#include "me/str/str.h"
#include "me/string/string.h"
#include "parser/inner/heredoc.h"
#include "parser/inner/scanner.h"
#include "me/types.h"
#include "parser/_inner/heredoc_type.h"
#include "parser/array.h"
#include "parser/parser.h"
#include <assert.h>
#include <stdio.h>
#include <string.h>
enum e_token_type
{
@ -45,16 +44,6 @@ enum e_token_type
ERROR_RECOVERY,
};
typedef struct s_scanner t_scanner;
struct s_scanner
{
t_u8 last_glob_paren_depth;
bool ext_was_in_double_quote;
bool ext_saw_outside_quote;
Array(t_heredoc) heredocs;
};
void advance(TSLexer *lexer)
{
lexer->advance(lexer, false);
@ -67,7 +56,7 @@ void skip(TSLexer *lexer)
bool in_error_recovery(const bool *valid_symbols)
{
return valid_symbols[ERROR_RECOVERY];
return (valid_symbols[ERROR_RECOVERY]);
}
void reset(t_scanner *scanner)
@ -79,89 +68,6 @@ void reset(t_scanner *scanner)
reset_heredoc(array_get(&scanner->heredocs, i++));
}
t_u32 serialize(t_scanner *scanner, t_u8 *buffer)
{
t_u32 size;
t_usize i;
t_heredoc *heredoc;
size = 0;
buffer[size++] = (char)scanner->last_glob_paren_depth;
buffer[size++] = (char)scanner->ext_was_in_double_quote;
buffer[size++] = (char)scanner->ext_saw_outside_quote;
buffer[size++] = (char)scanner->heredocs.size;
i = 0;
while (i < scanner->heredocs.size)
{
heredoc = array_get(&scanner->heredocs, i);
if (heredoc->delimiter.len + 1 + sizeof(t_usize) + size >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE)
return (0);
buffer[size++] = (char)heredoc->is_raw;
buffer[size++] = (char)heredoc->started;
buffer[size++] = (char)heredoc->allows_indent;
heredoc->delimiter.len++;
mem_copy(&buffer[size], &heredoc->delimiter.len, sizeof(t_usize));
size += sizeof(t_usize);
if (heredoc->delimiter.len > 0)
{
mem_copy(&buffer[size], heredoc->delimiter.buf, heredoc->delimiter.len);
size += heredoc->delimiter.len;
}
heredoc->delimiter.len--;
i++;
}
return (size);
}
void deserialize(t_scanner *scanner, const t_u8 *buffer, t_u32 length)
{
t_usize delim_size;
t_u32 size;
t_u32 heredoc_count;
t_heredoc *heredoc;
t_usize i;
if (length == 0)
reset(scanner);
else
{
size = 0;
scanner->last_glob_paren_depth = buffer[size++];
scanner->ext_was_in_double_quote = buffer[size++];
scanner->ext_saw_outside_quote = buffer[size++];
heredoc_count = (t_u8)buffer[size++];
i = 0;
while (i < heredoc_count)
{
heredoc = NULL;
if (i < scanner->heredocs.size)
heredoc = array_get(&scanner->heredocs, i);
else
{
array_push(&scanner->heredocs, heredoc_new());
heredoc = array_back(&scanner->heredocs);
}
heredoc->is_raw = buffer[size++];
heredoc->started = buffer[size++];
heredoc->allows_indent = buffer[size++];
mem_copy(&delim_size, &buffer[size], sizeof(t_usize));
size += sizeof(t_usize);
string_reserve(&heredoc->delimiter, delim_size + 1);
heredoc->delimiter.len = delim_size - 1;
if (delim_size > 0)
{
mem_copy(heredoc->delimiter.buf, &buffer[size], delim_size);
size += delim_size;
}
i++;
}
if (size != length)
me_abort("size != length");
}
}
/**
* Consume a "word" in POSIX parlance, and returns it unquoted.
*
@ -1095,7 +1001,7 @@ void *tree_sitter_sh_external_scanner_create()
scanner = mem_alloc(sizeof(*scanner));
array_init(&scanner->heredocs);
return scanner;
return (scanner);
}
bool tree_sitter_sh_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols)
@ -1103,23 +1009,7 @@ bool tree_sitter_sh_external_scanner_scan(void *payload, TSLexer *lexer, const b
t_scanner *scanner;
scanner = (t_scanner *)payload;
return scan(scanner, lexer, valid_symbols);
}
t_u32 tree_sitter_sh_external_scanner_serialize(void *payload, t_u8 *state)
{
t_scanner *scanner;
scanner = (t_scanner *)payload;
return (serialize(scanner, state));
}
void tree_sitter_sh_external_scanner_deserialize(void *payload, const t_u8 *state, t_u32 length)
{
t_scanner *scanner;
scanner = (t_scanner *)payload;
deserialize(scanner, state, length);
return (scan(scanner, lexer, valid_symbols));
}
void tree_sitter_sh_external_scanner_destroy(void *payload)

View file

@ -0,0 +1,68 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* deserialize.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/01 15:06:56 by maiboyer #+# #+# */
/* Updated: 2024/09/01 15:08:47 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
#include "me/types.h"
#include "parser/inner/heredoc.h"
#include "parser/inner/scanner.h"
#include "parser/array.h"
#include "parser/parser.h"
void reset(t_scanner *);
void tree_sitter_sh_external_scanner_deserialize(t_scanner *scanner, const t_u8 *buffer, t_u32 length)
{
t_usize delim_size;
t_u32 size;
t_u32 heredoc_count;
t_heredoc *heredoc;
t_usize i;
if (length == 0)
reset(scanner);
else
{
size = 0;
scanner->last_glob_paren_depth = buffer[size++];
scanner->ext_was_in_double_quote = buffer[size++];
scanner->ext_saw_outside_quote = buffer[size++];
heredoc_count = (t_u8)buffer[size++];
i = 0;
while (i < heredoc_count)
{
heredoc = NULL;
if (i < scanner->heredocs.size)
heredoc = array_get(&scanner->heredocs, i);
else
{
array_push(&scanner->heredocs, heredoc_new());
heredoc = array_back(&scanner->heredocs);
}
heredoc->is_raw = buffer[size++];
heredoc->started = buffer[size++];
heredoc->allows_indent = buffer[size++];
mem_copy(&delim_size, &buffer[size], sizeof(t_usize));
size += sizeof(t_usize);
string_reserve(&heredoc->delimiter, delim_size + 1);
heredoc->delimiter.len = delim_size - 1;
if (delim_size > 0)
{
mem_copy(heredoc->delimiter.buf, &buffer[size], delim_size);
size += delim_size;
}
i++;
}
if (size != length)
me_abort("size != length");
}
}

View file

@ -0,0 +1,56 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* serialize.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/01 15:06:56 by maiboyer #+# #+# */
/* Updated: 2024/09/01 15:08:47 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
#include "parser/inner/scanner.h"
#include "parser/inner/heredoc.h"
#include "me/types.h"
#include "parser/array.h"
#include "parser/parser.h"
t_error serialize_heredocs(t_scanner *scanner, t_u8* buffer, t_u32 *size, t_usize i)
{
t_heredoc *heredoc;
heredoc = array_get(&scanner->heredocs, i);
if (heredoc->delimiter.len + 1 + sizeof(t_usize) + (*size) >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE)
return (ERROR);
buffer[(*size)++] = (char)heredoc->is_raw;
buffer[(*size)++] = (char)heredoc->started;
buffer[(*size)++] = (char)heredoc->allows_indent;
heredoc->delimiter.len++;
mem_copy(&buffer[(*size)], &heredoc->delimiter.len, sizeof(t_usize));
size += sizeof(t_usize);
if (heredoc->delimiter.len > 0)
{
mem_copy(&buffer[(*size)], heredoc->delimiter.buf, heredoc->delimiter.len);
(*size) += heredoc->delimiter.len;
}
heredoc->delimiter.len--;
return (NO_ERROR);
}
t_u32 tree_sitter_sh_external_scanner_serialize(t_scanner *scanner, t_u8 *buffer)
{
t_u32 size;
t_usize i;
size = 0;
buffer[size++] = (char)scanner->last_glob_paren_depth;
buffer[size++] = (char)scanner->ext_was_in_double_quote;
buffer[size++] = (char)scanner->ext_saw_outside_quote;
buffer[size++] = (char)scanner->heredocs.size;
i = 0;
while (i < scanner->heredocs.size)
if (serialize_heredocs(scanner, buffer, &size, i++))
return (0);
return (size);
}

View file

@ -11,7 +11,7 @@
/* ************************************************************************** */
#include "parser/stack.h"
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
// In general,
// we preserve ambiguities until they are removed from the stack

View file

@ -11,7 +11,7 @@
/* ************************************************************************** */
#include "parser/stack.h"
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
bool ts_stack_is_active(const t_stack *self, t_stack_version version)
{

View file

@ -11,7 +11,7 @@
/* ************************************************************************** */
#include "parser/stack.h"
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
t_u32 ts_stack_error_cost(const t_stack *self, t_stack_version version)
{

View file

@ -11,7 +11,7 @@
/* ************************************************************************** */
#include "parser/stack.h"
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
bool stack__subtree_is_equivalent(t_subtree left, t_subtree right)
{

View file

@ -11,7 +11,7 @@
/* ************************************************************************** */
#include "parser/stack.h"
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
t_u32 ts_stack_version_count(const t_stack *self)
{

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
#include "parser/stack.h"
t_stack_slice_array stack__iter(t_stack *self, t_stack_version version,

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
#include "parser/stack.h"
t_stack *ts_stack_new(void)

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
#include "parser/language.h"
void ts_stack_push(t_stack *self, t_stack_version version, t_subtree subtree,

View file

@ -12,7 +12,7 @@
#include "me/types.h"
#include "parser/stack.h"
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
bool ts_stack_merge(t_stack *self, t_stack_version version1,
t_stack_version version2)

View file

@ -11,7 +11,7 @@
/* ************************************************************************** */
#include "parser/stack.h"
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
t_stack_action pop_error_callback(void *payload,
const t_stack_iterator *iterator)

View file

@ -10,7 +10,7 @@
/* */
/* ************************************************************************** */
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
#include "parser/language.h"
#include "parser/stack.h"

View file

@ -11,7 +11,7 @@
/* ************************************************************************** */
#include "parser/stack.h"
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
t_stack_action summarize_stack_callback(void *payload,
const t_stack_iterator *iterator)

View file

@ -11,7 +11,7 @@
/* ************************************************************************** */
#include "parser/stack.h"
#include "parser/_inner/stack.h"
#include "parser/inner/stack.h"
void ts_stack_remove_version(t_stack *self, t_stack_version version)
{