[Pharo-project] RoarVM - Pharo and Squeak on Multicore

Stéphane Ducasse stephane.ducasse at inria.fr
Sat Nov 6 10:16:53 CET 2010


Should it be included in pharo?
IfTrue: open a bug tracker issue

>>> From my understanding, the idea is that if there is no event, the primitive will fail.
>>> And all other images have that case covered. They set the first array index to EventTypeNone.
>>> 
>>> Thus, "InputEventFetcher>>primGetNextEvent: array" should look like:
>>> 
>>> primGetNextEvent: array
>>>       "Store the next OS event available into the provided array.
>>>       Essential."
>>>       <primitive: 94>
>>>       array at: 1 put: EventTypeNone. "STEFAN: Added this line"
>>>       ^nil
>>> 
>>> However, since Pharo works on the other VM, I guess the primitive there is filling in the first slot of the array anyway.
>>> So, what is the specification? I think the primitives have changed since 'the bluebook'.
>> 
>> Just to ask that question again: What is the conclusion, is the bug in the image or in the VM?
>> 
> 
> Here the Squeak implementation of it:
> 
> primGetNextEvent: array
> 	"Store the next OS event available into the provided array.
> 	Essential. If the VM is not event driven the ST code will fall
> 	back to the old-style mechanism and use the state based
> 	primitives instead."
> 	| kbd buttons modifiers pos mapped |
> 	<primitive: 94>
> 	"Simulate the events"
> 	array at: 1 put: EventTypeNone. "assume no more events"
> 
> 	"First check for keyboard"
> 	kbd := super primKbdNext.
> 	kbd = nil ifFalse:[
> 		"simulate keyboard event"
> 		array at: 1 put: EventTypeKeyboard. "evt type"
> 		array at: 2 put: Time millisecondClockValue. "time stamp"
> 		array at: 3 put: (kbd bitAnd: 255). "char code"
> 		array at: 4 put: EventKeyChar. "key press/release"
> 		array at: 5 put: (kbd bitShift: -8). "modifier keys"
> 		^self].
> 
> 	"Then check for mouse"
> 	buttons := super primMouseButtons.
> 	pos := super primMousePt.
> 	modifiers := buttons bitShift: -3.
> 	buttons := buttons bitAnd: 7.
> 	mapped := self mapButtons: buttons modifiers: modifiers.
> 	(pos = mousePosition and:[(mapped bitOr: (modifiers bitShift: 3)) =
> mouseButtons])
> 		ifTrue:[^self].
> 	array
> 		at: 1 put: EventTypeMouse;
> 		at: 2 put: Time millisecondClockValue;
> 		at: 3 put: pos x;
> 		at: 4 put: pos y;
> 		at: 5 put: mapped;
> 		at: 6 put: modifiers.
> 
> so, i assume that problem is in Pharo , which does not handling a
> primitive failure correctly (by setting
> array at: 1 put: EventTypeNone. )
> 
>> Thanks
>> Stefan
>> 
>> 
>> --
>> Stefan Marr
>> Software Languages Lab
>> Vrije Universiteit Brussel
>> Pleinlaan 2 / B-1050 Brussels / Belgium
>> http://soft.vub.ac.be/~smarr
>> Phone: +32 2 629 2974
>> Fax:   +32 2 629 3525
>> 
>> 
>> 
> 
> 
> 
> -- 
> Best regards,
> Igor Stasenko AKA sig.
> 





More information about the Pharo-project mailing list