qbe

Internal scc patchset buffer for QBE
Log | Files | Refs | README | LICENSE

commit 4beee73fd38818a287c00087d3d1e3cf2a3ccfa5
parent 5b8b78f2f1d4ad7d82ac1c92c9aa00d01c343f32
Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu>
Date:   Sun,  4 Oct 2015 15:17:58 -0400

update miniyacc

Diffstat:
Mminic/yacc.c | 27++++++++++++++++++---------
1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/minic/yacc.c b/minic/yacc.c @@ -851,7 +851,7 @@ nexttk() char * cpycode() { - int c, nest, len, pos; + int c, nest, in, len, pos; char *s; len = 64; @@ -859,17 +859,26 @@ cpycode() s[0] = '{'; pos = 1; nest = 1; + in = 0; while (nest) { c = fgetc(fin); - if (c == '{') - nest++; - if (c == '}') - nest--; - if (c == EOF) - die("syntax error, unclosed code block"); - if (c == '\n') - lineno++; + if (in) { + if (c == in) + if (s[pos-1] != '\\') + in = 0; + } else { + if (c == '"' || c == '\'') + in = c; + if (c == '{') + nest++; + if (c == '}') + nest--; + if (c == EOF) + die("syntax error, unclosed code block"); + if (c == '\n') + lineno++; + } if (pos>=len) if (!(s=realloc(s, len=2*len+1))) die("out of memory");