[Vm-dev] VM Maker: VMMaker.oscog-dtl.1730.mcz
Levente Uzonyi
leves at caesar.elte.hu
Thu Mar 17 18:58:33 UTC 2016
Hi Dave,
You're right. I missed that check at the beginning of the method.
Levente
On Thu, 17 Mar 2016, David T. Lewis wrote:
>
> Hi Levente,
>
> I am away and cannot check it right now, but the primitive is supposed to
> be doing exactly what you say. It should accept zero or one arguments, and
> fail otherwise. If the argument is provided, it must be an object with
> room to store two or more pointers, otherwise the primitive should fail.
> If either of these is not happening, it's a bug.
>
> VMMaker.oscog-dtl.1730.mcz is an update to the oscog branch that should
> add the ability to accept the optional parameter for Cog/Spur. Hopefully I
> got the update right, I'm not sure I tested it as well as I should have
> last night.
>
> If we want to add a variant of the primitive that answers time relative to
> Smalltalk epoch then yes, now would be a good time to do it.
>
> Dave
>
>>
>> Hi Dave,
>>
>> Wouldn't it be better if the primitive were failing for more than one
>> argument?
>> Also, I liked Bert's idea to use the Squeak epoch, and I understand that
>> you want to keep this primitive to use the Unix epoch, but in my opinion
>> this is the best time to add the new primitive for the other variant.
>> Are these changes going to appear in the Cog branch too?
>>
>> Levente
>>
>> On Thu, 17 Mar 2016, commits at source.squeak.org wrote:
>>
>>>
>>> David T. Lewis uploaded a new version of VMMaker to project VM Maker:
>>> http://source.squeak.org/VMMaker/VMMaker.oscog-dtl.1730.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: VMMaker.oscog-dtl.1730
>>> Author: dtl
>>> Time: 16 March 2016, 9:06:26.74934 pm
>>> UUID: ad4e53e1-bdbc-4cb9-b5fb-f1229ca4e19f
>>> Ancestors: VMMaker.oscog-nice.1729
>>>
>>> Allow primitiveUtcWithOffset to accept an optional parameter with an
>>> array or object with two or more slots to store UTC posix microseconds
>>> and time zone offset in seconds. Compatibility with VMM trunk. Note,
>>> consider incorporating ioUtcWithOffset from SVN trunk to provide true
>>> atomic primitive.
>>>
>>> =============== Diff against VMMaker.oscog-nice.1729 ===============
>>>
>>> Item was changed:
>>> ----- Method: InterpreterPrimitives>>primitiveUtcWithOffset (in
>>> category 'system control primitives') -----
>>> primitiveUtcWithOffset
>>> + "Answer an array with UTC microseconds since the Posix epoch and the
>>> + current seconds offset from GMT in the local time zone. An empty two
>>> + element array (or any object with two or more slots) may be supplied
>>> + as a parameter.
>>> - "Answer an array with UTC microseconds since the Posix epoch and
>>> - the current seconds offset from GMT in the local time zone.
>>> This is a named (not numbered) primitive in the null module (ie the
>>> VM)"
>>> | epochDelta offset resultArray utcMicroseconds |
>>>
>>> <export: true>
>>> <var: #epochDelta declareC: 'static usqLong epochDelta=
>>> 2177452800000000ULL'>
>>> <var: #utcMicroseconds type: #usqLong>
>>> <var: #offset type: #sqLong>
>>> + argumentCount > 1 ifTrue: [^self primitiveFailFor:
>>> PrimErrBadNumArgs].
>>> self cCode: '' inSmalltalk: [epochDelta := 2177452800000000].
>>> utcMicroseconds := self ioUTCMicroseconds.
>>> offset := self ioLocalMicroseconds - utcMicroseconds.
>>> offset := offset / 1000000.
>>> objectMemory pushRemappableOop: (self positive64BitIntegerFor:
>>> utcMicroseconds - epochDelta).
>>> + argumentCount > 0
>>> + ifTrue: [resultArray := self popStack.
>>> + ((objectMemory isPointers: resultArray)
>>> + and: [(objectMemory lengthOf: resultArray) >= 2])
>>> + ifFalse: [^self primitiveFailFor: PrimErrBadArgument]]
>>> + ifFalse: [resultArray := objectMemory instantiateClass: objectMemory
>>> classArray indexableSize: 2].
>>> - resultArray := objectMemory instantiateClass: objectMemory classArray
>>> indexableSize: 2.
>>> objectMemory storePointer: 0 ofObject: resultArray withValue:
>>> objectMemory popRemappableOop.
>>> objectMemory storePointerUnchecked: 1 ofObject: resultArray withValue:
>>> (objectMemory integerObjectOf: offset).
>>> self pop: 1 thenPush: resultArray
>>> !
>>>
>>>
>>
>
>
>
More information about the Vm-dev
mailing list