[Pharo-project] IMO IllegalResumeAttempt should be resumable
Hi All, an attempt to resume an unresumable signal results in raising IllegalResumeAttempt; quite right: Exception>>resume "Return from the message that signaled the receiver." self resume: self defaultResumeValue However, IllegalResumeAttempt is not itself resumable. So in those rare cases (e.g. test coverage) where a knowledgeable client wants to force resumption of a non-resumable signal by catching and resuming IllegalResumeAttempt, they can't because IllegalResumeAttempt>>isResumable ^ false So take e.g. [Cogit chooseCogitClass testPCMappingSelect: [:m| true]] on: AssertionFailure do: [:ex| | ctxt | ctxt := ex signalerContext findContextSuchThat: [:ctx| ctx sender selector = #allSelect:]. Transcript ensureCr; print: (ctxt tempAt: 1); flush. [ex resume] on: IllegalResumeAttempt do: [:ex| ex resume]] where I'm trying to JIT every method in my image and catalogue those that assert-fail, proceeding through the assert failure (and AssertionFailure isn't resumable). I happen to know that proceeding from the assert-fails is safe. But I can't force resumption because IllegalResumeAttempt is itself not resumable. I propose that we make IllegalResumeAttempt resumable. Objections? Cautions? best Eliot
Belay that. Apologies for the noise. resumeUnchecked: is of course the right solution. e.g. Array streamContents: [:s| [Cogit chooseCogitClass testPCMappingSelect: [:m| true]] on: AssertionFailure, Error do: [:ex| | ctxt | ctxt := ex signalerContext findContextSuchThat: [:ctx| ctx sender selector = #allSelect:]. "testPCMappingSelect uses allSelect: to enumerate so return to allSelect: to continue" s nextPut: (ctxt tempAt: 1). Transcript ensureCr; cr; print: (ctxt tempAt: 1); cr; flush. ex searchFrom: ctxt. ex resumeUnchecked: false]] On Sat, Jan 22, 2011 at 1:50 PM, Eliot Miranda <eliot.miranda@gmail.com>wrote:
Hi All,
an attempt to resume an unresumable signal results in raising IllegalResumeAttempt; quite right:
Exception>>resume "Return from the message that signaled the receiver."
self resume: self defaultResumeValue
However, IllegalResumeAttempt is not itself resumable. So in those rare cases (e.g. test coverage) where a knowledgeable client wants to force resumption of a non-resumable signal by catching and resuming IllegalResumeAttempt, they can't because
IllegalResumeAttempt>>isResumable ^ false
So take e.g.
[Cogit chooseCogitClass testPCMappingSelect: [:m| true]] on: AssertionFailure do: [:ex| | ctxt | ctxt := ex signalerContext findContextSuchThat: [:ctx| ctx sender selector = #allSelect:]. Transcript ensureCr; print: (ctxt tempAt: 1); flush. [ex resume] on: IllegalResumeAttempt do: [:ex| ex resume]]
where I'm trying to JIT every method in my image and catalogue those that assert-fail, proceeding through the assert failure (and AssertionFailure isn't resumable). I happen to know that proceeding from the assert-fails is safe. But I can't force resumption because IllegalResumeAttempt is itself not resumable.
I propose that we make IllegalResumeAttempt resumable. Objections? Cautions?
best Eliot
participants (1)
-
Eliot Miranda