#class and #== optimalizations

Pavel Krivánek squeak1 at continentalbrno.cz
Wed Jun 30 10:33:02 UTC 2004


Hi Rob,

I think that the clearest solution is to modify the compiler. Remove all
optimalizations including jumps in bytecodes for ifTrue:ifFalse:, caseOf:
etc. Then recompile whole image. But this step will produce much slower code
:-(

The other possible solution is to make special bytecode executor. It should
remove optimalizations on the fly. Processes which need to use proxies will
run in special simulated mode. It would be slow, but more general solution.

Pavel


> hi Pavel,
>
> I also needed to intercept these two messages with my use of proxies in
> SqueakElib.  I have a vm patch that pass through those bytecodes here:
> http://kilana.unibe.ch:8888/squeakelib/SqueakElibVM-rww.1.mcz
>
> That blocks the bytecodes but there are still three methods you need.
> I have attached that file.  Note that I hand edited the order of
> methods to put #basicEquivalence: before #==.
>
> One other class of methods that need consideration are those of the
> #ifTrue:ifFalse: varients.  If the receiver isn't a boolean, you get a
> MustBeBoolean (or whatever it is) error.   Tim mentioned this to me and
> said that changing these could have a noticable impact on the system.
> :-(  Maybe we could change the MustBeBoolean to a msg send, like
> #cannotInterpret or doesNotUnderstand:.  Then we could catch it.   I
> haven't attempted any solution for this case.
>
> Rob
>
>
>


----------------------------------------------------------------------------
----




On Wednesday, June 30, 2004, at 12:34 AM, Pavel Køivánek wrote:

> Hi all,
>
> Monticello has a problem with this class construction:
>
> ProtoObject subclass: #MyClass
>             instanceVariableNames: 'object'
>             classVariableNames: ''
>             poolDictionaries: ''
>             category: 'MyClasses.
> MyClass superclass: nil
>
> It forgets the last line with superclass specification.
>
>
> I'm using it for proxy objects. Instances of MyClass have one variable
> to
> store a real receiver of messages. MyClass resends messages using
> doesNotUnderstand mechanism.
>
> doesNotUnderstand: aMessage
>
>             ^ aMessage sendTo: object.
>
> It works well but there is one problem - Squeak uses optimalization of
> some
> message calls. For example, message #class is never called, because
> Squeak
> uses special bytecode 199 (bytecodePrimClass). Real class of proxy
> object is
> returned instead of receiver class.
>
> Message #isVariable returns wrong value for arrays, large integers
> etc. So I
> have made a variable subclass of MyClass and I use it for proxy object
> of
> variable receivers. It works well too.
>
> I used this proxy objects for a dictionary and its instance variables
> including tally. This variable stores a size of dictionary. When Squeak
> makes a copy of dictionary array, he sends tally like a parameter in
> constructor
> of new array, but primitive method fails. VM wants an integer instance
> strictly.
>
> Any ideas?
>
>  Pavel
>
>



----------------------------------------------------------------------------
----


>
>




More information about the Squeak-dev mailing list