disallow empty application; rename regexp-match/fail-without-reading to regexp-try-match
svn: r8152
This commit is contained in:
parent
92ac61e806
commit
1d8b21f53b
|
@ -168,7 +168,7 @@ A test case:
|
||||||
(let ([new-tag (make-hypertag name pos)])
|
(let ([new-tag (make-hypertag name pos)])
|
||||||
(set! hypertags-list
|
(set! hypertags-list
|
||||||
(let insert-loop ([tags-left hypertags-list])
|
(let insert-loop ([tags-left hypertags-list])
|
||||||
(cond [(null? tags-left)(cons new-tag ())]
|
(cond [(null? tags-left)(cons new-tag '())]
|
||||||
[(> pos (hypertag-position (car tags-left)))
|
[(> pos (hypertag-position (car tags-left)))
|
||||||
(cons new-tag tags-left)]
|
(cons new-tag tags-left)]
|
||||||
[else (cons (car tags-left)
|
[else (cons (car tags-left)
|
||||||
|
|
|
@ -3637,7 +3637,7 @@ module browser threading seems wrong.
|
||||||
;; lambda-snipclass is for backwards compatibility
|
;; lambda-snipclass is for backwards compatibility
|
||||||
;;
|
;;
|
||||||
(define lambda-snipclass
|
(define lambda-snipclass
|
||||||
(make-object (class snip-class% ()
|
(make-object (class snip-class%
|
||||||
(define/override (read p) (make-object string-snip% "λ"))
|
(define/override (read p) (make-object string-snip% "λ"))
|
||||||
(super-new))))
|
(super-new))))
|
||||||
(send lambda-snipclass set-version 1)
|
(send lambda-snipclass set-version 1)
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
(set! can?-callbacks
|
(set! can?-callbacks
|
||||||
(let loop ([cb-list can?-callbacks])
|
(let loop ([cb-list can?-callbacks])
|
||||||
(cond
|
(cond
|
||||||
[(null? cb-list) ()]
|
[(null? cb-list) '()]
|
||||||
[(eq? cb (car cb-list)) (cdr cb-list)]
|
[(eq? cb (car cb-list)) (cdr cb-list)]
|
||||||
[else (cons (car cb-list) (loop (cdr cb-list)))]))))))
|
[else (cons (car cb-list) (loop (cdr cb-list)))]))))))
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
(set! on-callbacks
|
(set! on-callbacks
|
||||||
(let loop ([cb-list on-callbacks])
|
(let loop ([cb-list on-callbacks])
|
||||||
(cond
|
(cond
|
||||||
[(null? cb-list) ()]
|
[(null? cb-list) '()]
|
||||||
[(eq? cb (car cb-list)) (cdr cb-list)]
|
[(eq? cb (car cb-list)) (cdr cb-list)]
|
||||||
[else (cons (car cb-list) (loop (cdr cb-list)))]))))))
|
[else (cons (car cb-list) (loop (cdr cb-list)))]))))))
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
regexp-match-peek-positions*
|
regexp-match-peek-positions*
|
||||||
regexp-split
|
regexp-split
|
||||||
regexp-match-exact?
|
regexp-match-exact?
|
||||||
regexp-match/fail-without-reading)
|
regexp-try-match)
|
||||||
"kw.ss")
|
"kw.ss")
|
||||||
|
|
||||||
(provide string-lowercase!
|
(provide string-lowercase!
|
||||||
|
@ -17,7 +17,8 @@
|
||||||
read-from-string
|
read-from-string
|
||||||
read-from-string-all
|
read-from-string-all
|
||||||
expr->string
|
expr->string
|
||||||
(all-from scheme/base)
|
(all-from-except scheme/base regexp-try-match)
|
||||||
|
(rename regexp-try-match regexp-match/fail-without-reading)
|
||||||
glob->regexp)
|
glob->regexp)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -605,8 +605,14 @@
|
||||||
#f
|
#f
|
||||||
"illegal use"
|
"illegal use"
|
||||||
stx)
|
stx)
|
||||||
|
(if (and (pair? l)
|
||||||
|
(null? (cdr l)))
|
||||||
|
(raise-syntax-error
|
||||||
|
#f
|
||||||
|
"missing procedure expression; probably originally (), which is an illegal empty application"
|
||||||
|
stx)
|
||||||
(quasisyntax/loc stx
|
(quasisyntax/loc stx
|
||||||
(#%app . #,(cdr (syntax-e stx)))))
|
(#%app . #,(cdr (syntax-e stx))))))
|
||||||
;; keyword app (maybe)
|
;; keyword app (maybe)
|
||||||
(let ([exprs
|
(let ([exprs
|
||||||
(let ([kw-ht (make-hash-table)])
|
(let ([kw-ht (make-hash-table)])
|
||||||
|
|
|
@ -130,7 +130,7 @@
|
||||||
(raise-type-error who "list" list))
|
(raise-type-error who "list" list))
|
||||||
(let loop ([list list])
|
(let loop ([list list])
|
||||||
(cond
|
(cond
|
||||||
[(null? list) ()]
|
[(null? list) null]
|
||||||
[(equal? item (car list)) (cdr list)]
|
[(equal? item (car list)) (cdr list)]
|
||||||
[else (cons (car list) (loop (cdr list)))])))
|
[else (cons (car list) (loop (cdr list)))])))
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
regexp-match-peek-positions*
|
regexp-match-peek-positions*
|
||||||
regexp-split
|
regexp-split
|
||||||
regexp-match-exact?
|
regexp-match-exact?
|
||||||
regexp-match/fail-without-reading)
|
regexp-try-match)
|
||||||
|
|
||||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
@ -59,12 +59,12 @@
|
||||||
(regexp-replace* #rx#"[&\\]" s #"\\\\&")
|
(regexp-replace* #rx#"[&\\]" s #"\\\\&")
|
||||||
(regexp-replace* #rx"[&\\]" s "\\\\&"))))
|
(regexp-replace* #rx"[&\\]" s "\\\\&"))))
|
||||||
|
|
||||||
(define (regexp-match/fail-without-reading pattern input-port [start-k 0] [end-k #f] [out #f])
|
(define (regexp-try-match pattern input-port [start-k 0] [end-k #f] [out #f])
|
||||||
(unless (input-port? input-port)
|
(unless (input-port? input-port)
|
||||||
(raise-type-error 'regexp-match/fail-without-reading
|
(raise-type-error 'regexp-try-match
|
||||||
"input port" input-port))
|
"input port" input-port))
|
||||||
(unless (or (not out) (output-port? out))
|
(unless (or (not out) (output-port? out))
|
||||||
(raise-type-error 'regexp-match/fail-without-reading
|
(raise-type-error 'regexp-try-match
|
||||||
"output port or #f" out))
|
"output port or #f" out))
|
||||||
(let ([m (regexp-match-peek-positions pattern input-port start-k end-k)])
|
(let ([m (regexp-match-peek-positions pattern input-port start-k end-k)])
|
||||||
(and m
|
(and m
|
||||||
|
|
|
@ -265,18 +265,17 @@ input port.
|
||||||
When matching an input port, a match failure reads up to
|
When matching an input port, a match failure reads up to
|
||||||
@scheme[end-pos] bytes (or end-of-file), even if @scheme[pattern]
|
@scheme[end-pos] bytes (or end-of-file), even if @scheme[pattern]
|
||||||
begins with a start-of-string @litchar{^}; see also
|
begins with a start-of-string @litchar{^}; see also
|
||||||
@scheme[regexp-match/fail-without-reading]. On success, all bytes up
|
@scheme[regexp-try-match]. On success, all bytes up to and including
|
||||||
to and including the match are eventually read from the port, but
|
the match are eventually read from the port, but matching proceeds by
|
||||||
matching proceeds by first peeking bytes from the port (using
|
first peeking bytes from the port (using @scheme[peek-bytes-avail!]),
|
||||||
@scheme[peek-bytes-avail!]), and then (re-)reading matching bytes to
|
and then (re-)reading matching bytes to discard them after the match
|
||||||
discard them after the match result is determined. Non-matching bytes
|
result is determined. Non-matching bytes may be read and discarded
|
||||||
may be read and discarded before the match is determined. The matcher
|
before the match is determined. The matcher peeks in blocking mode
|
||||||
peeks in blocking mode only as far as necessary to determine a match,
|
only as far as necessary to determine a match, but it may peek extra
|
||||||
but it may peek extra bytes to fill an internal buffer if immediately
|
bytes to fill an internal buffer if immediately available (i.e.,
|
||||||
available (i.e., without blocking). Greedy repeat operators in
|
without blocking). Greedy repeat operators in @scheme[pattern], such
|
||||||
@scheme[pattern], such as @litchar{*} or @litchar{+}, tend to force
|
as @litchar{*} or @litchar{+}, tend to force reading the entire
|
||||||
reading the entire content of the port (up to @scheme[end-pos]) to
|
content of the port (up to @scheme[end-pos]) to determine a match.
|
||||||
determine a match.
|
|
||||||
|
|
||||||
If the input port is read simultaneously by another thread, or if the
|
If the input port is read simultaneously by another thread, or if the
|
||||||
port is a custom port with inconsistent reading and peeking procedures
|
port is a custom port with inconsistent reading and peeking procedures
|
||||||
|
@ -324,7 +323,7 @@ port).
|
||||||
]}
|
]}
|
||||||
|
|
||||||
|
|
||||||
@defproc[(regexp-match/fail-without-reading
|
@defproc[(regexp-try-match
|
||||||
[pattern (or/c string? bytes? regexp? byte-regexp?)]
|
[pattern (or/c string? bytes? regexp? byte-regexp?)]
|
||||||
[input input-port?]
|
[input input-port?]
|
||||||
[start-pos nonnegative-exact-integer? 0]
|
[start-pos nonnegative-exact-integer? 0]
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(test '() 'null null)
|
(test '() 'null null)
|
||||||
(test '() 'null ())
|
(test '() 'null '())
|
||||||
|
|
||||||
(let ([f (lambda () #&7)])
|
(let ([f (lambda () #&7)])
|
||||||
(test #t eq? (f) (f)))
|
(test #t eq? (f) (f)))
|
||||||
|
|
|
@ -69,11 +69,11 @@
|
||||||
(test 'f object-name f)
|
(test 'f object-name f)
|
||||||
|
|
||||||
; Test class stuff ok when no name
|
; Test class stuff ok when no name
|
||||||
(test #t src-name? (object-name (class object% () (super-make-object))))
|
(test #t src-name? (object-name (class object% (super-make-object))))
|
||||||
(test #t src-name? (object-name (interface ())))
|
(test #t src-name? (object-name (interface ())))
|
||||||
|
|
||||||
; Test class stuff ok when name
|
; Test class stuff ok when name
|
||||||
(test 'class:c1 object-name (let ([c1 (class object% () (super-make-object))]) c1))
|
(test 'class:c1 object-name (let ([c1 (class object% (super-make-object))]) c1))
|
||||||
(test 'interface:i1 object-name (let ([i1 (interface ())]) i1))
|
(test 'interface:i1 object-name (let ([i1 (interface ())]) i1))
|
||||||
|
|
||||||
; Test unit stuff ok when no name
|
; Test unit stuff ok when no name
|
||||||
|
|
|
@ -1058,7 +1058,7 @@
|
||||||
(syntax-test #'(new x ("a" x)))
|
(syntax-test #'(new x ("a" x)))
|
||||||
|
|
||||||
(test #t object? (new object%))
|
(test #t object? (new object%))
|
||||||
(test #t object? (new (class object% () (init-field x) (super-instantiate ())) (x 1)))
|
(test #t object? (new (class object% (init-field x) (super-instantiate ())) (x 1)))
|
||||||
|
|
||||||
;; ------------------------------------------------------------
|
;; ------------------------------------------------------------
|
||||||
;; `field' tests
|
;; `field' tests
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
(quasi-read-style-printing #f)
|
(quasi-read-style-printing #f)
|
||||||
|
|
||||||
(define (xl) 1)
|
(define (xl) 1)
|
||||||
(define (xc) (class object% () (sequence (super-init))))
|
(define (xc) (class object% (sequence (super-init))))
|
||||||
|
|
||||||
(let ()
|
(let ()
|
||||||
(define-struct pctest (value constructor-sexp
|
(define-struct pctest (value constructor-sexp
|
||||||
|
@ -183,8 +183,8 @@
|
||||||
xl-ID-BETTER-NOT-BE-DEFINED)
|
xl-ID-BETTER-NOT-BE-DEFINED)
|
||||||
'(lambda () ...))
|
'(lambda () ...))
|
||||||
(make-same-test xc 'xc)
|
(make-same-test xc 'xc)
|
||||||
(make-same-test (letrec ([xc (class object% ())]) xc) '(class ...))
|
(make-same-test (letrec ([xc (class object%)]) xc) '(class ...))
|
||||||
(make-same-test (letrec ([xc-ID-BETTER-NOT-BE-DEFINED (class object% ())])
|
(make-same-test (letrec ([xc-ID-BETTER-NOT-BE-DEFINED (class object%)])
|
||||||
xc-ID-BETTER-NOT-BE-DEFINED)
|
xc-ID-BETTER-NOT-BE-DEFINED)
|
||||||
'(class ...))
|
'(class ...))
|
||||||
(make-same-test (lambda (x) x) '(lambda (a1) ...))
|
(make-same-test (lambda (x) x) '(lambda (a1) ...))
|
||||||
|
@ -212,7 +212,7 @@
|
||||||
(hash-table-put! ht 'x 1)
|
(hash-table-put! ht 'x 1)
|
||||||
ht)
|
ht)
|
||||||
'(hash-table ('x 1)))
|
'(hash-table ('x 1)))
|
||||||
(make-pctest (list 'a (box (list ())) (cons 1 '()))
|
(make-pctest (list 'a (box (list '())) (cons 1 '()))
|
||||||
'(list (quote a) (box (list empty)) (list 1))
|
'(list (quote a) (box (list empty)) (list 1))
|
||||||
'(list (quote a) (box (list empty)) (list 1))
|
'(list (quote a) (box (list empty)) (list 1))
|
||||||
'(list (quote a) (box (list empty)) (list 1))
|
'(list (quote a) (box (list empty)) (list 1))
|
||||||
|
@ -346,7 +346,7 @@
|
||||||
(test-not-shared 'x ''x)
|
(test-not-shared 'x ''x)
|
||||||
(test-shared (lambda (x) x) '(lambda (a1) ...))
|
(test-shared (lambda (x) x) '(lambda (a1) ...))
|
||||||
(test-shared (delay 1) '(delay ...))
|
(test-shared (delay 1) '(delay ...))
|
||||||
(test-shared (class object% ()) '(class ...))
|
(test-shared (class object%) '(class ...))
|
||||||
(test-shared (new (class object% (super-new))) '(instantiate (class ...) ...))
|
(test-shared (new (class object% (super-new))) '(instantiate (class ...) ...))
|
||||||
|
|
||||||
(test-shared "abc" "abc")
|
(test-shared "abc" "abc")
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
;; -- set up a timeout
|
;; -- set up a timeout
|
||||||
(thread (lambda ()
|
(thread (lambda ()
|
||||||
(sleep 600)
|
(sleep 600)
|
||||||
(fprintf err "\n\n~aTIMEOUT -- ABORTING!\n" (get-section-prefix))
|
(fprintf err "\n\n~aTIMEOUT -- ABORTING!\n" Section-prefix)
|
||||||
(exit 3)
|
(exit 3)
|
||||||
;; in case the above didn't work for some reason
|
;; in case the above didn't work for some reason
|
||||||
(sleep 60)
|
(sleep 60)
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
(lambda (thunk)
|
(lambda (thunk)
|
||||||
(when last-error
|
(when last-error
|
||||||
(fprintf real-error-port "~aERROR: ~a\n"
|
(fprintf real-error-port "~aERROR: ~a\n"
|
||||||
(get-section-prefix)
|
Section-prefix
|
||||||
(if (exn? last-error) (exn-message last-error) last-error))
|
(if (exn? last-error) (exn-message last-error) last-error))
|
||||||
(exit 2))))
|
(exit 2))))
|
||||||
(report-errs #t))
|
(report-errs #t))
|
||||||
|
|
|
@ -642,7 +642,7 @@
|
||||||
(let ((name1 'x) (name2 'y)) `(a `(b ,,name1 ,',name2 d) e)))
|
(let ((name1 'x) (name2 'y)) `(a `(b ,,name1 ,',name2 d) e)))
|
||||||
(test '(list 3 4) 'quasiquote (quasiquote (list (unquote (+ 1 2)) 4)))
|
(test '(list 3 4) 'quasiquote (quasiquote (list (unquote (+ 1 2)) 4)))
|
||||||
(test '`(list ,(+ 1 2) 4) 'quasiquote '(quasiquote (list (unquote (+ 1 2)) 4)))
|
(test '`(list ,(+ 1 2) 4) 'quasiquote '(quasiquote (list (unquote (+ 1 2)) 4)))
|
||||||
(test '(()) 'qq `((,@())))
|
(test '(()) 'qq `((,@'())))
|
||||||
(define x 5)
|
(define x 5)
|
||||||
(test '(quasiquote (unquote x)) 'qq ``,x)
|
(test '(quasiquote (unquote x)) 'qq ``,x)
|
||||||
(test '(quasiquote (unquote 5)) 'qq ``,,x)
|
(test '(quasiquote (unquote 5)) 'qq ``,,x)
|
||||||
|
@ -995,7 +995,8 @@
|
||||||
(+ 1 2)))
|
(+ 1 2)))
|
||||||
|
|
||||||
(test 3 '#%app (#%app + 1 2))
|
(test 3 '#%app (#%app + 1 2))
|
||||||
(test null '#%app (#%app))
|
(syntax-test #'())
|
||||||
|
(syntax-test #'(#%app))
|
||||||
|
|
||||||
(syntax-test #'#%top)
|
(syntax-test #'#%top)
|
||||||
(syntax-test #'(#%top 1))
|
(syntax-test #'(#%top 1))
|
||||||
|
|
|
@ -417,7 +417,7 @@
|
||||||
(test #t unit? (unit
|
(test #t unit? (unit
|
||||||
(import x)
|
(import x)
|
||||||
(export)
|
(export)
|
||||||
(class object% ()
|
(class object%
|
||||||
(field
|
(field
|
||||||
[x 10])
|
[x 10])
|
||||||
(set! x 5))))
|
(set! x 5))))
|
||||||
|
|
|
@ -334,6 +334,8 @@ with some syntactic and name changes.
|
||||||
|
|
||||||
* One-armed `if' is prohibited; use `when', instead.
|
* One-armed `if' is prohibited; use `when', instead.
|
||||||
|
|
||||||
|
* Empty applications, (), are disallowed, instead of producing '().
|
||||||
|
|
||||||
* Some popular procedures formerly in libraries have been moved into
|
* Some popular procedures formerly in libraries have been moved into
|
||||||
`scheme/base', including `filter', `remq', and `regexp-split'.
|
`scheme/base', including `filter', `remq', and `regexp-split'.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user