(another?) VerifyError with kawa-1.6.70
John Kozak
jk@noontide.demon.co.uk
Tue Nov 21 04:52:00 GMT 2000
The appended code produces this:
java.lang.VerifyError: atInteractiveLevel$lambda
at source unknown
at atInteractiveLevel.apply2(Unknown Source)
at gnu.expr.ModuleBody.applyN(ModuleBody.java:97)
at gnu.expr.ModuleMethod.applyN(ModuleMethod.java:61)
at gnu.expr.ApplyExp.eval(ApplyExp.java:38)
at gnu.expr.SetExp.eval(SetExp.java:88)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:38)
at kawa.Shell.run(Shell.java:85)
at kawa.standard.load.loadSource(load.java:124)
at kawa.standard.load.loadSource(load.java:102)
at kawa.standard.load.apply(load.java:173)
at kawa.standard.load.apply2(load.java:149)
at kawa.standard.load.apply1(load.java:140)
at gnu.mapping.Procedure1.applyN(Procedure1.java:49)
at gnu.expr.ApplyExp.eval(ApplyExp.java:38)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:38)
at kawa.Shell.run(Shell.java:85)
at kawa.Shell.run(Shell.java:35)
at kawa.Shell.run(Shell.java:19)
at kawa.repl.main(repl.java:356)
under IBM JDK 1.1.8 (and slightly more informative msgs under later
JDKs). Seems to provoked by the find-trans! code. Is this a repeat
of Brian Carlstrom's earlier bug?
John
-------------------------------------code-----------------------------
(define (and? . rest)
(cond ((null? rest) #t)
((not (car rest)) #f)
(else (apply and? (cdr rest)))))
(define (or? . rest)
(cond ((null? rest) #f)
((car rest) #t)
(else (apply or? (cdr rest)))))
(define (filter p? l)
(if (null? l)
'()
(if (p? (car l))
(cons (car l) (filter p? (cdr l)))
(filter p? (cdr l)))))
(define id (lambda (x) x))
(define (set-cadr! x v) (set-car! (cdr x) v))
(define (set-caddr! x v) (set-car! (cddr x) v))
(define (make-petri places transitions)
(letrec ((find-place (lambda (p)
(cond ((assq p places))
(else (error (format #f "can't find place: ~a" p))) ) ))
(find-trans (lambda (t)
(cond ((assq t transitions))
(else (error (format #f "can't find transition: ~a" t))) ) ))
(place-name car)
(place-count cadr)
(set-place-count! (lambda (p v) (set-car! (cdr p) v)))
(trans-name car)
(trans-inputs cadr)
(trans-outputs caddr)
(ready-trans (lambda ()
(filter
(lambda (t)
(apply and?
(map (lambda (p) (> (place-count (find-place p)) 0))
(trans-inputs t)) ) )
transitions) ))
(fire-trans! (lambda (t)
(let ((trans (find-trans t)))
(for-each (lambda (p)
(let ((place (find-place p)))
(set-place-count! place (- (place-count place) 1)) ) )
(trans-inputs trans) )
(for-each (lambda (p)
(let ((place (find-place p)))
(set-place-count! place (+ (place-count place) 1)) ) )
(trans-outputs trans) )
)) )
(self (lambda (op) ;user interface
(case op
((go)
(let loop ((ready (map trans-name (ready-trans))))
(format #t "~a: " ready)
(let ((ans (string->symbol (read-line))))
(cond ((not (memq ans ready))
(format #t "***bzzt!\n")
(loop ready) )
(else
(fire-trans! ans)
(format #t "places: ~a\n" places)
(loop (map trans-name (ready-trans))) ) ) ) ) )
(else
(format #t "??") ) ) ) ) )
self) )
;;; playpen
(define pn (make-petri ;from "Network Algebra" p. 308
'((p 1) (q 0) (r 0))
'((a (p) (q p))
(b (p q) (r q))
(c (q r) (r))
(d (r) (p)) ) ) )
------------------------------------end----------------------------------------
More information about the Kawa
mailing list