diff --git a/lib/datalog/scoreboard.json b/lib/datalog/scoreboard.json index 36aea08c..6c953f66 100644 --- a/lib/datalog/scoreboard.json +++ b/lib/datalog/scoreboard.json @@ -1,10 +1,10 @@ { "lang": "datalog", - "total_passed": 248, + "total_passed": 249, "total_failed": 0, - "total": 248, + "total": 249, "suites": [ - {"name":"tokenize","passed":26,"failed":0,"total":26}, + {"name":"tokenize","passed":27,"failed":0,"total":27}, {"name":"parse","passed":22,"failed":0,"total":22}, {"name":"unify","passed":28,"failed":0,"total":28}, {"name":"eval","passed":36,"failed":0,"total":36}, @@ -16,5 +16,5 @@ {"name":"magic","passed":34,"failed":0,"total":34}, {"name":"demo","passed":21,"failed":0,"total":21} ], - "generated": "2026-05-10T20:55:23+00:00" + "generated": "2026-05-10T20:59:17+00:00" } diff --git a/lib/datalog/scoreboard.md b/lib/datalog/scoreboard.md index 53252867..d40d724f 100644 --- a/lib/datalog/scoreboard.md +++ b/lib/datalog/scoreboard.md @@ -1,10 +1,10 @@ # datalog scoreboard -**248 / 248 passing** (0 failure(s)). +**249 / 249 passing** (0 failure(s)). | Suite | Passed | Total | Status | |-------|--------|-------|--------| -| tokenize | 26 | 26 | ok | +| tokenize | 27 | 27 | ok | | parse | 22 | 22 | ok | | unify | 28 | 28 | ok | | eval | 36 | 36 | ok | diff --git a/lib/datalog/tests/tokenize.sx b/lib/datalog/tests/tokenize.sx index 920c7257..7ab73212 100644 --- a/lib/datalog/tests/tokenize.sx +++ b/lib/datalog/tests/tokenize.sx @@ -118,6 +118,16 @@ "block comment" (dl-tk-types (dl-tokenize "/* a\nb */ x.")) (list "atom" "punct" "eof")) + ;; Unterminated block comment must raise — previously it was + ;; silently consumed to EOF. + (dl-tk-test! + "unterminated block comment raises" + (let ((threw false)) + (do + (guard (e (#t (set! threw true))) + (dl-tokenize "/* unclosed comment")) + threw)) + true) (dl-tk-test! "whitespace" (dl-tk-types (dl-tokenize " foo ,\t bar .")) diff --git a/lib/datalog/tokenizer.sx b/lib/datalog/tokenizer.sx index b169b64e..5b7b48d2 100644 --- a/lib/datalog/tokenizer.sx +++ b/lib/datalog/tokenizer.sx @@ -63,7 +63,9 @@ (fn () (cond - ((>= pos src-len) nil) + ((>= pos src-len) + (error (str "Tokenizer: unterminated block comment " + "(started at position " pos ")"))) ((and (= (cur) "*") (< (+ pos 1) src-len) (= (dl-peek 1) "/")) (advance! 2)) (else (do (advance! 1) (skip-block-comment!))))))