Dynamic namespaces via exceptions

Trygve Reenskaug trygver at ifi.uio.no
Sat May 14 09:41:45 UTC 2005


In BabyUML, I am experimenting with a very dynamic namespace that is put on 
the stack, that exists during the execution of a block, and that is visible 
to all methods called directly or indirectly from the block.

It seems to work using the exeception mechanism, but I would appreciate 
assistance to check if I am doing something ugly or dangerous.

The namespace class is called Map and is a subclass of Exception.

I create aMap with the desired contents and put it on the stack with:

       [body statements] on: aMap do: [:ex | ].

Any method called from the body statements get hold of the map by this method:

   map
     | ctx map |
     ctx := thisContext.
     [ ctx := ctx findNextHandlerContextStarting.
         ctx isNil or: [(map := ctx tempAt: 1) isKindOf: DNetMap]
     ] whileFalse: [ctx := ctx sender].
     ^ctx
         ifNil: [self error: 'No map found.'. nil]
         ifNotNil: [map]

Many thanks for any tips or guidance.
--Trygve

(If this works, it illustratesthe extreme power of Squeak)


-- 

Trygve Reenskaug      mailto: trygver at ifi.uio.no
Morgedalsvn. 5A       http://heim.ifi.uio.no/~trygver
N-0378 Oslo           Tel: (+47) 22 49 57 27
Norway





More information about the Squeak-dev mailing list