This commit is contained in:
mhoffm
2021-06-17 23:57:13 +02:00
parent 29b4c866b4
commit e7d26aa32a

View File

@@ -56,7 +56,6 @@ void print_debug_info(Scanner *scanner, TSLexer *lexer, const bool *valid_symbol
printf("\nDEBUG INFO END\n\n"); printf("\nDEBUG INFO END\n\n");
} }
// some helpers to keep track of template depth
void scanner_enter_interpolation_context(Scanner *scanner) { void scanner_enter_interpolation_context(Scanner *scanner) {
scanner->template_interpolation_depth++; scanner->template_interpolation_depth++;
scanner->in_template_interpolation = true; scanner->in_template_interpolation = true;
@@ -78,7 +77,6 @@ void scanner_enter_quoted_context(Scanner *scanner) {
void scanner_exit_quoted_context(Scanner *scanner) { void scanner_exit_quoted_context(Scanner *scanner) {
scanner->quoted_context_depth--; scanner->quoted_context_depth--;
scanner->in_quoted_context = false; scanner->in_quoted_context = false;
// check if we are reentering a nested template interpolation
if (scanner->template_interpolation_depth > 0) { if (scanner->template_interpolation_depth > 0) {
scanner->in_template_interpolation = true; scanner->in_template_interpolation = true;
} }
@@ -102,6 +100,7 @@ bool scanner_scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
} }
while (iswspace(lexer->lookahead) && !scanner->in_quoted_context) skip(lexer); while (iswspace(lexer->lookahead) && !scanner->in_quoted_context) skip(lexer);
// manage quoted context // manage quoted context
if (valid_symbols[QUOTED_TEMPLATE_START] && lexer->lookahead == '"') { if (valid_symbols[QUOTED_TEMPLATE_START] && lexer->lookahead == '"') {
scanner_enter_quoted_context(scanner); scanner_enter_quoted_context(scanner);
@@ -112,6 +111,8 @@ bool scanner_scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
return accept_and_advance(lexer, QUOTED_TEMPLATE_END); return accept_and_advance(lexer, QUOTED_TEMPLATE_END);
} }
// manage template interpolations
if (valid_symbols[TEMPLATE_INTERPOLATION_START] && lexer->lookahead == '$') { if (valid_symbols[TEMPLATE_INTERPOLATION_START] && lexer->lookahead == '$') {
advance(lexer); advance(lexer);
if (lexer->lookahead == '{') { if (lexer->lookahead == '{') {
@@ -130,12 +131,12 @@ bool scanner_scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
return accept_inplace(lexer, TEMPLATE_LITERAL_CHUNK); return accept_inplace(lexer, TEMPLATE_LITERAL_CHUNK);
} }
} }
if (valid_symbols[TEMPLATE_INTERPOLATION_END] && lexer->lookahead == '}') { if (valid_symbols[TEMPLATE_INTERPOLATION_END] && lexer->lookahead == '}') {
scanner_exit_interpolation_context(scanner); scanner_exit_interpolation_context(scanner);
return accept_and_advance(lexer, TEMPLATE_INTERPOLATION_END); return accept_and_advance(lexer, TEMPLATE_INTERPOLATION_END);
} }
// handle escape sequences in direct surrounding quoted contexts // handle escape sequences in direct surrounding quoted contexts
if (valid_symbols[TEMPLATE_LITERAL_CHUNK] && scanner->in_quoted_context) { if (valid_symbols[TEMPLATE_LITERAL_CHUNK] && scanner->in_quoted_context) {
switch (lexer->lookahead) { switch (lexer->lookahead) {