diff --git a/src/toolsrc/lex.c b/src/toolsrc/lex.c index 8c72b0c..cded50d 100755 --- a/src/toolsrc/lex.c +++ b/src/toolsrc/lex.c @@ -234,16 +234,18 @@ t_token scan(void) scanpos += 4; } } - else if (scanpos[0] == '\"') + else if ((scanpos[0] & 0x7F) == '\"') // Hack for string quote char in case we have to rewind later { - char *scanshift; + char *scanshift, quotechar; int scanoffset; /* * String constant. */ + quotechar = scanpos[0]; + *scanpos |= 0x80; // Set high bit in case of rewind scantoken = STRING_TOKEN; constval = (long)++scanpos; - while (*scanpos && *scanpos != '\"') + while (*scanpos && *scanpos != quotechar) { if (*scanpos == '\\') { @@ -288,11 +290,12 @@ t_token scan(void) } scanpos++; } - if (!*scanpos++) + if (!*scanpos) { parse_error("Unterminated string"); return (-1); } + *scanpos++ |= 0x80; // Set high bit in case of rewind } else { diff --git a/src/toolsrc/parse.c b/src/toolsrc/parse.c index a9aeb2f..d3191cd 100755 --- a/src/toolsrc/parse.c +++ b/src/toolsrc/parse.c @@ -501,7 +501,7 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth) if (stackdepth) *stackdepth = cfnvals; cfnvals = 1; - type &= ~FUNC_TYPE; + type &= ~(FUNC_TYPE | VAR_TYPE); } else if (scantoken == OPEN_BRACKET_TOKEN) { @@ -556,7 +556,7 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth) *stackdepth = cfnvals; type &= ~FUNC_TYPE; } - else if (type & VAR_TYPE) + else if (type & (VAR_TYPE | PTR_TYPE)) { /* * Pointer dereference