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.
This commit is contained in:
Olaf Seibert 2021-02-18 22:49:52 +01:00
parent 289860e539
commit 54b73f7f9c
3 changed files with 73 additions and 19 deletions

14
parse.c
View File

@ -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;

View File

@ -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 <plain>
1 ; plain
31 000000 braket ^/simple/
1 ; simple
32 000000 braket <broken
1 ; <broken
33 000000 braket ^/broken
1 ; ^/broken
34 000000 braket <bro<ken>
1 ; <bro<ken>
35 000000 braket <bro<ken> string
1 ; <bro<ken>
35
Symbol table

View File

@ -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 <plain>
braket ^/simple/
braket <broken
braket ^/broken
braket <bro<ken>
braket <bro<ken> string