[squeak-dev] how to see primitive source these days?

David T. Lewis lewis at mail.msen.com
Tue Jan 10 14:06:32 UTC 2017


How to see primitive source these days:

The code is in the VMMaker repository 'http://source.squeak.org/VMMaker'.

For the Spur VM, the package is 'VMMaker.oscog'. For purposes of just
taking a quick look at the code, you can load the latest version
VMMaker.oscog-eem.2079 (this will not exactly corresponding to the version
you are running but here I assume you just want a quick look at what
primitive 105 is doing).

To find the numbered primitive, see CoInterpreter class>>initializePrimitiveTable,
which calls StackInterpreter class>>initializePrimitiveTable, which shows
primitive 105 as #primitiveStringReplace.

The Smalltalk code for this primitive is InterpreterPrimitives>>primitiveStringReplace.
The generated C code for this can be found in the GitHub repository
https://github.com/OpenSmalltalk/opensmalltalk-vm, look for the
primitiveStringReplace function in opensmalltalk-vm/src/vm/gcc3x-cointerpmt.c.

Dave



On Tue, Jan 10, 2017 at 07:57:31AM -0500, Bob Arning wrote:
> I'm was copying a FloatArray and it seems not to be using the primitive 
> to move the data over to the copy. 
> Float>>replaceFrom:to:with:startingAt: says it uses a primitive, but it 
> seem to fallback to the code in SequenceableCollection. How can I see 
> the priitive code to see what the issue may be? This is what it says it 
> does:
> 
> replaceFrom: start to: stop with: replacement startingAt: repStart     
> "Primitive. This destructively replaces elements from start to stop in 
> the receiver starting at index, repStart, in the collection, 
> replacement. Answer the receiver. Range checks are performed in the 
> primitive only. Optional. See Object documentation whatIsAPrimitive." 
>     <primitive: 105>     super replaceFrom: start to: stop with: 
> replacement startingAt: repStart
> 
> This is what I did to see if the prim failed:
> 
> replaceFrom: start to: stop with: replacement startingAt: repStart     
> "Primitive. This destructively replaces elements from start to stop in 
> the receiver starting at index, repStart, in the collection, 
> replacement. Answer the receiver. Range checks are performed in the 
> primitive only. Optional. See Object documentation whatIsAPrimitive." 
>     <primitive: 105>     WOOPS ifNil: [         WOOPS _ #WOOPS.         
> self halt     ].     super replaceFrom: start to: stop with: replacement 
> startingAt: repStart
> 
> And it did fail and I'm puzzled as to why:
> 
> Halt:
> 10 January 2017 7:46:09.382669 am
> 
> VM: Mac OS - Smalltalk
> Image: Squeak5.1 [latest update: #16548]
> 
> SecurityManager state:
> Restricted: false
> FileAccess: true
> SocketAccess: true
> Working Dir 
> /Users/bob/squeak/Squeak5.1-16548-64bit-All-in-One/Squeak5.1-16548-64bit-All-in-One.app/Contents/Resources
> Trusted Dir /Users/bob/Library/Application Support/Squeak/
> Untrusted Dir /Users/bob/Documents/Squeak/
> 
> FloatArray(Object)>>halt
>     Receiver: a FloatArray(0.0 0.0 0.0)
>     Arguments and temporary variables:
> 
>     Receiver's instance variables:
> a FloatArray(0.0 0.0 0.0)
> FloatArray>>replaceFrom:to:with:startingAt:
>     Receiver: a FloatArray(0.0 0.0 0.0)
>     Arguments and temporary variables:
>         start:     1
>         stop:     3
>         replacement:     a FloatArray(1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 
> 1.0 1.0 1.0 1.0 1.0 1...etc...
>         repStart:     1
>     Receiver's instance variables:
> a FloatArray(0.0 0.0 0.0)
> FloatArray(SequenceableCollection)>>copyFrom:to:
>     Receiver: a FloatArray(1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 
> 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1...etc...
>     Arguments and temporary variables:
>         start:     1
>         stop:     3
>         newSize:     3
>     Receiver's instance variables:
> a FloatArray(1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 
> 1.0 1.0 1.0 1.0 1...etc...
> ConvolutionalLayer>>forward:isTraining:
> 

> 



More information about the Squeak-dev mailing list