[Pharo-project] What is a primitive method?

Mariano Martinez Peck marianopeck at gmail.com
Fri Oct 22 16:58:07 EDT 2010


2010/10/22 Eliot Miranda <eliot.miranda at gmail.com>

>
>
> 2010/10/22 Mariano Martinez Peck <marianopeck at gmail.com>
>
> THanks Eliot for the explanation.
>> So....The compiler checks and for these kind of special quick methods it
>> creates a CompiledMethod that has in its header, a primitive value ?
>>
>
> A number, yes.  The number answered by CompiledMethod>primitive.
>
>
Ok...thanks Eliot.


>
>> So...if I would be able to put a "self halt" (but I cannot do it becaue
>> otherwise it won't be quick anymore)  in Number>>isNumber, the debugger
>> would never stop there?
>>
>
>
>
> The way to put a break-point around a primitive is to rewrite it as a
> wrapper method around the actual primitive, e.g.
>
> SmallInteger>>+ aNumber
>     <primitive: 1>
>     ^super + aNumber
>
> => SmallInteger>>primitivePlus: aNumber
>         <primitive: 1>
>         ^super + aNumber
>
>     SmallInteger>>+ aNumber
>         FirstTime == nil ifTrue: [FirstTime := false. self halt].
>         ^self primitivePlus: aNumber
>

Ahhh that's true :)
I forget about that...once I did exactly this for FFI calls.


>
> you absolutely need the FirstTime approach (where FirstTie is some global
> you define for the purpose)  to cause the halt to fire once if you're trying
> to break-point a method that is in wide-spread use.  Otherwise the system
> will die a recursive death ;)
>
>
I guess  we can also use self haltOnce ?   which implementations does
exactly that you suggested :)

Thanks!

mariano


> best
> Eliot
>
>
>>
>> Interesting!  Thanks Oscar for the question, it make me learn.
>>
>> Mariano
>>
>> 2010/10/22 Eliot Miranda <eliot.miranda at gmail.com>
>>
>> Hi Oscar,
>>>
>>>     see Object class>>whatIsAPrimitive.  Further, most of the primitive
>>> methods you're seeing are methods that answer self, nil, true false or an
>>> inst var.  See the difference between these:
>>>
>>> SystemNavigation new browseAllSelect: [:m| m isQuick]
>>>
>>> SystemNavigation new browseAllSelect: [:m| m primitive > 0 and: [m
>>> isQuick not]]
>>>
>>> SystemNavigation new browseAllSelect: [:m| m primitive > 0 and: [m
>>> isQuick not and: [(#(117 120) includes: m primitive) not]]]
>>>
>>> HTH
>>> Eliot
>>>
>>>
>>> On Thu, Oct 21, 2010 at 9:18 AM, Oscar E A Callau <
>>> oalvarez at dcc.uchile.cl> wrote:
>>>
>>>>
>>>> Hi all,
>>>>
>>>>     I have a (basic) question:
>>>>
>>>> What is a primitive method?
>>>>
>>>> In pharo 1.1.1, we have CompiledMethod>>primitive that basically return:
>>>>
>>>> 0 if the method is not a primitive method
>>>> >0 otherwise
>>>>
>>>> But if you execute this on i.e. Number>>isNumber or Morph>>#model
>>>> compiled methods you get that these two are primitive methods. Are they
>>>> primitive methods?
>>>>
>>>> Other (related) question is: When I executed the expression:
>>>>
>>>> SystemNavigation default allPrimitiveMethods
>>>>
>>>> , I get a OrderedCollection with 5581 elements. Are all those methods,
>>>> primitive methods?
>>>>
>>>>
>>>> Thanks in advance
>>>> _______________________________________________
>>>> Pharo-project mailing list
>>>> Pharo-project at lists.gforge.inria.fr
>>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>>
>>>
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project at lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project at lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project at lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20101022/f0fc3be2/attachment-0001.html>


More information about the Pharo-dev mailing list