Inline some helper functions for lexer
This commit is contained in:
parent
ad9aee30e0
commit
5c600942df
3 changed files with 14 additions and 31 deletions
|
|
@ -36,23 +36,6 @@ typedef struct TSLexer {
|
|||
char debug_buffer[TS_DEBUG_BUFFER_SIZE];
|
||||
} TSLexer;
|
||||
|
||||
static inline int32_t ts_lexer_lookahead_char(const TSLexer *lexer) {
|
||||
return lexer->lookahead;
|
||||
}
|
||||
|
||||
static inline void ts_lexer_start_token(TSLexer *lexer) {
|
||||
lexer->token_start_position = lexer->current_position;
|
||||
}
|
||||
|
||||
static inline int ts_lexer_advance(TSLexer *lexer) {
|
||||
return lexer->advance_fn(lexer);
|
||||
}
|
||||
|
||||
static inline TSTree *ts_lexer_accept(TSLexer *lexer, TSSymbol symbol,
|
||||
int is_hidden) {
|
||||
return lexer->accept_fn(lexer, symbol, is_hidden);
|
||||
}
|
||||
|
||||
typedef unsigned short TSStateId;
|
||||
|
||||
typedef enum {
|
||||
|
|
@ -94,33 +77,33 @@ struct TSLanguage {
|
|||
DEBUG_LEX("start state:%d", lex_state); \
|
||||
int32_t lookahead; \
|
||||
next_state: \
|
||||
lookahead = ts_lexer_lookahead_char(lexer); \
|
||||
lookahead = lexer->lookahead; \
|
||||
DEBUG_LEX((0 < lookahead &&lookahead < 255 ? "lookahead char:'%c'" \
|
||||
: "lookahead char:%d"), \
|
||||
lookahead);
|
||||
|
||||
#define START_TOKEN() \
|
||||
DEBUG_LEX("start_token chars:%lu", lexer->current_position.chars); \
|
||||
ts_lexer_start_token(lexer);
|
||||
lexer->token_start_position = lexer->current_position;
|
||||
|
||||
#define ADVANCE(state_index) \
|
||||
{ \
|
||||
DEBUG_LEX("advance state:%d", state_index); \
|
||||
ts_lexer_advance(lexer); \
|
||||
lexer->advance_fn(lexer); \
|
||||
lex_state = state_index; \
|
||||
goto next_state; \
|
||||
}
|
||||
|
||||
#define ACCEPT_TOKEN(symbol) \
|
||||
{ \
|
||||
DEBUG_LEX("accept_token sym:%s", ts_symbol_names[symbol]); \
|
||||
return ts_lexer_accept(lexer, symbol, ts_hidden_symbol_flags[symbol]); \
|
||||
#define ACCEPT_TOKEN(symbol) \
|
||||
{ \
|
||||
DEBUG_LEX("accept_token sym:%s", ts_symbol_names[symbol]); \
|
||||
return lexer->accept_fn(lexer, symbol, ts_hidden_symbol_flags[symbol]); \
|
||||
}
|
||||
|
||||
#define LEX_ERROR() \
|
||||
{ \
|
||||
DEBUG_LEX("error"); \
|
||||
return ts_lexer_accept(lexer, ts_builtin_sym_error, 0); \
|
||||
#define LEX_ERROR() \
|
||||
{ \
|
||||
DEBUG_LEX("error"); \
|
||||
return lexer->accept_fn(lexer, ts_builtin_sym_error, 0); \
|
||||
}
|
||||
|
||||
#define SHIFT(to_state_value) \
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ static TSTree *accept(TSLexer *lexer, TSSymbol symbol, int is_hidden) {
|
|||
ts_length_sub(lexer->token_start_position, lexer->token_end_position);
|
||||
lexer->token_end_position = lexer->current_position;
|
||||
return (symbol == ts_builtin_sym_error)
|
||||
? ts_tree_make_error(size, padding, ts_lexer_lookahead_char(lexer))
|
||||
? ts_tree_make_error(size, padding, lexer->lookahead)
|
||||
: ts_tree_make_leaf(symbol, size, padding, is_hidden);
|
||||
}
|
||||
|
||||
|
|
@ -91,5 +91,5 @@ void ts_lexer_reset(TSLexer *lexer, TSLength position) {
|
|||
lexer->current_position = position;
|
||||
ts_lexer_read_next_chunk(lexer);
|
||||
|
||||
ts_lexer_advance(lexer);
|
||||
lexer->advance_fn(lexer);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -253,7 +253,7 @@ static int handle_error(TSParser *parser) {
|
|||
* just skip it. If the end of input is reached, exit.
|
||||
*/
|
||||
if (ts_length_eq(parser->lexer.current_position, prev_position))
|
||||
if (!ts_lexer_advance(&parser->lexer)) {
|
||||
if (!parser->lexer.advance_fn(&parser->lexer)) {
|
||||
DEBUG_PARSE("fail_to_recover");
|
||||
|
||||
resize_error(parser, error);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue