`(catch #t
(lambda () ,(exp vs x))
(lambda (,tag ,o . ,l)
- ,(let lp ((it (if else (exp vs else) `(apply throw ,tag ,l)))
+ ,(let lp ((it (if else (exp vs else) `(apply throw ,tag ,o ,l)))
(exc exc))
(match exc
((((test . #f) code) . exc)
exc))
((((test . as) code) . exc)
(let ((a (exp vs as)))
- (lp `(if (,(O 'testex) ,o ,tag ,(exp vs test) ,l)
+ (lp `(if (,(O 'testex) ,tag ,o ,(exp vs test) ,l)
(let ((,a ,o))
(,(O 'set) ,a '__excargs__ ,l)
,(exp vs code))
(let* ((classtag (ref tag '__class__ #f))
(exid (ref ex '__goops__ #f)))
(let check-class ((tag classtag))
- (if (eq? (ref tag '__goops__ #f) exid)
+ (if (and exid (eq? (ref tag '__goops__ #f) exid))
#t
(let lp ((parents (ref tag '__parents__ '())))
(if (pair? parents)
((pyclass? ex)
=>
(lambda (cl)
- (testex py tag cl l))))))
+ (testex py tag cl l)))
+ (else
+ #f))
+ #f))