[racket-dev] Catching the undefined value

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Wed Apr 16 09:09:50 EDT 2014

Ah, too bad: 

> pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> --- OLD/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl
> +++ NEW/pkgs/racket-pkgs/racket-test/tests/racket/optimize.rktl
> @@ -3416,5 +3416,16 @@
>           (read (open-input-bytes (get-output-bytes o))))))
> 
> ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> +;; Check that an unsufe opertion's argument is
> +;; not "optimized" away if it's a use of
> +;; a variable before definition:
> +
> +(err/rt-test (let ()
> +               (unsafe-fx+ x 1)
> +               (define x 3)
> +               x)
> +             exn:fail:contract:variable?)
> +
> +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


:-) 

On Apr 16, 2014, at 9:02 AM, Matthias Felleisen <matthias at ccs.neu.edu> wrote:

> 
> On Apr 15, 2014, at 9:29 PM, Asumu Takikawa <asumu at ccs.neu.edu> wrote:
> 
>> On 2014-04-15 18:13:31 -0400, claire alvis wrote:
>>> The push below includes changes to letrec expressions, internal
>>> definitions, units, classes, and certain ill-formed shared expressions so
>>> that they no longer leak the `undefined' value.
>> 
>> This is great! (especially happy that TR, even with classes, doesn't
>> have to worry about #<undefined> anymore)
>> 
>> BTW, I found this weird behavior:
>> 
>> Welcome to Racket v6.0.1.3.
>> -> (require racket/unsafe/ops)
>> -> (let () (+ x 3) (define x 3) 5)
>> ; x: variable used before its definition [,bt for context]
>> -> (let () (unsafe-fx+ x 3) (define x 3) 5)
>> 5
> 
> 
> I consider this correct in a strange sense. 
> 
> Interestingly enough, 
> 
>> (let () (displayln  (unsafe-fx+ x 3)) (define x 3) 5)
> x: variable used before its definition
>  context...:
>   /Users/matthias/plt/racket/collects/racket/private/misc.rkt:87:7
> 
> which is good too. I don't know how Claire and Matthew did this, 
> but it's good :-) 
> _________________________
>  Racket Developers list:
>  http://lists.racket-lang.org/dev


Posted on the dev mailing list.