In an interpreter I'm writing I'm often running into Blocked block exceptions. I've been able to solve several of these errors but the problem is always figuring out what exactly I've done to cause the error. Most of the time it seems to come down to some sort of missing assertions that cause the translator to think that there is no way for an operation to succeed, but I just can't find it.
For example, I'm currently getting this error: [translation:ERROR] AnnotatorError: [translation:ERROR] [translation:ERROR] Blocked block -- operation cannot succeed [translation:ERROR] [translation:ERROR] v1 = getattr(v0, ('data')) [translation:ERROR] [translation:ERROR] In <FunctionGraph of (clojure.vm.array:18)Array.aget at 0x1019d52d0>: [translation:ERROR] Happened at file /Users/tim/oss/clojure-vm/clojure/vm/array.py line 20 [translation:ERROR] [translation:ERROR] ==> return self.data[idx] [translation:ERROR] [translation:ERROR] Known variable annotations: [translation:ERROR] v0 = SomeInstance(can_be_None=False, classdef=clojure.vm.array.Array) for this class: from clojure.vm.object import Object, type_ids from clojure.vm.primitives import nil class Array(Object): type_id = type_ids.next() def __init__(self, data, meta = nil): self.data = data self.meta = meta def type(self): return self.type_id def aclone(self): return Array(self.data[:], self.meta) def aget(self, idx): assert isinstance(idx, int) return self.data[idx] def aset(self, idx, val): assert isinstance(idx, int) assert isinstance(val, Object) self.data[idx] = val def alength(self): return len(self.data) Of course, the error is wrong, and it must be related to some other part of the code, but I feel like a blind man in the dark trying to find it. Is there any good way to debug these sorts of errors? Timothy
_______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev