mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
@@ -800,7 +800,7 @@ static int peekInternal(uint8_t distance)
|
||||
|
||||
/* forward declarations for peek */
|
||||
static void shiftChar(void);
|
||||
static char const *readInterpolation(void);
|
||||
static char const *readInterpolation(unsigned int depth);
|
||||
|
||||
static int peek(void)
|
||||
{
|
||||
@@ -845,7 +845,7 @@ restart:
|
||||
} else if (c == '{' && !lexerState->disableInterpolation) {
|
||||
/* If character is an open brace, do symbol interpolation */
|
||||
shiftChar();
|
||||
char const *ptr = readInterpolation();
|
||||
char const *ptr = readInterpolation(0);
|
||||
|
||||
if (ptr) {
|
||||
beginExpansion(ptr, false, ptr);
|
||||
@@ -1258,8 +1258,11 @@ static int readIdentifier(char firstChar)
|
||||
|
||||
/* Functions to read strings */
|
||||
|
||||
static char const *readInterpolation(void)
|
||||
static char const *readInterpolation(unsigned int depth)
|
||||
{
|
||||
if (depth >= nMaxRecursionDepth)
|
||||
fatalerror("Recursion limit (%zu) exceeded\n", nMaxRecursionDepth);
|
||||
|
||||
char symName[MAXSYMLEN + 1];
|
||||
size_t i = 0;
|
||||
struct FormatSpec fmt = fmt_NewSpec();
|
||||
@@ -1269,7 +1272,7 @@ static char const *readInterpolation(void)
|
||||
|
||||
if (c == '{') { /* Nested interpolation */
|
||||
shiftChar();
|
||||
char const *ptr = readInterpolation();
|
||||
char const *ptr = readInterpolation(depth + 1);
|
||||
|
||||
if (ptr) {
|
||||
beginExpansion(ptr, false, ptr);
|
||||
@@ -1491,7 +1494,7 @@ static void readString(void)
|
||||
// We'll be exiting the string scope, so re-enable expansions
|
||||
// (Not interpolations, since they're handled by the function itself...)
|
||||
lexerState->disableMacroArgs = false;
|
||||
char const *ptr = readInterpolation();
|
||||
char const *ptr = readInterpolation(0);
|
||||
|
||||
if (ptr)
|
||||
while (*ptr)
|
||||
@@ -1641,7 +1644,7 @@ static size_t appendStringLiteral(size_t i)
|
||||
// We'll be exiting the string scope, so re-enable expansions
|
||||
// (Not interpolations, since they're handled by the function itself...)
|
||||
lexerState->disableMacroArgs = false;
|
||||
char const *ptr = readInterpolation();
|
||||
char const *ptr = readInterpolation(0);
|
||||
|
||||
if (ptr)
|
||||
i = appendEscapedSubstring(ptr, i);
|
||||
|
||||
6
test/asm/interpolation-recursion.asm
Normal file
6
test/asm/interpolation-recursion.asm
Normal file
@@ -0,0 +1,6 @@
|
||||
recurse EQUS "\{recurse\} "
|
||||
{recurse}
|
||||
|
||||
; FIXME: also handle the following:
|
||||
; recurse EQUS "\{recurse\}"
|
||||
; {recurse}
|
||||
67
test/asm/interpolation-recursion.err
Normal file
67
test/asm/interpolation-recursion.err
Normal file
@@ -0,0 +1,67 @@
|
||||
FATAL: interpolation-recursion.asm(2):
|
||||
Recursion limit (64) exceeded
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
while expanding symbol "{recurse} "
|
||||
0
test/asm/interpolation-recursion.out
Normal file
0
test/asm/interpolation-recursion.out
Normal file
3
test/asm/nested-interpolation-recursion.asm
Normal file
3
test/asm/nested-interpolation-recursion.asm
Normal file
@@ -0,0 +1,3 @@
|
||||
def s equs "s"
|
||||
; 65 nested {}s, recursion limit is 64
|
||||
println "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{s}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
|
||||
2
test/asm/nested-interpolation-recursion.err
Normal file
2
test/asm/nested-interpolation-recursion.err
Normal file
@@ -0,0 +1,2 @@
|
||||
FATAL: nested-interpolation-recursion.asm(3):
|
||||
Recursion limit (64) exceeded
|
||||
0
test/asm/nested-interpolation-recursion.out
Normal file
0
test/asm/nested-interpolation-recursion.out
Normal file
Reference in New Issue
Block a user