This is the mail archive of the kawa@sourceware.org mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Question regarding modules and module-export in Kawa


Thanks, that solved the problem.

Alex


On 4/29/09 12:17 PM, "Per Bothner" <per@bothner.com> wrote:

> On 04/28/2009 07:46 PM, alex mitchell wrote:
>> In moduletest.scm:
>> 
>> (module-export make-count)
>> 
>> ; simple counter
>> (define (make-count)
>>    (let ((count 0))
>>    (lambda ()
>>      (begin
>>      (set! count (+ count 1))
>>      (display count)))))
>> 
>> If I run this, I see the following warning:
>> #|kawa:1|# [...]/moduletest.scm:1:16: 'make-count' exported but never
>> defined
> 
> The problem is that when you evaluate a file it loads and evaluates
> command-by-command, rather than processing the whole file.  This is
> an awkward inconsistency which ties in with compatibility, user
> expectations, and macros.  See the comment and conditiona in the
> loadSource method in kawa/standard/load.java.
> 
> We might be able to "fix" this if we fixed the compiler so it
> automatically compiles and evaluates macros before their first
> use, even if defined in the same file.
> 
> On the other hand, when you *compile* a module, the whole file is
> read in as a unit, first.  (There is some magic to support
> mutually referential modules.)  So that works:
> 
>    kawa -C moduletest.scm
> 
> You can also put a (begin ...) block around the entire source file,
> to force it to be processed as a unit.
> 
>> Despite this, the counter seems to work:
>> 
>> #|kawa:2|# #|kawa:3|# (define my-count (make-count))
>> #|kawa:4|# (my-count)
>> 1
>> #|kawa:5|# (my-count)
>> 2
>> 
>> However, if I require the module in another file, as follows:
>> 
>> (require "moduletest.scm")
>> (define my-count (make-count))
>> (my-count)
>> 
>> I get this:
>> 
>> #|kawa:1|# [...]/moduletest.scm:7:20: unbound location exception evaluating
>> count from Field:moduletest$frame.count - java.lang.NullPointerException
>>      at gnu.expr.ReferenceExp.apply(ReferenceExp.java:106)
>>      at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
>>      at gnu.mapping.CallContext.getFromContext(CallContext.java:280)
>>      at gnu.expr.Expression.eval(Expression.java:24)
>>      at gnu.expr.ApplyExp.apply(ApplyExp.java:63)
>> [...]
>>      at kawa.repl.main(repl.java:844)
> 
> This is fixed in the SVN version of Kawa.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]