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] |
On 06/06/2012 12:11 PM, Jamison Hope wrote:I'll continue to poke around with The Bug a little more, looking for where these two diverge:
; This is erroneous. (define (foo) 'a) (define x foo) (let ((x (lambda () 'b))) (display (x)) (display x) (display (foo))) (newline) ;; Output: b #<procedure x> b
; This is correct. (define (foo) 'a) (define y foo) (let ((x (lambda () 'b))) (display (x)) (display x) (display (foo))) (newline) ;; Output: b #<procedure x> a
I think the problem is where LambdaExp#compile calls emitLoadModuleMethod.
I don't think the branch at line 780 should be taken, or if it should be,
we should not rebind the outer procedure (see the comment in
ProcInitializer#emitLoadModuleMethod line 35).
Yup, just found that. We need a check something like that the outer procedure's original declaration is within the same enclosing LetExp that we're in now? Or maybe that we're within a SetExp? Is it ever correct to do a rebinding outside of a set?
-- Jamison Hope The PTR Group www.theptrgroup.com
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |