append_yylval_tzString should always evaluate its argument

Fixes #762
This commit is contained in:
Rangi
2021-02-23 23:25:58 -05:00
committed by Rangi
parent 1f579deaff
commit 63d15ac8c9
4 changed files with 28 additions and 2 deletions

View File

@@ -1455,15 +1455,16 @@ static char const *readInterpolation(void)
}
#define append_yylval_tzString(c) do { \
char v = (c); /* Evaluate c exactly once in case it has side effects. */ \
if (i < sizeof(yylval.tzString)) \
yylval.tzString[i++] = (c); \
yylval.tzString[i++] = v; \
} while (0)
static size_t appendEscapedSubstring(char const *str, size_t i)
{
/* Copy one extra to flag overflow */
while (*str) {
int c = *str++;
char c = *str++;
/* Escape characters that need escaping */
switch (c) {

View File

@@ -0,0 +1,13 @@
println """This paragraph has exactly 257--that's two hundred and
fifty-seven--characters altogether. That's just enough for its last
two characters to be truncated by rgbasm's lexer, since it can't
handle more than 255-character strings. The final two won't print: !?"""
mac: MACRO
println "\1" ; x1
println "\1\1\1\1\1\1" ; x6
ENDM
mac Hello! ; 6x6 = 36
mac This sentence spans forty-three characters. ; 43x6 = 258

View File

@@ -0,0 +1,4 @@
warning: long-string-constant.asm(5): [-Wlong-string]
String constant too long
warning: long-string-constant.asm(13) -> long-string-constant.asm::mac(9): [-Wlong-string]
String constant too long

View File

@@ -0,0 +1,8 @@
This paragraph has exactly 257--that's two hundred and
fifty-seven--characters altogether. That's just enough for its last
two characters to be truncated by rgbasm's lexer, since it can't
handle more than 255-character strings. The final two won't print:
Hello!
Hello!Hello!Hello!Hello!Hello!Hello!
This sentence spans forty-three characters.
This sentence spans forty-three characters.This sentence spans forty-three characters.This sentence spans forty-three characters.This sentence spans forty-three characters.This sentence spans forty-three characters.This sentence spans forty-three characte