From 694075e840a4c080ed23aa7a02a4ac55d87a7101 Mon Sep 17 00:00:00 2001 From: ISSOtm Date: Thu, 10 Oct 2019 14:58:17 +0200 Subject: [PATCH 1/2] Allow nested bracketed symbols Fixes #320 --- src/asm/lexer.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/asm/lexer.c b/src/asm/lexer.c index 5e82352a..ee391b43 100644 --- a/src/asm/lexer.c +++ b/src/asm/lexer.c @@ -666,6 +666,11 @@ size_t yylex_ReadBracketedSymbol(char *dest, size_t index) i += length; else fatalerror("Illegal character escape '%c'", ch); + } else if (ch == '{') { + /* Handle nested symbols */ + ++pLexBuffer; + i += yylex_ReadBracketedSymbol(sym, i); + --pLexBuffer; } else if (ch == ':' && !mode) { /* Only grab 1st colon */ /* Use a whitelist of modes, which does prevent the * use of some features such as precision, From cdd82009369ff348ccce7b40267c5079c8439679 Mon Sep 17 00:00:00 2001 From: ISSOtm Date: Thu, 10 Oct 2019 15:00:59 +0200 Subject: [PATCH 2/2] Add test for nested brackets --- test/asm/nested-brackets.asm | 5 +++++ test/asm/nested-brackets.out | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 test/asm/nested-brackets.asm create mode 100644 test/asm/nested-brackets.out diff --git a/test/asm/nested-brackets.asm b/test/asm/nested-brackets.asm new file mode 100644 index 00000000..0823286a --- /dev/null +++ b/test/asm/nested-brackets.asm @@ -0,0 +1,5 @@ +STRING equs "OK" +WRAPPER equs "TRIN" + PRINTT "{S{WRAPPER}G}\n" + + PRINTT "{S{WRAPPER}G" diff --git a/test/asm/nested-brackets.out b/test/asm/nested-brackets.out new file mode 100644 index 00000000..feea079a --- /dev/null +++ b/test/asm/nested-brackets.out @@ -0,0 +1,3 @@ +ERROR: nested-brackets.asm(5): + Missing } +OK