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]

issue: class field and its usage from lambda


Hi. I'm tried to use Kawa 1.12.1 (revision 7282) and 1.12 stable. Could anyone help me and explain why --main flag changes Kawa compiler's behavior radically? There is my simplified program (it looks little bit synthetic now):

(define-class FailClass ()
  (x ::float access: 'private init: 0.0)

  ((wrap-x) (lambda () x))

  ((calculate-position)
   (letrec ( (wrap-func  (lambda () (wrap-x))) )
     (wrap-func))))

For both Kawa 1.12.1 (revision 7282) and Kawa 1.12 release i got this traceback:
[imdagger@blacktears]$ java -jar /home/imdagger/kawa/kawa/kawa-1.12.1.jar -C test.scm 
(compiling test.scm to test)
test.scm:4: internal error while compiling test.scm
java.lang.NullPointerException
	at gnu.expr.LambdaExp.setCallersNeedStaticLink(LambdaExp.java:209)
	at gnu.expr.LambdaExp.setNeedsStaticLink(LambdaExp.java:199)
	at gnu.expr.FindCapturedVars.capture(FindCapturedVars.java:419)
	at gnu.expr.FindCapturedVars.capture(FindCapturedVars.java:509)
	at gnu.expr.FindCapturedVars.visitReferenceExp(FindCapturedVars.java:484)
	at gnu.expr.FindCapturedVars.visitReferenceExp(FindCapturedVars.java:11)
	at gnu.expr.ReferenceExp.visit(ReferenceExp.java:183)
	at gnu.expr.ExpVisitor.visit(ExpVisitor.java:53)
	at gnu.expr.LambdaExp.visitChildrenOnly(LambdaExp.java:1716)
	at gnu.expr.LambdaExp.visitChildren(LambdaExp.java:1703)
	at gnu.expr.ExpVisitor.visitExpression(ExpVisitor.java:29)
	at gnu.expr.ExpVisitor.visitScopeExp(ExpVisitor.java:98)
	at gnu.expr.ExpVisitor.visitLambdaExp(ExpVisitor.java:102)
	at gnu.expr.FindCapturedVars.visitLambdaExp(FindCapturedVars.java:297)
	at gnu.expr.FindCapturedVars.visitLambdaExp(FindCapturedVars.java:11)
	at gnu.expr.LambdaExp.visit(LambdaExp.java:1692)
	at gnu.expr.ExpVisitor.visit(ExpVisitor.java:53)
	at gnu.expr.LambdaExp.visitChildrenOnly(LambdaExp.java:1716)
	at gnu.expr.LambdaExp.visitChildren(LambdaExp.java:1703)
	at gnu.expr.ExpVisitor.visitExpression(ExpVisitor.java:29)
	at gnu.expr.ExpVisitor.visitScopeExp(ExpVisitor.java:98)
	at gnu.expr.ExpVisitor.visitLambdaExp(ExpVisitor.java:102)
	at gnu.expr.FindCapturedVars.visitLambdaExp(FindCapturedVars.java:297)
	at gnu.expr.FindCapturedVars.visitLambdaExp(FindCapturedVars.java:11)
	at gnu.expr.ClassExp.visitChildren(ClassExp.java:787)
	at gnu.expr.ExpVisitor.visitExpression(ExpVisitor.java:29)
	at gnu.expr.ExpVisitor.visitScopeExp(ExpVisitor.java:98)
	at gnu.expr.ExpVisitor.visitLambdaExp(ExpVisitor.java:102)
	at gnu.expr.FindCapturedVars.visitLambdaExp(FindCapturedVars.java:297)
	at gnu.expr.FindCapturedVars.visitLambdaExp(FindCapturedVars.java:11)
	at gnu.expr.ExpVisitor.visitClassExp(ExpVisitor.java:103)
	at gnu.expr.FindCapturedVars.visitClassExp(FindCapturedVars.java:125)
	at gnu.expr.FindCapturedVars.visitClassExp(FindCapturedVars.java:11)
	at gnu.expr.ClassExp.visit(ClassExp.java:762)
	at gnu.expr.ExpVisitor.visit(ExpVisitor.java:57)
	at gnu.expr.ExpVisitor.visitAndUpdate(ExpVisitor.java:143)
	at gnu.expr.ExpVisitor.visitSetExp(ExpVisitor.java:109)
	at gnu.expr.FindCapturedVars.visitSetExp(FindCapturedVars.java:541)
	at gnu.expr.FindCapturedVars.visitSetExp(FindCapturedVars.java:11)
	at gnu.expr.SetExp.visit(SetExp.java:432)
	at gnu.expr.ExpVisitor.visit(ExpVisitor.java:53)
	at gnu.expr.LambdaExp.visitChildrenOnly(LambdaExp.java:1716)
	at gnu.expr.LambdaExp.visitChildren(LambdaExp.java:1703)
	at gnu.expr.ExpVisitor.visitExpression(ExpVisitor.java:29)
	at gnu.expr.ExpVisitor.visitScopeExp(ExpVisitor.java:98)
	at gnu.expr.ExpVisitor.visitLambdaExp(ExpVisitor.java:102)
	at gnu.expr.FindCapturedVars.visitLambdaExp(FindCapturedVars.java:297)
	at gnu.expr.FindCapturedVars.visitModuleExp(FindCapturedVars.java:152)
	at gnu.expr.FindCapturedVars.visitModuleExp(FindCapturedVars.java:11)
	at gnu.expr.ModuleExp.visit(ModuleExp.java:472)
	at gnu.expr.FindCapturedVars.findCapturedVars(FindCapturedVars.java:17)
	at gnu.expr.Compilation.process(Compilation.java:1940)
	at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:305)
	at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:290)
	at gnu.expr.ModuleInfo.loadByStages(ModuleInfo.java:290)
	at kawa.repl.compileFiles(repl.java:824)
	at kawa.repl.processArgs(repl.java:444)
	at kawa.repl.main(repl.java:870)

But --main option changes result:
[imdagger@blacktears]$ java -jar /home/imdagger/kawa/kawa/kawa-1.12.1.jar --main -C test.scm 
(compiling test.scm to test)


Also experimentally I have got source which works for both cases, I used (this):x explicitly:
(define-class FailClass ()
  (x ::float access: 'private init: 0.0)

  ((wrap-x) (lambda () (this):x))

  ((calculate-position)
   (letrec ( (wrap-func  (lambda () (wrap-x))) )
     (wrap-func))))


Is it a bug or I should always use explicit way and avoid implicit usage object's fields?


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