ref: 63d15ac8c901cab95c3d37abad2a97c7020a61d7
parent: 1f579deaffe0d3d1035d46ac3bb2cbbf0002c9a4
author: Rangi <[email protected]>
date: Tue Feb 23 18:25:58 EST 2021
append_yylval_tzString should always evaluate its argument Fixes #762
--- a/src/asm/lexer.c
+++ b/src/asm/lexer.c
@@ -1455,8 +1455,9 @@
}
#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)
@@ -1463,7 +1464,7 @@
{
/* Copy one extra to flag overflow */
while (*str) {
- int c = *str++;
+ char c = *str++;
/* Escape characters that need escaping */
switch (c) {
--- /dev/null
+++ b/test/asm/long-string-constant.asm
@@ -1,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
--- /dev/null
+++ b/test/asm/long-string-constant.err
@@ -1,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
--- /dev/null
+++ b/test/asm/long-string-constant.out
@@ -1,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