On Mon, Nov 22, 2010 at 7:58 PM, David T. Lewis lewis@mail.msen.com wrote:
On Sun, Nov 21, 2010 at 05:06:01PM -0800, Eliot Miranda wrote:
On Sun, Nov 21, 2010 at 3:48 PM, Mariano Martinez Peck < marianopeck@gmail.com> wrote:
On Sun, Nov 21, 2010 at 8:18 PM, David T. Lewis <lewis@mail.msen.com
wrote:
On Sat, Nov 20, 2010 at 08:41:44PM +0100, Mariano Martinez Peck wrote:
On Sat, Nov 20, 2010 at 7:50 PM, Eliot Miranda <
eliot.miranda@gmail.com
wrote:
On Sat, Nov 20, 2010 at 10:28 AM, Mariano Martinez Peck < marianopeck@gmail.com> wrote:
> It doesn't work here. It seems I cannot use SmallInteger like
methods. The
> #run:with:in: is never call and the image crashes. >
That's simply a bug and we should fix it. What crashes, the
Interpreter,
Cog or both? Prepare a reproducible test case (image, change set
etc)
and
we can try and fix this.
To reproduce just file in the attached cs. Then evaluate the
following:
TestCase methodDict at: #assert: put: 4. TestCase new assert: 'zaraza'.
If works, you should have a debugger in SmallInteger >>
#run:with:in:
otherwise, a crash.
I've tested in mac vms like:
Squeak 4.2.5beta1U Squeak 5.8b4
and it crash. In Squeak 64-32 5.7b1 it just hangs forever (I guess at some point
it
will
crash).
And in Cog it works perfect! The problem is that I am using my own
VM
and I
cannot use COG. So, if Cog has fixed this, I would like to know the
changes
so that to apply it to my VM.
Maybe it is already fixed in latest VMMaker, but I couldn't compile it....(other story)
It is definitely not fixed in the latest VMMaker (interpreter).
Thanks Dave. Then I guess it was integrated in Cog by Eliot, or maybe
just
a side effect in Eliot changes that automagically fixed this?
Yes. When I did run:as:in: support for Cog I fixed this. I introduced
isOopCompiledMethod: oop "Answer whether the oop is an object of compiled method format"
<api> ^(self isNonIntegerObject: oop) and: [(self formatOf: oop) >= 12]
and used it in the relevant places. perhaps you could look at the usage
in
Cog and apply the same to the interpreter?
The existing method is
isCompiledMethod: oop "Answer whether the argument object is of compiled method format" ^(self formatOf: oop) >= 12
and may crash if given a SmallInteger (alas on x86 it won't always crash
:)
).
Thanks Eliot,
I put the check only into Interpreter>>lookupMethodInDictionary (not because I wanted to do it differently, but because I'm behind in my email and did not notice your message until now). This seems sufficient for the moment, and I'll make a note to apply your more general fixes in the next update.
Yes, because with only that change there are still problems. For example, if you put a SmallInteger as method and then you send #perform: Example:
TestCase methodDict at: #assert: put: 5. (TestCase >> #assert:) perform: #literals.
cheers
mariano
In any case, it was educational figuring it out on my own :)
Dave