Matthew Fulmer uploaded a new version of SystemEditor to project SystemEditor: http://www.squeaksource.com/SystemEditor/SystemEditor-mtf.108.mcz
==================== Summary ====================
Name: SystemEditor-mtf.108 Author: mtf Time: 21 July 2008, 9:21:51 pm UUID: fc9bf5a6-1650-47fd-a845-c0855f032438 Ancestors: SystemEditor-mtf.107
Make Syntax Error dialogs work correctly. Since SyntaxError loads stuff directly into the system, MethodDictionaries had to be installed into classes earlier than before
=============== Diff against SystemEditor-mtf.107 ===============
Item was added: + ----- Method: SystemEditorTest>>test10ValidatesBeforeCommitting (in category 'tests') ----- + test10ValidatesBeforeCommitting + | classEditor | + classEditor := editor at: #EditorSubject. + classEditor typeOfClass: #bytes. + classEditor addInstVarName: 'test'. + self + should: [editor commit] + raise: InvalidClassFormat!
Item was changed: ----- Method: MethodEditor>>compileFor: (in category 'building') ----- compileFor: aClassEditor + [ | node method | node := aClassEditor compilerClass new compile: source in: aClassEditor product notifying: requestor ifFail: nil. node encoder requestor: self. method := node generate: #(0 0 0 0). method selector: node selector. + ^ method + ] on: SyntaxErrorNotification do: [:ex | + "Let the user install the fixed code into the system" + ex defaultAction. + "Now fetch and use that code instead" + source := aClassEditor product sourceCodeAt: self selector ifAbsent: [^ nil]. + ^ aClassEditor product compiledMethodAt: self selector + ]! - ^ method!
Item was changed: ----- Method: ClassEditor>>edBuild (in category 'building') ----- edBuild | meta | meta := self class edBuild. product := subject ifNil: [meta new] ifNotNil: [meta adoptInstance: subject from: subject class]. product superclass: self edSuperclass; setFormat: self format; setName: self name; setInstVarNames: self instVarNames; classPoolFrom: self; instVarNamed: #sharedPools put: self sharedPools; organization: self organization build. + product methodDictionary: MethodDictionary new. + product class methodDictionary: MethodDictionary new. self decoratorsDo: [:ea | ea buildFor: self]. + + "Class methods should be compiled before instance methods, + since #compilerClass may be among the class methods" + self class methods buildFor: self class. + self methods buildFor: self. - product methodDictionary: self methodDictionary. - product class methodDictionary: self class methodDictionary. ^product!
Item was changed: ----- Method: MethodDictionaryEditor>>buildFor: (in category 'editing') ----- buildFor: aClassEditor | result old | + result := aClassEditor product methodDictionary. - result := MethodDictionary new. self subject keysAndValuesDo: [:selector :cm | (self selectorIsModified: selector) ifFalse: [result at: selector put: (self recompile: selector from: cm for: aClassEditor)]]. additions keysAndValuesDo: [:selector :mm | old := self subject at: selector ifAbsent: [nil]. result at: selector put: (mm compileFrom: old for: aClassEditor)]. ^ result !
Item was changed: ----- Method: ClassEditor>>edSuperclass (in category 'building') ----- edSuperclass + superEditor ifNotNil: [^ superEditor product]. + subject ifNotNil: [^ subject superclass]. + ^ system edClassAt: #Object ifAbsent: [Object]. + ! - ^ superEditor - ifNil: [subject superclass] - ifNotNil: [superEditor product] - !
Item was removed: - ----- Method: SystemEditorTest>>test10ValidatesBeforeCommitting (in category 'tests') ----- - test10ValidatesBeforeCommitting - | classEditor | - classEditor := editor at: #EditorSubject. - classEditor typeOfClass: #bytes. - classEditor addInstVarName: 'test'. - self - should: [editor commit] - raise: InvalidClassFormat!
packages@lists.squeakfoundation.org