[Vm-dev] I really don't understand why this doesn't crash

Torsten Bergmann astares at gmx.de
Wed May 18 09:26:41 UTC 2011


>But I guess that should crash.

Try to debug using a #halt:

(FooClass >> #foo) halt valueWithReceiver: inst arguments: #()

This will crash the debugger with an bounds error. 

Now put an additionall "self halt" into #foo as the first line

   foo
    self halt.
    Transcript show: var5 asString.
  
You will now notice that the debugger works and you can step 
through. There it jumps from #withArgs:executeMethod: 
(which is implemented in primitive 188) directly into #foo.

You will end up in #foo with inst as receiver and the debugger
shows that it was called on AnotherClass but found in FooClass.
see the top line of the stack:

  AnotherClass(FooClass)>>foo

But AnotherClass is not a subclass of FooClass so there are more
side effects.

So I guess primitive 188 does not do any checking and
later a random value is returned depending on what is in memory.
But I can only guess...

Bye
T. 

 

-- 
NEU: FreePhone - kostenlos mobil telefonieren und surfen!			
Jetzt informieren: http://www.gmx.net/de/go/freephone


More information about the Vm-dev mailing list