Redirecting messages on the VM

Javier Lanatta javier at lanatta.com.ar
Mon Dec 1 02:55:01 UTC 2003


Oop, two facts:
	1.- You are Jim, Robert is the one who wrote MethodWrappers
	2.- When using Outlook, alt-s DOES NOT save a text, it sends mails
:)

	Thank you again Jim,

	Following with the email I tried to save. As I should modify the VM,
I was wondering if the solutions I presented in my first email, even though
they do not work, where heading to a right point.

Javier

> -----Original Message-----
> From: squeak-dev-bounces at lists.squeakfoundation.org [mailto:squeak-dev-
> bounces at lists.squeakfoundation.org] On Behalf Of Javier Lanatta
> Sent: Sunday, November 30, 2003 11:46 PM
> To: 'The general-purpose Squeak developers list'
> Subject: RE: Redirecting messages on the VM
> 
> Robert,
> 	Thank you for the link (and also thanks to all the people that
> answered). I've read about MethodWrappers when I was looking for what to
> use
> for this research work; but after talking with my teacher he told that one
> of the aims of the project was to do research on the Virtual Machine, and
> that I should modify it in a way it can intercept the messages and sent
> them
> to a centralized object, which later would handle them as needed.
> 
> 
> > -----Original Message-----
> > From: squeak-dev-bounces at lists.squeakfoundation.org [mailto:squeak-dev-
> > bounces at lists.squeakfoundation.org] On Behalf Of Jim Benson
> > Sent: Sunday, November 30, 2003 10:49 PM
> > To: The general-purpose Squeak developers list
> > Subject: Re: Redirecting messages on the VM
> >
> > Hi Javier,
> >
> > Robert Hirschfeld maintains several Squeak packages which are in the
> > problem
> > domain you describe. These are MethodWrappers, AspectS and PerspectiveS.
> > Rather than shortchange them and gloss over them here with a
> description,
> > I'll point you at:
> > http://www-ia.tu-ilmenau.de/~hirsch/Projects/Squeak/Squeak.html . From
> > what
> > you describe, you should find MethodWrappers particularly useful.
> >
> > Hope this helps,
> >
> > Jim Benson
> >
> >
> >
> > ----- Original Message -----
> > From: "Javier Lanatta" <javier at lanatta.com.ar>
> > To: <squeak-dev at lists.squeakfoundation.org>
> > Sent: Sunday, November 30, 2003 3:15 PM
> > Subject: Redirecting messages on the VM
> >
> >
> > > Hi everybody,
> > > I'm doing a research work for my OOD class at university and I'm a
> > > little lost... So I come here looking for your help :) I'm sorry to
> tell
> > you
> > > that this email is gonna be kinda long, anyway I will try to write
> only
> > the
> > > most relevant things.
> > >
> > > For this research work I have to write a set of tools that allows
> > > the user to define what should be done when a given object receives a
> > given
> > > message.
> > > These are examples of what the tools must do:
> > > - When a given instance of RectangleMorph receives #addMorph: this
> > > should be logged and then the instance finally receives the #addMorph:
> > > - When any instance of Array receives #add: this message should be
> > > sent to the instance only if the add's argument belongs to a given
> > class.
> > >
> > > I have most of the model finished. But I have problems intercepting
> > > the messages.
> > >
> > > By now I'm only trying to redirect every message to an object of a
> > > fixed class to another fixed object. Both the class of the first
> object
> > and
> > > the second object are stored in the Special Objects Array. Later I
> will
> > > replace the receiver with a fixed object that will act as an entry
> point
> > and
> > > it will redirect the message inside the "object's world" to other
> > objects
> > > that will do all the work.
> > >
> > > I have tried two approaches without luck.
> > >
> > > 1.- Replace the receiver @ Interpreter>>internalActivateNewMethod
> > >
> > > I overwrote the receiver after the real receiver and its arguments are
> > > stored:
> > > ...
> > > ...
> > > "Copy the reciever and arguments..."
> > > argCount2 _ argumentCount.
> > > 0 to: argCount2 do:
> > > [:i | self storePointerUnchecked: ReceiverIndex+i ofObject:
> > > newContext
> > > withValue: (self internalStackValue: argCount2-i)].
> > >
> > > "here comes my code"
> > > rcvr _ self internalStackValue: argumentCount.
> > > self assertClassOf: rcvr is: (self splObj: MRFAux1).
> > > successFlag ifTrue:
> > > [
> > > self print: 'Intercepting...';cr.
> > > self storePointerUnchecked: ReceiverIndex+argumentCount ofObject:
> > > newContext withValue: (self splObj: MRFAux2).
> > > ].
> > > "and here it ends"
> > > ...
> > > ...
> > >
> > > MRFAux1: Contains the class of the object I want to intercept.
> > > MRFAux2: Contains the receiver.
> > >
> > > I guess I'm storing it in the wrong position... I have tried several
> > indexes
> > > without any good result.
> > >
> > >
> > > 2.- Send the message the same way a #doesNotUnderstand is sent @
> > > Interpreter>>lookupMethodInClass: class
> > >
> > > When the method is found in the dictionary I just send the message to
> > the
> > > other object creating a message in the doesNotUnderstand fashion:
> > >
> > > ....
> > > ....
> > > found _ self lookupMethodInDictionary: dictionary.
> > > found ifTrue: [
> > > rcvr _ self internalStackValue: argumentCount.
> > > self assertClassOf: rcvr is: (self splObj: MRFAux1).
> > > successFlag ifTrue:
> > > self print: 'Intercepting @ lookupMethodInClass...';cr.
> > > self pushRemappableOop: (self splObj: MRFEntryPoint).
> > > self createActualMessageTo: (self splObj: MRFEntryPoint).
> > > rclass _ self popRemappableOop.
> > > messageSelector _ self splObj: MRFAux2.
> > > ^ self lookupMethodInClass: rclass
> > > ] ifFalse: [
> > > ^ methodClass _ currentClass
> > > ].
> > > ].
> > > ....
> > > ....
> > > MRFAux1: Contains the class of the object I want to intercept.
> > > MRFEntryPoint: Contains the receiver.
> > > MRFAux2: Contains the selector I want to send to the new receiver.
> > >
> > > In this case I cant compile the generated code :/
> > >
> > > ./release/gnu-interp.o: In function `findNewMethodInClass':
> > > //D/J4V13R/SqueakImages/TP/src/3.5.1/win32/gnu-interp.c:3388:
> undefined
> > > reference to `lookupMethodInClass'
> > > ./release/gnu-interp.o: In function `interpret':
> > > //D/J4V13R/SqueakImages/TP/src/3.5.1/win32/gnu-interp.c:6756:
> undefined
> > > reference to `lookupMethodInClass'
> > >
> > > I browse the gnu-interp.c file and the function lookupMethodInClass is
> > > missiong, if I remove the lines I added the code is ok... I have no
> clue
> > of
> > > what's going on.
> > >
> > > Is there a better way to do this? Where any of my ideas right? What
> was
> > > wrong in their implementation?
> > >
> > > Thanks in advance,
> > > Javier
> > >
> > >
> > > Some background information:
> > > Squeak Version: 3.6
> > > Virtual Machine: 3.5.1/Tea 1.9 VM (release) from June 21 2003 I've
> been
> > > using Squeak for about 9 months.
> > >
> > >
> > >
> >
> 
> 
> 
> 






More information about the Squeak-dev mailing list