In Pharo it is common that new/new: will already go through an initialize call. When porting code from and to Pharo one needs to make sure that initialize is called and only called once or idempotent. Align the code with Pharo. --- kernel/Builtins.st | 34 +++++++++++++++------------------- kernel/Metaclass.st | 5 +++++ packages/debug/debugtests.st | 2 +- 3 files changed, 21 insertions(+), 20 deletions(-)
diff --git a/kernel/Builtins.st b/kernel/Builtins.st index 666db54..eb5fa3b 100644 --- a/kernel/Builtins.st +++ b/kernel/Builtins.st @@ -43,6 +43,11 @@ Behavior extend [ ] Object extend [ + initialize [ + "Subclasses should redefine this method to perform initializations on + instance creation" + ] + class [ "Answer the class to which the receiver belongs" <primitive: VMpr_Object_class> @@ -53,15 +58,19 @@ Object extend [ Behavior extend [ - + new [ "Create a new instance of a class with no indexed instance variables" - <primitive: VMpr_Behavior_basicNew> - <category: 'builtin'> - self isFixed ifFalse: [ ^self new: 0 ]. - ^self primitiveFailed + ^self basicNew initialize ] - + + new: numInstanceVariables [ + "Create a new instance of a class with indexed instance variables. The + instance has numInstanceVariables indexed instance variables." + ^(self basicNew: numInstanceVariables) initialize + ] + + basicNew [ "Create a new instance of a class with no indexed instance variables; this method must not be overridden." @@ -71,19 +80,6 @@ Behavior extend [ ^self primitiveFailed ] - new: numInstanceVariables [ - "Create a new instance of a class with indexed instance variables. The - instance has numInstanceVariables indexed instance variables." - <primitive: VMpr_Behavior_basicNewColon> - <category: 'builtin'> - self isFixed ifTrue: [ - SystemExceptions.WrongMessageSent signalOn: #new: useInstead: #new - ]. - numInstanceVariables isSmallInteger ifTrue: [ ^self primitiveFailed ]. - - ^SystemExceptions.WrongClass signalOn: numInstanceVariables mustBe: SmallInteger - ] - basicNew: numInstanceVariables [ "Create a new instance of a class with indexed instance variables. The instance has numInstanceVariables indexed instance variables; diff --git a/kernel/Metaclass.st b/kernel/Metaclass.st index 8b320cd..7fd8178 100644 --- a/kernel/Metaclass.st +++ b/kernel/Metaclass.st @@ -55,6 +55,11 @@ it should be...the Smalltalk metaclass system is strange and complex.'> ^newMeta ] + new [ + "Do not call >>#initialize on the classes" + ^self basicNew + ] + addClassVarName: aString [ "Add a class variable with the given name to the class pool dictionary" diff --git a/packages/debug/debugtests.st b/packages/debug/debugtests.st index eaa62f0..16f4c5d 100644 --- a/packages/debug/debugtests.st +++ b/packages/debug/debugtests.st @@ -256,7 +256,7 @@ TestCase subclass: DebuggerTest [ <category: 'test'> | debugger reached notReached | - debugger := self debuggerOn: [reached := Object new]. + debugger := self debuggerOn: [reached := Object basicNew]. debugger step. self assert: reached notNil ] -- 2.0.1 _______________________________________________ help-smalltalk mailing list help-smalltalk@gnu.org https://lists.gnu.org/mailman/listinfo/help-smalltalk