[racket] link: module mismatch

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Thu Nov 29 08:04:08 EST 2012

I think it's some mismatch in the way that scheme_eval() uses its
namespace argument versus using `(current-namespace)', while `eval'
sets `current-namespace'.

In other words, scheme_eval() is probably broken in some way when the
namespace you give it is not the same as `(current-namespace)'.

At Thu, 29 Nov 2012 01:20:46 -0500, Anthony Carrico wrote:
> I have a test case that works at the command line:
> 
> $ racket
> Welcome to Racket v5.3.1.
> > (require "simple.rkt")
> > (scheme_eval '(+ 2 2) (make-base-namespace))
> 4
> >
> 
> But fails with raco test:
> 
> $ raco test "simple.rkt"
> link: module mismatch;
>  possibly, bytecode file needs re-compile because dependencies changed
>   exporting module: "/usr/share/racket/collects/racket/private/kw.rkt"
>   exporting phase level: 0
>   internal explanation: variable not provided (directly or indirectly)
>   at: #%app
>   in: new-app
> 
> Here is my version:
> 
> $ racket --version
> Welcome to Racket v5.3.1.
> 
> And here is the test:
> 
> $ cat "simple.rkt"
> #lang racket
> (module+ test (require rackunit))
> (require ffi/unsafe)
> (define scheme_eval
>   (get-ffi-obj "scheme_eval" (ffi-lib #f) (_fun _scheme _scheme ->
> _scheme)))
> (provide scheme_eval)
> (module+ test
>   (check = 4 (scheme_eval '(+ 2 2) (make-base-namespace))))
> 
> If I change scheme_eval to eval in "check =" there is no failure.
> 
> I know, strange example. I just came across the issue while hacking.
> 
> -- 
> Anthony Carrico
> 
> 
> ------------------------------------------------------------------------------
> [application/pgp-signature "signature.asc"] [~/Desktop & open] [~/Temp & open]
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users

Posted on the users mailing list.