1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-09-30 07:57:05 +00:00

Fix some pointer to pointer problems and scan_rewind with string quotes

This commit is contained in:
David Schmenk 2017-06-06 12:27:59 -07:00
parent 47ed2014e3
commit def57dc263
2 changed files with 9 additions and 6 deletions

View File

@ -234,16 +234,18 @@ t_token scan(void)
scanpos += 4; 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; int scanoffset;
/* /*
* String constant. * String constant.
*/ */
quotechar = scanpos[0];
*scanpos |= 0x80; // Set high bit in case of rewind
scantoken = STRING_TOKEN; scantoken = STRING_TOKEN;
constval = (long)++scanpos; constval = (long)++scanpos;
while (*scanpos && *scanpos != '\"') while (*scanpos && *scanpos != quotechar)
{ {
if (*scanpos == '\\') if (*scanpos == '\\')
{ {
@ -288,11 +290,12 @@ t_token scan(void)
} }
scanpos++; scanpos++;
} }
if (!*scanpos++) if (!*scanpos)
{ {
parse_error("Unterminated string"); parse_error("Unterminated string");
return (-1); return (-1);
} }
*scanpos++ |= 0x80; // Set high bit in case of rewind
} }
else else
{ {

View File

@ -501,7 +501,7 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
if (stackdepth) if (stackdepth)
*stackdepth = cfnvals; *stackdepth = cfnvals;
cfnvals = 1; cfnvals = 1;
type &= ~FUNC_TYPE; type &= ~(FUNC_TYPE | VAR_TYPE);
} }
else if (scantoken == OPEN_BRACKET_TOKEN) else if (scantoken == OPEN_BRACKET_TOKEN)
{ {
@ -556,7 +556,7 @@ t_opseq *parse_value(t_opseq *codeseq, int rvalue, int *stackdepth)
*stackdepth = cfnvals; *stackdepth = cfnvals;
type &= ~FUNC_TYPE; type &= ~FUNC_TYPE;
} }
else if (type & VAR_TYPE) else if (type & (VAR_TYPE | PTR_TYPE))
{ {
/* /*
* Pointer dereference * Pointer dereference