A new version of ST80 was added to project The Inbox: http://source.squeak.org/inbox/ST80-nice.127.mcz
==================== Summary ====================
Name: ST80-nice.127 Author: nice Time: 31 March 2011, 10:05:15.793 pm UUID: 04b556c6-fdea-46d0-b21a-9160ebd94302 Ancestors: ST80-nice.126
Get rid of FakeClassPool and #failedDoIt references. This is implemented by the mean of #evaluateSelectionAndDo: This method will pass the result to aBlock argument in case of success, and avoid testing for arbitrary return value (FakeClassPool new or #failedDoit)
=============== Diff against ST80-nice.126 ===============
Item was changed: ----- Method: ParagraphEditor>>evaluateSelection (in category 'do-its') ----- evaluateSelection "Treat the current selection as an expression; evaluate it and return the result" + + ^self evaluateSelectionAndDo: [:result | result]! - | result rcvr ctxt | - self lineSelectAndEmptyCheck: [^ '']. - - (model respondsTo: #doItReceiver) - ifTrue: [ rcvr := model doItReceiver. - ctxt := model doItContext] - ifFalse: [rcvr := ctxt := nil]. - result := [ - rcvr class evaluatorClass new - evaluate: self selectionAsStream - in: ctxt - to: rcvr - notifying: self - ifFail: [^ #failedDoit] - logged: true. - ] - on: OutOfScopeNotification - do: [ :ex | ex resume: true]. - ^ result!
Item was added: + ----- Method: ParagraphEditor>>evaluateSelectionAndDo: (in category 'do-its') ----- + evaluateSelectionAndDo: aBlock + "Treat the current selection as an expression; evaluate it and invoke aBlock with the result." + | result rcvr ctxt | + self lineSelectAndEmptyCheck: [^ nil]. + + (model respondsTo: #doItReceiver) + ifTrue: [ rcvr := model doItReceiver. + ctxt := model doItContext] + ifFalse: [rcvr := ctxt := nil]. + result := [ + rcvr class evaluatorClass new + evaluate: self selectionAsStream + in: ctxt + to: rcvr + notifying: self + ifFail: [self flash. ^nil] + logged: true. + ] + on: OutOfScopeNotification + do: [ :ex | ex resume: true]. + ^aBlock value: result!
Item was changed: ----- Method: ParagraphEditor>>exploreIt (in category 'do-its') ----- exploreIt + self evaluateSelectionAndDo: [:result | result explore] - | result | - result := self evaluateSelection. - ((result isKindOf: FakeClassPool) or: [result == #failedDoit]) - ifTrue: [view flash] - ifFalse: [result explore]. !
Item was changed: ----- Method: ParagraphEditor>>inspectIt (in category 'do-its') ----- inspectIt + self evaluateSelectionAndDo: [:result | result inspect]. - "1/13/96 sw: minor fixup" - | result | - result := self evaluateSelection. - ((result isKindOf: FakeClassPool) or: [result == #failedDoit]) - ifTrue: [view flash] - ifFalse: [result inspect]. !
Item was changed: ----- Method: ParagraphEditor>>objectsReferencingIt (in category 'do-its') ----- objectsReferencingIt "Open a list inspector on all objects that reference the object that results when the current selection is evaluated. " + self terminateAndInitializeAround: + [self evaluateSelectionAndDo: [:result | + self systemNavigation - self terminateAndInitializeAround: [ | result | - result := self evaluateSelection. - ((result isKindOf: FakeClassPool) or: [result == #failedDoit]) - ifTrue: [view flash] - ifFalse: [self systemNavigation browseAllObjectReferencesTo: result except: #() + ifNone: [:obj | view topView flash]]]! - ifNone: [:obj | view topView flash]]. - ]!
Item was changed: ----- Method: ParagraphEditor>>printIt (in category 'do-its') ----- printIt "Treat the current text selection as an expression; evaluate it. Insert the description of the result of evaluation after the selection and then make this description the new text selection." + self evaluateSelectionAndDo: [:result | + self afterSelectionInsertAndSelect: result printString]! - | result | - result := self evaluateSelection. - ((result isKindOf: FakeClassPool) or: [result == #failedDoit]) - ifTrue: [view flash] - ifFalse: [self afterSelectionInsertAndSelect: result printString]!
Item was changed: ----- Method: ParagraphEditor>>tallySelection (in category 'do-its') ----- tallySelection "Treat the current selection as an expression; evaluate it and return the time took for this evaluation" | result rcvr ctxt valueAsString v | + self lineSelectAndEmptyCheck: [^self]. - self lineSelectAndEmptyCheck: [^ -1].
(model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [rcvr := ctxt := nil]. result := [ | cm | cm := rcvr class evaluatorClass new compiledMethodFor: self selectionAsStream in: ctxt to: rcvr notifying: self + ifFail: [self flash. ^self] - ifFail: [^ #failedDoit] logged: false. Time millisecondsToRun: [v := cm valueWithReceiver: rcvr arguments: #() ]. ] on: OutOfScopeNotification do: [ :ex | ex resume: true].
"We do not want to have large result displayed" valueAsString := v printString. (valueAsString size > 30) ifTrue: [valueAsString := (valueAsString copyFrom: 1 to: 30), '...']. PopUpMenu inform: 'Time to compile and execute: ', result printString, 'ms res: ', valueAsString. !
squeak-dev@lists.squeakfoundation.org