<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Eliot -<br>
    <br>
    On 1/25/2012 2:43, Eliot Miranda wrote:
    <blockquote
cite="mid:CAC20JE0HciXBZT3M4s7o1z=ujNSuu7kS1bC5HjiWDJn3ctNO7Q@mail.gmail.com"
      type="cite">On Tue, Jan 24, 2012 at 2:02 PM, Mariano Martinez Peck
      <span dir="ltr">&lt;<a moz-do-not-send="true"
          href="mailto:marianopeck@gmail.com">marianopeck@gmail.com</a>&gt;</span>
      wrote:<br>
      <div class="gmail_quote">
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">
          &nbsp;<br>
          sorry...here is the attached. <br>
        </blockquote>
        <div><br>
        </div>
        <div>OK. What you've done will work.&nbsp; <br>
        </div>
      </div>
    </blockquote>
    <br>
    I actually quite like it. Getting rid of all those methods in class
    ProtoObject is definitely a good thing. Is there any downside other
    than some possible performance issues? I.e., the code should work
    everywhere, right?<br>
    <br>
    <blockquote
cite="mid:CAC20JE0HciXBZT3M4s7o1z=ujNSuu7kS1bC5HjiWDJn3ctNO7Q@mail.gmail.com"
      type="cite">
      <div class="gmail_quote">
        <div>Some criticism: Since the method is new the flushCache
          should be unneeded. &nbsp;I think either copying a template method
          (e.g. stored in a class variable) and &nbsp;changing its argument
          count, or creating a method directly (look at the generate:
          method) would be much faster. &nbsp;Speed can be important in the
          debugger.</div>
      </div>
    </blockquote>
    <br>
    More important in my view is the misuse of the term "temporal" in
    the method names. I find it quite confusing to read about "temporal"
    compiled methods :-)<br>
    <br>
    Cheers,<br>
    &nbsp; - Andreas<br>
    <br>
    <blockquote
cite="mid:CAC20JE0HciXBZT3M4s7o1z=ujNSuu7kS1bC5HjiWDJn3ctNO7Q@mail.gmail.com"
      type="cite">
      <div class="gmail_quote">
        <div><br>
        </div>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
          <div class="gmail_quote">On Tue, Jan 24, 2012 at 11:01 PM,
            Mariano Martinez Peck <span dir="ltr">&lt;<a
                moz-do-not-send="true"
                href="mailto:marianopeck@gmail.com" target="_blank">marianopeck@gmail.com</a>&gt;</span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
              <div class="gmail_quote">
                <blockquote class="gmail_quote" style="margin:0 0 0
                  .8ex;border-left:1px #ccc solid;padding-left:1ex">
                  <div class="gmail_quote">
                    <div>
                      <blockquote class="gmail_quote" style="margin:0 0
                        0 .8ex;border-left:1px #ccc
                        solid;padding-left:1ex">
                        <div class="gmail_quote">
                          <blockquote class="gmail_quote"
                            style="margin:0pt 0pt 0pt
                            0.8ex;border-left:1px solid
                            rgb(204,204,204);padding-left:1ex">
                            <div class="gmail_quote">
                              <div><br>
                              </div>
                              <div>Analogously, one needs a way of
                                invoking named primitives in the
                                debugger, and using
                                tryNamedPrimitive[:with:with:...] et al
                                has exactly the same weaknesses
                                as&nbsp;tryPrimitiveN above. &nbsp;So introducing
                                a primitive to run named primitives is
                                in keeping with&nbsp;tryPrimitive:withArgs:.
                                &nbsp;Using the VisualWorks approach is
                                feasible but violates Occam's razor.</div>
                            </div>
                          </blockquote>
                          <div><br>
                            What what about temporally (to be removed in
                            the future) just when we are using older
                            VMs?<br>
                          </div>
                        </div>
                      </blockquote>
                      <div><br>
                      </div>
                    </div>
                    <div>If temporary, then fine. &nbsp;But its all work :)</div>
                  </div>
                </blockquote>
                <div><br>
                  <br>
                  Well...writing papers can be boring ;)<br>
                  Please, could you take a look to the attached .cs?&nbsp; I
                  tried to do what I had in mind. Since this part of the
                  system is new for me, I have not sure it is correct,
                  nor how to test it. So far what I did for testing it
                  is to take the&nbsp; #tryNamedPrimitiveIn: aCompiledMethod
                  for: aReceiver withArgs: arguments<br>
                  and (temporally) remove the &lt;primitive: 218 error:
                  ec&gt; and define 'ec' as a temporal variable. Since
                  it will be nil, the following code will be executed.<br>
                  Then I put a halt in #open: fileName forWrite:
                  writeMode&nbsp;&nbsp; from StandardFileStream and then I do it:<br>
                  FileDirectory default forceNewFileNamed: 'xxxxx'.<br>
                  Once in the debugger, I went to:<br>
                  <br>
                  StandardFileStream retryWithGC:[self primOpen: f
                  writable: writeMode] <br>
                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; until:[:id| id notNil] <br>
                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; forFileNamed: fileName.<br>
                  <br>
                  did a "through" in the close, and be sure I could do
                  "into" and "step" for #self primOpen: f writable:
                  writeMode&nbsp; (which is a named primitive).<br>
                  <br>
                  is this ok?<br>
                  <br>
                  Thanks Eliot!<br>
                  <br>
                  &nbsp; <br>
                </div>
                <div>
                  <div>
                    <blockquote class="gmail_quote" style="margin:0pt
                      0pt 0pt 0.8ex;border-left:1px solid
                      rgb(204,204,204);padding-left:1ex">
                      <div class="gmail_quote">
                        <div>
                          &nbsp;</div>
                        <blockquote class="gmail_quote" style="margin:0
                          0 0 .8ex;border-left:1px #ccc
                          solid;padding-left:1ex">
                          <div class="gmail_quote">
                            <div>&nbsp;</div>
                            <blockquote class="gmail_quote"
                              style="margin:0pt 0pt 0pt
                              0.8ex;border-left:1px solid
                              rgb(204,204,204);padding-left:1ex">
                              <div class="gmail_quote">
                                <div><br>
                                </div>
                                <blockquote class="gmail_quote"
                                  style="margin:0 0 0
                                  .8ex;border-left:1px #ccc
                                  solid;padding-left:1ex">
                                  Why do we need them in ProtoObject?<br>
                                </blockquote>
                                <div><br>
                                </div>
                                <div>Once
                                  tryNamedPrimitiveIn:for:withArgs: is
                                  implemented in all relevant virtual
                                  machines we don't need them. &nbsp;You'll
                                  notice that there is no trace of the
                                  tryPrimitiveN methods anymore, even
                                  though they're in Smalltalk-80.</div>
                                <div>&nbsp;</div>
                                <blockquote class="gmail_quote"
                                  style="margin:0 0 0
                                  .8ex;border-left:1px #ccc
                                  solid;padding-left:1ex">
                                  Because I'm not sure that adding
                                  primitive to VM is always a good
                                  solution.<br>
                                </blockquote>
                                <div><br>
                                </div>
                                <div>Agreed. &nbsp;But it is in keeping with
                                  the primitive for invoking numbered
                                  primitives, &nbsp;tryPrimitive:withArgs:.</div>
                                <div><br>
                                </div>
                                <div><br>
                                </div>
                                <div>HTH</div>
                                <div>Eliot</div>
                                <div><br>
                                </div>
                                <blockquote class="gmail_quote"
                                  style="margin:0 0 0
                                  .8ex;border-left:1px #ccc
                                  solid;padding-left:1ex">
                                  <br>
                                  Stef<br>
                                  <div>
                                    <div><br>
                                      &gt; On Mon, Jan 23, 2012 at 8:52
                                      AM, Mariano Martinez Peck &lt;<a
                                        moz-do-not-send="true"
                                        href="mailto:marianopeck@gmail.com"
                                        target="_blank">marianopeck@gmail.com</a>&gt;
                                      wrote:<br>
                                      &gt; Hi guys. I usually like to
                                      take a look to ProtoObject and see
                                      what is really needed for the
                                      minimal object. But having 30% of
                                      the methods being
                                      &nbsp;#tryNamedPrimitive:with: * &nbsp;is
                                      not fun.<br>
                                      &gt; So...I wonder, do you think
                                      there could be another way so that
                                      to avoid having all those methods
                                      in ProtoObject ?<br>
                                      &gt;<br>
                                      &gt; Yes there is. &nbsp;I implemented
                                      primitive 218 in Cog,
                                      primitiveDoNamedPrimitiveWithArgs,
                                      which is accessed via<br>
                                      &gt;<br>
                                      &gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      tryNamedPrimitiveIn:
                                      aCompiledMethod for: aReceiver
                                      withArgs: arguments<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |
                                      selector theMethod spec
                                      receiverClass |<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &lt;primitive: 218 error: ec&gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ec
                                      ifNotNil:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ["If ec is an integer other than
                                      -1 there was a problem with
                                      primitive 218,<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; not with the external primitive
                                      itself. &nbsp;-1 indicates a generic
                                      failure (where<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; ec should be nil) but ec = nil
                                      means primitive 218 is not
                                      implemented. &nbsp;So<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; interpret -1 to mean the
                                      external primitive failed with a
                                      nil error code."<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;ec isInteger ifTrue:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; [ec = -1<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [ec :=
                                      nil]<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse: [self
                                      primitiveFailed]].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ^{PrimitiveFailToken. ec}].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Assume
                                      a nil error code implies the
                                      primitive is not implemented and
                                      fall back on the old code."<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Hack.
                                      Attempt to execute the named
                                      primitive from the given compiled
                                      method"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      arguments size &gt; 8 ifTrue:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [^{PrimitiveFailToken. nil}].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      selector := #(<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      tryNamedPrimitive<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      tryNamedPrimitive:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      tryNamedPrimitive:with:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      tryNamedPrimitive:with:with:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      tryNamedPrimitive:with:with:with:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
tryNamedPrimitive:with:with:with:with:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
tryNamedPrimitive:with:with:with:with:with:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
tryNamedPrimitive:with:with:with:with:with:with:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      tryNamedPrimitive:with:with:with:with:with:with:with:)
                                      at: arguments size+1.<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      receiverClass := self objectClass:
                                      aReceiver.<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      theMethod := receiverClass
                                      lookupSelector: selector.<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      theMethod == nil ifTrue:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [^{PrimitiveFailToken. nil}].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spec :=
                                      theMethod literalAt: 1.<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spec
                                      replaceFrom: 1 to: spec size with:
                                      (aCompiledMethod literalAt: 1)
                                      startingAt: 1.<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      Smalltalk
                                      unbindExternalPrimitives.<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^self
                                      object: aReceiver perform:
                                      selector withArguments: arguments
                                      inClass: receiverClass<br>
                                      &gt;<br>
                                      &gt; (cf tryPrimitive: withArgs:)
                                      and used in<br>
                                      &gt;<br>
                                      &gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doPrimitive:
                                      primitiveIndex method: meth
                                      receiver: receiver args: arguments<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      "Simulate a primitive method whose
                                      index is primitiveIndex. &nbsp;The
                                      simulated receiver<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and
                                      arguments are given as arguments
                                      to this message. Any primitive
                                      which provokes<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;execution needs to be intercepted
                                      and simulated to avoid execution
                                      running away."<br>
                                      &gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | value
                                      |<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "If
                                      successful, push result and return
                                      resuming context, else ^ {
                                      PrimitiveFailToken. errorCode }"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      (primitiveIndex = 19) ifTrue:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [ToolSet<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; debugContext: self<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; label:'Code simulation
                                      error'<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; contents: nil].<br>
                                      &gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      "ContextPart&gt;&gt;blockCopy:;
                                      simulated to get startpc right"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      (primitiveIndex = 80 and: [(self
                                      objectClass: receiver)
                                      includesBehavior: ContextPart])<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifTrue: [^self push:
                                      ((BlockContext newForMethod:
                                      receiver method)<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      home: receiver home<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      startpc: pc + 2<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      nargs: (arguments at: 1))].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      (primitiveIndex = 81 and: [(self
                                      objectClass: receiver) ==
                                      BlockContext])
                                      "BlockContext&gt;&gt;value[:value:...]"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifTrue: [^receiver pushArgs:
                                      arguments from: self].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      (primitiveIndex = 82 and: [(self
                                      objectClass: receiver) ==
                                      BlockContext])
                                      "BlockContext&gt;&gt;valueWithArguments:"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifTrue: [^receiver pushArgs:
                                      arguments first from: self].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      primitiveIndex = 83 "afr 9/11/1998
                                      19:50"
                                      "Object&gt;&gt;perform:[with:...]"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifTrue: [^self send: arguments
                                      first<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; to:
                                      receiver<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; with:
                                      arguments allButFirst<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super:
                                      false].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      primitiveIndex = 84 "afr 9/11/1998
                                      19:50 &amp; eem 8/18/2009 17:04"
                                      "Object&gt;&gt;perform:withArguments:"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifTrue: [^self send: arguments
                                      first<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; to:
                                      receiver<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; with:
                                      (arguments at: 2)<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      startClass: nil].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      primitiveIndex = 100 "eem
                                      8/18/2009 16:57"
                                      "Object&gt;&gt;perform:withArguments:inSuperclass:"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifTrue: [^self send: arguments
                                      first<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; to:
                                      receiver<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; with:
                                      (arguments at: 2)<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      startClass: (arguments at: 3)].<br>
                                      &gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      "Mutex&gt;&gt;primitiveEnterCriticalSection<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;Mutex&gt;&gt;primitiveTestAndSetOwnershipOfCriticalSection"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      (primitiveIndex = 186 or:
                                      [primitiveIndex = 187]) ifTrue:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [| active effective |<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;active := Processor
                                      activeProcess.<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;effective := active
                                      effectiveProcess.<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;"active == effective"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;value := primitiveIndex = 186<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:
                                      [receiver
                                      primitiveEnterCriticalSectionOnBehalfOf:
                                      effective]<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:
                                      [receiver
                                      primitiveTestAndSetOwnershipOfCriticalSectionOnBehalfOf:
                                      effective].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;^(value isArray<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; and: [value size = 2<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; and: [value first ==
                                      PrimitiveFailToken]])<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [value]<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; ifFalse: [self push:
                                      value]].<br>
                                      &gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      primitiveIndex = 188 ifTrue: "eem
                                      5/27/2008 11:10
                                      Object&gt;&gt;withArgs:executeMethod:"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [^MethodContext<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; sender: self<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; receiver: receiver<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; method: (arguments at: 2)<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; arguments: (arguments at:
                                      1)].<br>
                                      &gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      "Closure primitives"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      (primitiveIndex = 200 and: [self
                                      == receiver]) ifTrue:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      "ContextPart&gt;&gt;closureCopy:copiedValues:;
                                      simulated to get startpc right"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [^self push: (BlockClosure<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      outerContext: receiver<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      startpc: pc + 2<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      numArgs: arguments first<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      copiedValues: arguments last)].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ((primitiveIndex between: 201 and:
                                      205) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;"BlockClosure&gt;&gt;value[:value:...]"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; or:
                                      [primitiveIndex between: 221 and:
                                      222]) ifTrue:
                                      "BlockClosure&gt;&gt;valueNoContextSwitch[:]"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [^receiver
                                      simulateValueWithArguments:
                                      arguments caller: self].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      primitiveIndex = 206 ifTrue: &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;
                                      &nbsp;"BlockClosure&gt;&gt;valueWithArguments:"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [^receiver
                                      simulateValueWithArguments:
                                      arguments first caller: self].<br>
                                      &gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      primitiveIndex = 118 ifTrue:
                                      "tryPrimitive:withArgs:; avoid
                                      recursing in the VM"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [(arguments size = 2<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;and: [arguments first isInteger<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;and: [arguments last class ==
                                      Array]]) ifFalse:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; [^ContextPart
                                      primitiveFailTokenFor: nil].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp;^self doPrimitive: arguments
                                      first method: meth receiver:
                                      receiver args: arguments last].<br>
                                      &gt;<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value
                                      := primitiveIndex = 120 "FFI
                                      method"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue: [(meth
                                      literalAt: 1)
                                      tryInvokeWithArguments: arguments]<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      [primitiveIndex = 117 "named
                                      primitives"<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifTrue: [self tryNamedPrimitiveIn:
                                      meth for: receiver withArgs:
                                      arguments]<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifFalse:<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      &nbsp; &nbsp; &nbsp; [receiver tryPrimitive:
                                      primitiveIndex withArgs:
                                      arguments]].<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^(value
                                      isArray<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      and: [value size = 2<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      and: [value first ==
                                      PrimitiveFailToken]])<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifTrue: [value]<br>
                                      &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
                                      ifFalse: [self push: value]<br>
                                      &gt;<br>
                                      &gt; (find attached). &nbsp;But these
                                      need implementing in the standard
                                      VM before they can be used in
                                      Pharo, Squeak, etc.<br>
                                      &gt;<br>
                                      &gt;<br>
                                      &gt; Thanks<br>
                                      &gt;<br>
                                      &gt; --<br>
                                      &gt; Mariano<br>
                                      &gt; <a moz-do-not-send="true"
                                        href="http://marianopeck.wordpress.com"
                                        target="_blank">http://marianopeck.wordpress.com</a><br>
                                      &gt;<br>
                                      &gt;<br>
                                      &gt;<br>
                                      &gt;<br>
                                      &gt; --<br>
                                      &gt; best,<br>
                                      &gt; Eliot<br>
                                      &gt;<br>
                                      <br>
                                      <br>
                                    </div>
                                  </div>
                                </blockquote>
                              </div>
                              <br>
                              <br clear="all">
                              <div><br>
                              </div>
                              -- <br>
                              best,
                              <div>Eliot</div>
                              <br>
                              <br>
                            </blockquote>
                          </div>
                          <br>
                          <br clear="all">
                          <br>
                          -- <br>
                          Mariano<br>
                          <a moz-do-not-send="true"
                            href="http://marianopeck.wordpress.com"
                            target="_blank">http://marianopeck.wordpress.com</a><br>
                          <br>
                          <br>
                        </blockquote>
                      </div>
                      <br>
                      <br clear="all">
                      <div><br>
                      </div>
                      -- <br>
                      best,
                      <div>Eliot</div>
                      <br>
                      <br>
                    </blockquote>
                  </div>
                </div>
              </div>
              <span><font color="#888888"><br>
                  <br clear="all">
                  <br>
                  -- <br>
                  Mariano<br>
                  <a moz-do-not-send="true"
                    href="http://marianopeck.wordpress.com"
                    target="_blank">http://marianopeck.wordpress.com</a><br>
                  <br>
                </font></span></blockquote>
          </div>
          <br>
          <br clear="all">
          <br>
          -- <br>
          Mariano<br>
          <a moz-do-not-send="true"
            href="http://marianopeck.wordpress.com" target="_blank">http://marianopeck.wordpress.com</a><br>
          <br>
          <br>
        </blockquote>
      </div>
      <br>
      <br clear="all">
      <div><br>
      </div>
      -- <br>
      best,
      <div>Eliot</div>
      <br>
    </blockquote>
  </body>
</html>