It's a special case added a couple year ago to figure out why a primitive fail.
It's a special temporary variable that holds an error code. The special object array defines a list of error code that the VM can use to explain to the programmer why the primitive failed, which are currently symbols. On Wed, Jun 22, 2016 at 4:22 PM, Max Leske <maxle...@gmail.com> wrote: > > > On 22 Jun 2016, at 15:59, stepharo <steph...@free.fr> wrote: > > > > Hi > > > > I want to explain where ec is coming. > > > > I thought that the arguments of pragmas could only be literal and when I > see ec it looks like a variable set by the VM > > > > > > newMethod: numberOfBytes header: headerWord > > "Primitive. Answer an instance of me. The number of literals (and > other > > information) is specified by the headerWord (see my class comment). > > The first argument specifies the number of fields for bytecodes in > the > > method. Fail if either argument is not a SmallInteger, or if > numberOfBytes > > is negative, or if memory is low. Once the header of a method is set > by > > this primitive, it cannot be changed to change the number of > literals. > > Essential. See Object documentation whatIsAPrimitive." > > > > <primitive: 79 error: ec> > > ec == #'insufficient object memory' ifTrue: > > [^self handleFailingNewMethod: numberOfBytes header: headerWord]. > > ^self primitiveFailed > > > > > > Stef > > > > > > That is correct. It’s still a literal though. >