From f82ac2b966bdcaa983e0016190623742c38e39f1 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 30 Jul 2017 18:02:07 -0700 Subject: listener: handle incomplete buf literals. * parser.c (is_balanced_line): Handle #b'...' syntax with some new states and transitions. --- parser.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/parser.c b/parser.c index 3597c0e9..d09e4dea 100644 --- a/parser.c +++ b/parser.c @@ -933,7 +933,8 @@ static int is_balanced_line(const char *line, void *ctx) { enum state { ST_START, ST_CMNT, ST_PAR, ST_BKT, ST_BRC, ST_HASH, - ST_LIT, ST_QLIT, ST_RGX, ST_CHR, ST_ESC, ST_AT + ST_LIT, ST_QLIT, ST_RGX, ST_CHR, ST_ESC, ST_AT, + ST_HASH_B, ST_BUF }; int count[32], sp = 0; enum state state[32]; @@ -1007,6 +1008,9 @@ static int is_balanced_line(const char *line, void *ctx) case '/': state[sp] = ST_RGX; break; + case 'b': + state[sp] = ST_HASH_B; + break; case ';': --sp; break; @@ -1069,6 +1073,24 @@ static int is_balanced_line(const char *line, void *ctx) sp--; break; } + break; + case ST_HASH_B: + switch (ch) { + case '\'': + state[sp] = ST_BUF; + break; + default: + sp--; + break; + } + break; + case ST_BUF: + switch (ch) { + case '\'': + sp--; + break; + } + break; } } -- cgit v1.2.3