[Vm-dev] VM Maker: VMMaker.oscog-eem.351.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Sep 5 23:56:48 UTC 2013
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.351.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.351
Author: eem
Time: 5 September 2013, 4:53:56.386 pm
UUID: 46f2620a-7a44-4fb9-98c7-ffa9ee43f01f
Ancestors: VMMaker.oscog-eem.350
Add primitives for encoding and decoding immediate characters.
Base VM knowing whether immediate characters exist or not
on CharacterTableIndex being nil or not.
=============== Diff against VMMaker.oscog-eem.350 ===============
Item was added:
+ ----- Method: InterpreterPrimitives>>primitiveAsCharacter (in category 'object access primitives') -----
+ primitiveAsCharacter
+ | characterCode characterObject |
+ characterCode := self stackTop.
+ ((objectMemory isIntegerObject: characterCode)
+ and: [characterCode := objectMemory integerValueOf: characterCode.
+ objectMemory isInRangeCharacterCode: characterCode]) ifFalse:
+ [^self primitiveFailFor: (argumentCount = 0
+ ifTrue: [PrimErrBadReceiver]
+ ifFalse: [PrimErrBadArgument])].
+ characterObject := self characterForAscii: characterCode.
+ self pop: argumentCount + 1 thenPush: characterObject!
Item was added:
+ ----- Method: InterpreterPrimitives>>primitiveCharacterValue (in category 'object access primitives') -----
+ primitiveCharacterValue
+ | characterCode characterObject |
+ characterObject := self stackTop.
+ characterCode := CharacterTable
+ ifNil: [objectMemory integerObjectOf: (objectMemory characterValueOf: characterObject)]
+ ifNotNil: [objectMemory fetchPointer: CharacterValueIndex ofObject: characterObject].
+ "the Character must be the receiver for safety"
+ self pop: 1 thenPush: characterCode!
Item was added:
+ ----- Method: ObjectMemory>>isInRangeCharacterCode: (in category 'interpreter access') -----
+ isInRangeCharacterCode: characterCode
+ ^characterCode >= 0 and: [characterCode <= 255]!
Item was added:
+ ----- Method: SpurMemoryManager>>characterValueOf: (in category 'immediates') -----
+ characterValueOf: oop
+ "Immediate characters are unsigned"
+ ^(self cCoerceSimple: oop to: #'unsigned long') >> self numTagBits!
Item was added:
+ ----- Method: SpurMemoryManager>>isInRangeCharacterCode: (in category 'immediates') -----
+ isInRangeCharacterCode: characterCode
+ ^characterCode >= 0 and: [characterCode < (2 raisedTo: 30)]!
Item was changed:
----- Method: StackInterpreter class>>initializePrimitiveTable (in category 'initialization') -----
(excessive size, no diff calculated)
Item was changed:
----- Method: StackInterpreter>>characterForAscii: (in category 'indexing primitive support') -----
+ characterForAscii: ascii "Above ObjectMemory, arg must lie in range 0-255!!"
- characterForAscii: ascii "Arg must lie in range 0-255!!"
<inline: true>
+ ^CharacterTable
+ ifNil: [objectMemory characterObjectOf: ascii]
+ ifNotNil: [objectMemory fetchPointer: ascii ofObject: objectMemory characterTable]!
- ^ objectMemory fetchPointer: ascii ofObject: (objectMemory splObj: CharacterTable)!
More information about the Vm-dev
mailing list