[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