Upodated stuff
This commit is contained in:
parent
a8b09ab55a
commit
8be7417a61
43 changed files with 812 additions and 94973 deletions
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
19
parser/include/parser/inner/scanner.h
Executable file
19
parser/include/parser/inner/scanner.h
Executable 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
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/_inner/node.h"
|
||||
#include "parser/inner/node.h"
|
||||
|
||||
t_u32 ts_node_child_count(TSNode self)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/_inner/node.h"
|
||||
#include "parser/inner/node.h"
|
||||
#include "parser/language.h"
|
||||
#include "parser/tree.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/_inner/node.h"
|
||||
#include "parser/inner/node.h"
|
||||
#include "parser/language.h"
|
||||
#include "parser/tree.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/_inner/node.h"
|
||||
#include "parser/inner/node.h"
|
||||
#include "parser/language.h"
|
||||
#include "parser/tree.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/_inner/node.h"
|
||||
#include "parser/inner/node.h"
|
||||
#include "parser/language.h"
|
||||
#include "parser/tree.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/_inner/node.h"
|
||||
#include "parser/inner/node.h"
|
||||
#include "parser/language.h"
|
||||
#include "parser/tree.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
68
parser/src/scanner/deserialize.c
Normal file
68
parser/src/scanner/deserialize.c
Normal 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");
|
||||
}
|
||||
}
|
||||
56
parser/src/scanner/serialize.c
Normal file
56
parser/src/scanner/serialize.c
Normal 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);
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/_inner/stack.h"
|
||||
#include "parser/inner/stack.h"
|
||||
#include "parser/stack.h"
|
||||
|
||||
t_stack *ts_stack_new(void)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/_inner/stack.h"
|
||||
#include "parser/inner/stack.h"
|
||||
#include "parser/language.h"
|
||||
#include "parser/stack.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue