[squeak-dev] The Inbox: Kernel-cmm.1198.mcz

Levente Uzonyi leves at caesar.elte.hu
Sat Nov 24 13:39:39 UTC 2018


On Sat, 24 Nov 2018, commits at source.squeak.org wrote:

> Chris Muller uploaded a new version of Kernel to project The Inbox:
> http://source.squeak.org/inbox/Kernel-cmm.1198.mcz
>
> ==================== Summary ====================
>
> Name: Kernel-cmm.1198
> Author: cmm
> Time: 23 November 2018, 11:12:47.414703 pm
> UUID: fe228ca8-2ec7-4432-b3d9-76da98be4475
> Ancestors: Kernel-eem.1197
>
> - Suggestion that #basicClass should be inlined while #class should be a message send, so that Proxy's can be supported.

It won't work while the special bytecode for #class is compiled. And even 
after that, you have to recompile all senders of #class to make it use 
the primitive and the new method instead of optimizing it away.

> - If so, then #xxxClass can be banished.
> - With #xxxClass banished, the Squeak code that called it can be written normally, simply as "class".

That won't work either for the same reason. And we do not want to remove 
the bytecode, do we?

Levente

>
> =============== Diff against Kernel-eem.1197 ===============
>
> Item was added:
> + ----- Method: Object>>basicClass (in category 'class membership') -----
> + basicClass
> + 	"Primitive. Answer the object which is the receiver's class. Essential. See 
> + 	Object documentation whatIsAPrimitive."
> + 
> + 	<primitive: 111>
> + 	self primitiveFailed!
>
> Item was changed:
>  ----- Method: Object>>class (in category 'class membership') -----
>  class
> + 	"Answer the object which is the receiver's class. Essential."
> - 	"Primitive. Answer the object which is the receiver's class. Essential. See 
> - 	Object documentation whatIsAPrimitive."
> 
> + 	^ self basicClass!
> - 	<primitive: 111>
> - 	self primitiveFailed!
>
> Item was changed:
>  ----- Method: Object>>storeDataOn: (in category 'objects from disk') -----
>  storeDataOn: aDataStream
>  	"Store myself on a DataStream.  Answer self.  This is a low-level DataStream/ReferenceStream method. See also objectToStoreOnDataStream.  NOTE: This method must send 'aDataStream beginInstance:size:' and then (nextPut:/nextPutWeak:) its subobjects.  readDataFrom:size: reads back what we write here."
>  	| cntInstVars cntIndexedVars |
>
>  	cntInstVars := self class instSize.
>  	cntIndexedVars := self basicSize.
>  	aDataStream
> + 		beginInstance: self class
> - 		beginInstance: self xxxClass
>  		size: cntInstVars + cntIndexedVars.
>  	1 to: cntInstVars do:
>  		[:i | aDataStream nextPut: (self instVarAt: i)].
>
>  	"Write fields of a variable length object.  When writing to a dummy
>  		stream, don't bother to write the bytes"
>  	((aDataStream byteStream class == DummyStream) and: [self class isBits]) ifFalse: [
>  		1 to: cntIndexedVars do:
>  			[:i | aDataStream nextPut: (self basicAt: i)]].
>  !
>
> Item was removed:
> - ----- Method: Object>>xxxClass (in category 'class membership') -----
> - xxxClass
> - 	"For subclasses of nil, such as ObjectOut"
> - 	^ self class!


More information about the Squeak-dev mailing list