[Vm-dev] VM Maker: VMMaker.oscog-eem.2752.mcz

commits at source.squeak.org commits at source.squeak.org
Fri May 8 03:11:13 UTC 2020


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2752.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.2752
Author: eem
Time: 7 May 2020, 8:10:56.388975 pm
UUID: 38b47b95-fe1d-4843-a9ec-5cd233270c46
Ancestors: VMMaker.oscog-eem.2751

InterpreterProxy API:
Add identityHashOf; the PyBridge needs it to not hack around Spur.

Slang: Fix a bug when inlining a send whose result is assigned and which includes a literal block that returns.

=============== Diff against VMMaker.oscog-eem.2751 ===============

Item was added:
+ ----- Method: InterpreterPrimitives>>identityHashOf: (in category 'primitive support') -----
+ identityHashOf: anOop
+ 	"Answer the identity hash of an object, assigning a hash if it doesn't have one.
+ 	 On Spur refuse to assign a hash to something that looks like a behavior."
+ 	<api>
+ 	(objectMemory isImmediate: anOop) ifTrue:
+ 		[^self
+ 			immediateAsInteger: anOop
+ 			ifFail: [-1]].
+ 	(objectMemory hasSpurMemoryManagerAPI
+ 	 and: [(objectMemory rawHashBitsOf: anOop) = 0
+ 	 and: [objectMemory objCouldBeClassObj: anOop]]) ifTrue:
+ 		[^-1].
+ 	^objectMemory hashBitsOf: anOop!

Item was added:
+ ----- Method: InterpreterPrimitives>>immediateAsInteger:ifFail: (in category 'primitive support') -----
+ immediateAsInteger: anOop ifFail: aBlock
+ 	<inline: #always>
+ 	(objectMemory isIntegerObject: anOop) ifTrue:
+ 		[^objectMemory integerValueOf: anOop].
+ 	(objectMemory isCharacterObject: anOop) ifTrue:
+ 		[^objectMemory characterValueOf: anOop].
+ 	(objectMemory isImmediateFloat: anOop) ifTrue:
+ 		[^objectMemory rotatedFloatBitsOf: anOop].
+ 	^aBlock value!

Item was changed:
  ----- Method: InterpreterPrimitives>>primitiveImmediateAsInteger (in category 'arithmetic float primitives') -----
  primitiveImmediateAsInteger
  	"For a Smalllnteger, answer itself.
  	 For a Character, answer its code as an unsigned integer.
  	 For a SmallFloat, answer the signed, but unadjusted bit pattern (so as to keep the result a SmallInteger).
  	 This is a good value for an immediate's hash."
  	<option: #SpurObjectMemory>
  	| oop value |
  	oop := self stackTop.
+ 	value := self
+ 				immediateAsInteger: oop
+ 				ifFail: [^self primitiveFailFor: PrimErrBadReceiver].
- 	(objectMemory isIntegerObject: oop) ifTrue:
- 		[value := objectMemory integerValueOf: oop] ifFalse:
- 	[(objectMemory isCharacterObject: oop) ifTrue:
- 		[value := objectMemory characterValueOf: oop] ifFalse:
- 	[(objectMemory isImmediateFloat: oop) ifTrue:
- 		[value := objectMemory rotatedFloatBitsOf: oop] ifFalse:
- 	[^self primitiveFailFor: PrimErrBadReceiver]]].
  	self pop: argumentCount + 1 thenPushInteger: value!

Item was added:
+ ----- Method: InterpreterProxy>>identityHashOf: (in category 'object access') -----
+ identityHashOf: anObject
+ 	"N.B. this method will assign an identityHash to an object that does not already have one."
+ 	^anObject identityHash!

Item was changed:
  ----- Method: TAssignmentNode>>emitValueExpansionOn:level:generator: (in category 'C code generation') -----
  emitValueExpansionOn: aStream level: level generator: aCodeGen
  	| stmtList lastStmt copiedStatements |
  	self assert: (expression isSend and: [expression isValueExpansion]).
  	stmtList := expression receiver.
  	lastStmt := stmtList statements last.
+ 	(lastStmt = variable or: [lastStmt isReturn]) ifTrue:
- 	lastStmt = variable ifTrue:
  		[^expression emitCCodeOn: aStream level: level generator: aCodeGen].
  	copiedStatements := stmtList copy.
  	copiedStatements statements
  		at: stmtList statements size
  		put: (TAssignmentNode new
  				setVariable: variable
  				expression: lastStmt).
  	expression copy
  		receiver: copiedStatements;
  		emitCCodeOn: aStream level: level generator: aCodeGen!



More information about the Vm-dev mailing list