2010/10/22 Mariano Martinez Peck <marianopeck@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.


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

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 ;)

best
Eliot

Interesting!� Thanks Oscar for the question, it make me learn.

Mariano

2010/10/22 Eliot Miranda <eliot.miranda@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@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@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
Pharo-project@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
Pharo-project@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project