From 54b73f7f9ceae6e4b5ef63cb85f99398f876568a Mon Sep 17 00:00:00 2001 From: Olaf Seibert Date: Thu, 18 Feb 2021 22:49:52 +0100 Subject: [PATCH] Attempt bracketing checking. Too bad we can't issue a diagnostic here now; we just return failure and the caller will probably next try a whitespace delimited string next. --- parse.c | 14 ++++++--- tests/test-macro-comma.lst.ok | 57 ++++++++++++++++++++++++++--------- tests/test-macro-comma.mac | 21 +++++++++++++ 3 files changed, 73 insertions(+), 19 deletions(-) diff --git a/parse.c b/parse.c index ba264ed..fb67eb3 100644 --- a/parse.c +++ b/parse.c @@ -831,12 +831,18 @@ int brackrange( return FALSE; } + /* + * If we see a newline here, the proper terminator must be missing. + * Don't use EOL() to check: it recognizes ';' too. + * Unfortunately we can't issue a diagnostic here. + */ + if (!cp[len] || cp[len] == '\n') { + return FALSE; + } + *length = len; if (endp) { - *endp = cp + len; - if (**endp && **endp != '\n') { - ++*endp; /* skip over ending delimiter */ - } + *endp = cp + len + 1; /* skip over ending delimiter */ } return 1; diff --git a/tests/test-macro-comma.lst.ok b/tests/test-macro-comma.lst.ok index 76a01e4..b793014 100644 --- a/tests/test-macro-comma.lst.ok +++ b/tests/test-macro-comma.lst.ok @@ -1,28 +1,55 @@ - 1 .macro tstarg a1,a2,a3,a4 - 2 .narg label - 3 .endm - 4 - 5 000000 start: tstarg ; 0 args + 1 ;;;;; + 2 ; + 3 ; Test that commas create empty macro arguments. + 4 ; + 5 .macro tstarg a1,a2,a3,a4 + 6 .narg label + 7 .endm + 8 + 9 000000 start: tstarg ; 0 args 1 000000 .narg label - 6 000000 tstarg 123 ; 1 arg + 10 000000 tstarg 123 ; 1 arg 1 000001 .narg label - 7 000000 tstarg 1, ; 2 args + 11 000000 tstarg 1, ; 2 args 1 000002 .narg label - 8 000000 tstarg ,2 ; 2 args + 12 000000 tstarg ,2 ; 2 args 1 000002 .narg label - 9 000000 tstarg , ; 2 args + 13 000000 tstarg , ; 2 args 1 000002 .narg label - 10 000000 tstarg ,, ; 3 args + 14 000000 tstarg ,, ; 3 args 1 000003 .narg label - 11 000000 tstarg 1,, ; 3 args + 15 000000 tstarg 1,, ; 3 args 1 000003 .narg label - 12 000000 tstarg ,,3 ; 3 args + 16 000000 tstarg ,,3 ; 3 args 1 000003 .narg label - 13 000000 tstarg 1,,3 ; 3 args + 17 000000 tstarg 1,,3 ; 3 args 1 000003 .narg label - 14 000000 tstarg 1,2,3 ; 3 args + 18 000000 tstarg 1,2,3 ; 3 args 1 000003 .narg label - 14 + 19 + 20 ;;;;; + 21 ; + 22 ; Test what happens if we have invalid bracketed strings. + 23 ; For now we fall back to treating them like unbracketed strings, + 24 ; that will hopefully alert the user the best. + 25 ; + 26 .macro braket arg + 27 ; arg + 28 .endm + 29 + 30 000000 braket + 1 ; plain + 31 000000 braket ^/simple/ + 1 ; simple + 32 000000 braket + 1 ; + 35 000000 braket string + 1 ; + 35 Symbol table diff --git a/tests/test-macro-comma.mac b/tests/test-macro-comma.mac index 3c94fb1..d2783b4 100644 --- a/tests/test-macro-comma.mac +++ b/tests/test-macro-comma.mac @@ -1,3 +1,7 @@ +;;;;; +; +; Test that commas create empty macro arguments. +; .macro tstarg a1,a2,a3,a4 .narg label .endm @@ -12,3 +16,20 @@ start: tstarg ; 0 args tstarg ,,3 ; 3 args tstarg 1,,3 ; 3 args tstarg 1,2,3 ; 3 args + +;;;;; +; +; Test what happens if we have invalid bracketed strings. +; For now we fall back to treating them like unbracketed strings, +; that will hopefully alert the user the best. +; + .macro braket arg + ; arg + .endm + + braket + braket ^/simple/ + braket + braket string