guix: toml: Fix parsing empty strings in arrays.

Change-Id: Id14d4008391a01820ade754fa9c2ca8e88b8c7f9
This commit is contained in:
Lars-Dominik Braun 2024-05-04 09:43:11 +02:00 committed by Sharlatan Hellseher
parent b59cdd59eb
commit 63cb43d56c
No known key found for this signature in database
GPG key ID: 76D727BFF62CD2B5
2 changed files with 36 additions and 6 deletions

View file

@ -97,7 +97,7 @@ (define-peg-pattern string all (or ml-basic-string
;; Basic String
(define-peg-pattern basic-string body (and (ignore "\"")
(* basic-char)
(or (+ basic-char) "")
(ignore "\"")))
(define-peg-pattern basic-char body (or basic-unescaped escaped))
(define-peg-pattern basic-unescaped body (or wschar
@ -118,7 +118,9 @@ (define-peg-pattern escaped all (and
(define-peg-pattern ml-basic-string body (and
ml-basic-string-delim
(? ignore-newline)
ml-basic-body
;; Force the result of the empty string
;; to be a string, not no token.
(and ml-basic-body "")
ml-basic-string-delim))
(define-peg-pattern ml-basic-string-delim none "\"\"\"")
(define-peg-pattern ml-basic-body body (and
@ -145,7 +147,7 @@ (define-peg-pattern mlb-escaped-nl none (and "\\" ws newline
;; Literal String
(define-peg-pattern literal-string body (and (ignore "'")
(* literal-char)
(or (+ literal-char) "")
(ignore "'")))
(define-peg-pattern literal-char body (or "\x09"
(range #\x20 #\x26)
@ -156,7 +158,9 @@ (define-peg-pattern literal-char body (or "\x09"
(define-peg-pattern ml-literal-string body (and
ml-literal-string-delim
(? ignore-newline)
ml-literal-body
;; Force the result of the empty string
;; to be a string, not no token.
(and ml-literal-body "")
ml-literal-string-delim))
(define-peg-pattern ml-literal-string-delim none "'''")
(define-peg-pattern ml-literal-body body (and
@ -475,4 +479,3 @@ (define (parse-toml-file file)
"Parse and evaluate toml document from file FILE."
(parse-toml (call-with-input-file file get-string-all)))

View file

@ -305,6 +305,33 @@ (define-module (test-toml)
2, # this is ok
]"))
(test-equal "parse-toml: Arrays of empty strings"
'(("empty1" "")
("empty2" "" "")
("empty3" "" "" "")
("emptyraw1" "")
("emptyraw2" "" "")
("emptyraw3" "" "" "")
("emptyml1" "")
("emptyml2" "" "")
("emptyml3" "" "" "")
("emptyrawml1" "")
("emptyrawml2" "" "")
("emptyrawml3" "" "" ""))
(parse-toml "empty1 = [ \"\" ]
empty2 = [ \"\", \"\" ]
empty3 = [ \"\", \"\", \"\" ]
emptyraw1 = [ '' ]
emptyraw2 = [ '', '' ]
emptyraw3 = [ '', '', '' ]
emptyml1 = [ \"\"\"\"\"\" ]
emptyml2 = [ \"\"\"\"\"\", \"\"\"\"\"\" ]
emptyml3 = [ \"\"\"\"\"\", \"\"\"\"\"\", \"\"\"\"\"\" ]
emptyrawml1 = [ '''''' ]
emptyrawml2 = [ '''''', '''''' ]
emptyrawml3 = [ '''''', '''''', '''''' ]
"))
(test-equal "parse-toml: Tables"
'(("table-1" ("key1" . "some string")
("key2" . 123))