1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-08-21 21:29:08 +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;
}
}
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
{

View File

@ -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