soft-contract icon indicating copy to clipboard operation
soft-contract copied to clipboard

Parse error when creating classes

Open rosekunkel opened this issue 8 years ago • 1 comments
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
   ...

rosekunkel avatar Apr 26 '17 01:04 rosekunkel

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)

bennn avatar Jun 05 '17 19:06 bennn