[racket-dev] Catching the undefined value
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