soft-contract
soft-contract copied to clipboard
Parse error when creating classes
trafficstars
Example
#lang racket
(class object%
(super-new))
Expected output
Safe
Actual output
parser: don't know what `current-inspector` is
context...:
temp558
/usr/share/racket/collects/racket/contract/private/arrow-higher-order.rkt:342:33
loop
parse-es
/usr/share/racket/collects/racket/contract/private/arrow-higher-order.rkt:346:33
temp558
/usr/share/racket/collects/racket/contract/private/arrow-higher-order.rkt:342:33
[repeats 1 more time]
temp272
/usr/share/racket/collects/racket/contract/private/arrow-higher-order.rkt:342:33
/home/will/research/soft-contract/soft-contract/parse/private.rkt:118:8: for-loop
/home/will/research/soft-contract/soft-contract/parse/private.rkt:106:2: parse-top-level-form
/usr/share/racket/collects/racket/contract/private/arrow-higher-order.rkt:342:33
parse-module
/usr/share/racket/collects/racket/contract/private/arrow-higher-order.rkt:342:33
parse-files
...
Also, trying to verify a module that depends on another module that uses classes will raise an exception about protect-out (because Racket's class-internal.rkt happens to use a protect-out)
Example Program
"foo.rkt"
#lang racket
(provide foo%)
(define foo% (class object% (super-new)))
"main.rkt"
#lang racket
(require "foo.rkt")
(define (make-foo)
(new foo%))
(provide (contract-out (make-foo (-> any/c))))
Error message
<collects>/racket/private/class-internal.rkt:31.0: f:provide: expected one of these identifiers: `struct-out' or `contract-out'
at: protect-out
in: (f:provide provide-public-names (protect-out do-make-object find-method/who))
context...:
.... (omitted -Ben)