Eliot Miranda uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-eem.628.mcz
==================== Summary ====================
Name: Tools-eem.628
Author: eem
Time: 1 July 2015, 4:40:15.806 pm
UUID: 9f27ada3-52e9-4acb-83fe-2c117840e385
Ancestors: Tools-eem.627
Debugger: Extract the exception notification handler into its own method and use it for Through support also.
=============== Diff against Tools-eem.627 ===============
Item was changed:
----- Method: Debugger>>doStep (in category 'context stack menu') -----
doStep
"Send the selected message in the accessed method, and regain control
after the invoked method returns."
| currentContext newContext |
self okToChange ifFalse: [^ self].
self checkContextSelection.
currentContext := self selectedContext.
+ newContext := self handleLabelUpdatesIn: [interruptedProcess completeStep: currentContext]
+ whenExecuting: currentContext.
- newContext := [interruptedProcess completeStep: currentContext]
- on: Notification
- do: [:ex|
- (ex tag isArray
- and: [ex tag size = 2
- and: [(ex tag first == currentContext or: [ex tag first hasSender: currentContext])]])
- ifTrue:
- [self labelString: ex tag second description.
- ex resume]
- ifFalse:
- [ex pass]].
newContext == currentContext ifTrue:
[newContext := interruptedProcess stepToSendOrReturn].
self contextStackIndex > 1
ifTrue: [self resetContext: newContext]
ifFalse:
[newContext == currentContext
ifTrue: [self changed: #contentsSelection.
self updateInspectors]
ifFalse: [self resetContext: newContext]].
!
Item was added:
+ ----- Method: Debugger>>handleLabelUpdatesIn:whenExecuting: (in category 'context stack menu') -----
+ handleLabelUpdatesIn: aBlock whenExecuting: aContext
+ "Send the selected message in the accessed method, and regain control
+ after the invoked method returns."
+
+ ^aBlock
+ on: Notification
+ do: [:ex|
+ (ex tag isArray
+ and: [ex tag size = 2
+ and: [(ex tag first == aContext or: [ex tag first hasSender: aContext])]])
+ ifTrue:
+ [self labelString: ex tag second description.
+ ex resume]
+ ifFalse:
+ [ex pass]]!
Item was changed:
----- Method: Debugger>>stepIntoBlock (in category 'context stack menu') -----
stepIntoBlock
"Send messages until you return to the present method context.
Used to step into a block in the method."
+ self handleLabelUpdatesIn:
+ [interruptedProcess stepToHome: self selectedContext]
+ whenExecuting: self selectedContext.
+ self resetContext: interruptedProcess stepToSendOrReturn!
- interruptedProcess stepToHome: self selectedContext.
- self resetContext: interruptedProcess stepToSendOrReturn.!
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.932.mcz
==================== Summary ====================
Name: Kernel-eem.932
Author: eem
Time: 1 July 2015, 4:38:42.065 pm
UUID: 12b4ce38-269d-4f6f-9b12-eae61d403a03
Ancestors: Kernel-eem.931
Provide the same Debugger label support as complete: for the step into block support.
=============== Diff against Kernel-eem.931 ===============
Item was changed:
----- Method: Process>>stepToHome: (in category 'changing suspended state') -----
stepToHome: aContext
"Resume self until the home of top context is aContext. Top context may be a block context.
Catch any UnhandledErrors that are created while stepping, answering the relevant signalerContext
if so. Note that this will cause weird effects if using through to step through UnhandledError
code, but as the doctor ordered, don't do that; use over or into instead."
^Processor activeProcess
evaluate:
[| home anError |
home := aContext home.
[suspendedContext := suspendedContext step.
home == suspendedContext home or: [home isDead]] whileFalse:
[(suspendedContext selector == #signalForException:
and: [suspendedContext receiver == UnhandledError
and: [anError := suspendedContext tempAt: 1.
((suspendedContext objectClass: anError) includesBehavior: Exception)
and: [anError canSearchForSignalerContext]]]) ifTrue:
[anError signalerContext ifNotNil:
[:unhandledErrorSignalerContext|
[unhandledErrorSignalerContext == suspendedContext] whileFalse:
[self completeStep: suspendedContext].
+ "Give a debugger a chance to update its title to reflect the new exception"
+ Notification new
+ tag: {unhandledErrorSignalerContext. anError};
+ signal.
^unhandledErrorSignalerContext]]].
suspendedContext]
onBehalfOf: self!
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.931.mcz
==================== Summary ====================
Name: Kernel-eem.931
Author: eem
Time: 1 July 2015, 4:22:19.817 pm
UUID: edffee09-d6f1-4ae8-b10b-59fe640b5dfe
Ancestors: Kernel-eem.930
When an error occurs during complete:, which is used by the Debugger, raise a Notification to allow the Debugger to learn of the error's description.
=============== Diff against Kernel-eem.930 ===============
Item was changed:
----- Method: Process>>complete: (in category 'changing suspended state') -----
complete: aContext
"Run self until aContext is popped or an unhandled error is raised. Return self's new top context, unless an unhandled error was raised then return the signaler context (rather than open a debugger)."
| ctxt pair error |
ctxt := suspendedContext.
suspendedContext := nil. "disable this process while running its stack in active process below"
pair := Processor activeProcess
evaluate: [ctxt runUntilErrorOrReturnFrom: aContext]
onBehalfOf: self.
suspendedContext := pair first.
error := pair second.
+ error ifNotNil:
+ ["Give a debugger a chance to update its title to reflect the new exception"
+ Notification new
+ tag: {aContext. error};
+ signal.
+ ^error signalerContext].
- error ifNotNil: [^ error signalerContext].
^ suspendedContext!
Eliot Miranda uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-eem.750.mcz
==================== Summary ====================
Name: System-eem.750
Author: eem
Time: 1 July 2015, 4:20:21.905 pm
UUID: dde31c47-a8ec-451a-a343-5820a048c91c
Ancestors: System-eem.749
Provide a defaultAction for Warning that gives the user the option of debugging, ignoring or terminating when a Warning is raised in normal execution, or allows the Debugger to handle it if a Warning is raised during debugging.
=============== Diff against System-eem.749 ===============
Item was changed:
----- Method: Warning>>defaultAction (in category '*System-exceptionDescription') -----
defaultAction
+ "Inform the user of a Warning, giving them the choice of ignoring the warning (proceeding), debugging,
+ or terminating the compuation. If in the context of a debugger, instead allow the debugger to display
+ the wasrning in context."
+ | inDebugger |
+ inDebugger := [UnhandledError signal]
+ on: UnhandledError
+ do: [:uhe| uhe isNested].
+ inDebugger ifTrue:
+ [^UnhandledError signalForException: self].
+ (UIManager default
+ chooseFrom: #(proceed debug close)
+ values: #(proceed debug close)
+ title: 'Warning: ', self messageText)
+ caseOf: {
+ [#proceed] -> [self resume].
+ [#debug] -> [UnhandledError signalForException: self].
+ [#close] -> [| condemned |
+ condemned := Processor activeProcess.
+ Project current spawnNewProcessIfThisIsUI: condemned.
+ condemned terminate] }!
- "The user should be notified of the occurrence of an exceptional occurrence and given an option of continuing or aborting the computation. The description of the occurrence should include any text specified as the argument of the #signal: message."
- ToolSet
- debugContext: thisContext
- label: 'Warning'
- contents: self messageText, '\\Select Proceed to continue, or close this window to cancel the operation.' withCRs.
- self resume.
- !
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.930.mcz
==================== Summary ====================
Name: Kernel-eem.930
Author: eem
Time: 1 July 2015, 3:25:55.097 pm
UUID: f2ef6b5c-be8c-4bce-ab1b-dff14bb8ab0e
Ancestors: Kernel-eem.929
Fix the bug with the Debugger's through such that the Debugger would appear to freeze when encountering an MNU. The example is Debug It on:
Object flushDependents do: [ : e | ]
followed by Over, Through. But in fact one can see the same issue doing Debug It and then Through on
nil zork
What was happening is that Through was stepping through the uncaught and looping MNUs (of do: or zork in the above examples) since the Debugger did not catch unhandled errors during Through, and sicne doesNotUnderstand:'s default if uncaught is to resend. The fix is merely to catch unhandled errors when doing Through to the same effect as runUntilErrorOrReturnFrom: caching errors for Over.
Also speed up Through. The changes made in Kernel-eem.857 through Kernel-eem.896 to provide process-faithful debugging slowed down Process>>step a lot. These changes restore the performance by using evaluate:onBehalfOf: once for each Through, rather than once for each step within Through.
=============== Diff against Kernel-eem.929 ===============
Item was added:
+ ----- Method: Exception>>canSearchForSignalerContext (in category 'debug support') -----
+ canSearchForSignalerContext
+ "This method is /only/ to support the debugger's catching of exceptions in stepIntoBlock."
+ ^signalContext isContext!
Item was changed:
+ ----- Method: Exception>>signalerContext (in category 'handling') -----
- ----- Method: Exception>>signalerContext (in category 'printing') -----
signalerContext
"Find the first sender of signal(:)"
^ signalContext findContextSuchThat: [:ctxt |
(ctxt receiver == self or: [ctxt receiver == self class]) not]!
Item was changed:
----- Method: Process>>stepToHome: (in category 'changing suspended state') -----
stepToHome: aContext
+ "Resume self until the home of top context is aContext. Top context may be a block context.
+ Catch any UnhandledErrors that are created while stepping, answering the relevant signalerContext
+ if so. Note that this will cause weird effects if using through to step through UnhandledError
+ code, but as the doctor ordered, don't do that; use over or into instead."
- "Resume self until the home of top context is aContext. Top context may be a block context."
+ ^Processor activeProcess
+ evaluate:
+ [| home anError |
+ home := aContext home.
+ [suspendedContext := suspendedContext step.
+ home == suspendedContext home or: [home isDead]] whileFalse:
+ [(suspendedContext selector == #signalForException:
+ and: [suspendedContext receiver == UnhandledError
+ and: [anError := suspendedContext tempAt: 1.
+ ((suspendedContext objectClass: anError) includesBehavior: Exception)
+ and: [anError canSearchForSignalerContext]]]) ifTrue:
+ [anError signalerContext ifNotNil:
+ [:unhandledErrorSignalerContext|
+ [unhandledErrorSignalerContext == suspendedContext] whileFalse:
+ [self completeStep: suspendedContext].
+ ^unhandledErrorSignalerContext]]].
+ suspendedContext]
+ onBehalfOf: self!
- | home ctxt |
- home := aContext home.
- [ ctxt := self step.
- home == ctxt home.
- ] whileFalse: [
- home isDead ifTrue: [^ self suspendedContext].
- ].
- ^ self suspendedContext!
Eliot Miranda uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-eem.990.mcz
==================== Summary ====================
Name: Morphic-eem.990
Author: eem
Time: 1 July 2015, 3:14:20.524 pm
UUID: 0fb6f2b8-b89e-48e4-bf73-ab547b7b0d49
Ancestors: Morphic-cmm.989
Update the CurvierMorph's drawCurvier preference
to the recommended style., eliminating the only send of addPreference:category:default:balloonHelp:
in trunk outside of Preferences.
=============== Diff against Morphic-cmm.989 ===============
Item was removed:
- ----- Method: CurvierMorph class>>Curvier (in category 'class initialization') -----
- Curvier
- <preference: 'Curvier'
- category: 'morphic'
- description: 'If true, closed CurvierMorphs will be smoother and more symmetrical all about. If false they will mimic the old curve shapes with the one sharp bend.'
- type: #Boolean>
- ^ self drawCurvier.!
Item was changed:
----- Method: CurvierMorph class>>drawCurvier (in category 'class initialization') -----
drawCurvier
+ <preference: 'Curvier'
+ category: 'morphic'
+ description: 'If true, closed CurvierMorphs will be smoother and more symmetrical all about. If false they will mimic the old curve shapes with the one sharp bend.'
+ type: #Boolean>
+ ^DrawCurvier ifNil: [true]!
- ^ DrawCurvier.!
Item was changed:
----- Method: CurvierMorph class>>initialize (in category 'class initialization') -----
initialize
"CurvierMorph initialize"
- Preferences
- preferenceAt: #Curvier
- ifAbsent: [Preferences
- addPreference: #Curvier
- category: #morphic
- default: true
- balloonHelp: 'if true, closed CurvierMorphs will be smoother and more symmetrical all about. If false they will mimic the old curve shapes with the one sharp bend.'].
self registerInFlapsRegistry!
Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours:
http://lists.squeakfoundation.org/pipermail/packages/2015-June/008761.html
Name: Tools-eem.626
Ancestors: Tools-mt.625
Upgrade MessageSet class>>parse:toClassAndSelector:
to allow one to construct text links in modern syntax, e.g.
BitBlt class>>#subPixelRenderColorFonts
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008762.html
Name: ReleaseBuilder-mt.125
Ancestors: ReleaseBuilder-cmm.124
Restore setting the background in release builder's #setPreferences46 so that our build server produces trunk images with correct preferences again. #prepareNewBuild: is agnostic to the current release version.
Note: We should find out why #prepareNewBuild: requires another try to set the background and where that background gets overridden. It is not good to put version-specific code into a version-agnostic method.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008763.html
Name: System-eem.745
Ancestors: System-cmm.744
Rewrite Preferences to eliminate the AccessProtect.
Use a copy, update copy, assign scheme to update
the preferences dictionary atomically.
Change Preferences access method compilation to
use Object>>#value to eliminate a block creation.
Change Preference initialization to eliminate the
isKindOf: Symbol.
This is step 1. Given SystemPreferences it is clear
that the preferences dictionary should be stored in
a class inst var, so that SystemPreferences and
Preferences can share methods but access different
dictionaries. The dictionaryOfProferences[:] accessors
are dubious as they break encapsulatiopn. For example,
the reportPreferences: method, which is the only external
access, could insateaqd be moved into Preferences class.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008764.html
Name: System-eem.746
Ancestors: System-eem.745
First part of Preferences putsch to move preferences dictionary from class var to inst var. Also update class comment to describe preference pragmas.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008765.html
Name: System-eem.747
Ancestors: System-eem.746
Second part of putsch. Move preferences dictionary from class var to inst var. Remove the setter, and makde the getter, currently used only by SystemReporter, answer a copy.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008766.html
Name: System-ul.748
Ancestors: System-eem.747
- Iterate over pragmas once per method instead of once per pragma in Preferences class>>prefEvent:.
- There's no need to copy preferencesDictionary in Preferences class>>storePreferencesIn:, because it's a read-only data structure.
- Ensure the durability of the changes of preferencesDictionary in Preferences class>>atomicUpdatePreferences: by checking for changes before overwriting it.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008767.html
Name: Services-Base-eem.56
Ancestors: Services-Base-mt.55
ServicePreferences as per System-eem.747. Move preferences dictionary from class var to inst var.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008768.html
Name: System-eem.749
Ancestors: System-ul.748
Revert storePreferencesIn: to work with a copy,
which accords with the old code. Go for brevity
in prefEvent:.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008769.html
Name: Network-cmm.161
Ancestors: Network-ul.160
Remove the methods overridden by WebClient, since that has now been folded into base Squeak.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008770.html
Name: Help-Squeak-Project-cmm.25
Ancestors: Help-Squeak-Project-kfr.24
- Update internal release notes in the Help Browser. (no need to use a release-specific method).
- Release Notes has duplication with the one in TheWorldMainDockingBar which will be addressed later.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2015-July/008771.html
Name: WebClient-HTTP-cmm.3
Ancestors: WebClient-HTTP-topa.2
Recategorize methods so they are no longer overrides. WebClient is now part of Squeak.
=============================================
Chris Muller uploaded a new version of Services-Base to project Squeak 4.6:
http://source.squeak.org/squeak46/Services-Base-eem.56.mcz
==================== Summary ====================
Name: Services-Base-eem.56
Author: eem
Time: 30 June 2015, 3:34:50.838 pm
UUID: 2e8b9c56-6312-4a69-b65c-164ab583f617
Ancestors: Services-Base-mt.55
ServicePreferences as per System-eem.747. Move preferences dictionary from class var to inst var.
=============== Diff against Services-Base-mt.55 ===============
Item was added:
+ (PackageInfo named: 'Services-Base') preamble: '(Smalltalk classNamed: #ServicePreferences) ifNotNil:
+ [:sp|
+ (sp instVarNamed: ''preferencesDictionary'') ifNil:
+ [(sp classPool at: #ServiceDictionaryOfPreferences) ifNotNil:
+ [:dictionary|
+ sp
+ instVarNamed: ''preferencesDictionary''
+ put: dictionary]]]'!
Item was changed:
Preferences subclass: #ServicePreferences
instanceVariableNames: ''
+ classVariableNames: ''
- classVariableNames: 'ServiceDictionaryOfPreferences'
poolDictionaries: ''
category: 'Services-Base-GUI'!
!ServicePreferences commentStamp: 'rr 7/10/2006 15:36' prior: 0!
I store the preferences related to the servicse framework. The preferences are editable via the Services Browser, based on Hernan Tylim's Preference Browser.
The main preference categories for services are:
-- keyboard shortcuts -- : several text preferences, one per keyboard shortcuts. To edit them, enter a service identifier (equal to the method name under which it is defined in its ServiceProvider), and accept with alt-s or enter
-- menu contents -- : All the service categories in the image have a text preference under here. To edit it, enter the services identifiers you wish to put in this category, separating them with a single space character. The order is important: it defines the order of the items in menus.
-- settings -- : general boolean preferences.
Then there is a preference category for each provider in the image. Under each, you will find:
A boolean preference for each service in the image. If it is false, the service will not appear in menus.
The text preference for each service category defined by the service provider. This is the same as the one appearing in the menu contents preference category.!
Item was removed:
- ----- Method: ServicePreferences class>>dictionaryOfPreferences (in category 'accessing') -----
- dictionaryOfPreferences
- ServiceDictionaryOfPreferences
- ifNil: [ServiceDictionaryOfPreferences := IdentityDictionary new].
- ^ ServiceDictionaryOfPreferences !
Item was removed:
- ----- Method: ServicePreferences class>>dictionaryOfPreferences: (in category 'accessing') -----
- dictionaryOfPreferences: aDictionary
- ServiceDictionaryOfPreferences := aDictionary!
Item was changed:
----- Method: ServicePreferences class>>wipe (in category 'accessing') -----
wipe
+ preferencesDictionary := nil!
- self dictionaryOfPreferences: nil!