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

commits at source.squeak.org commits at source.squeak.org
Sun Jun 29 06:21:03 UTC 2014


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

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

Name: VMMaker.oscog-eem.789
Author: eem
Time: 28 June 2014, 11:34:29.837 pm
UUID: 3a58fbfc-b349-47bd-9bd6-17b66722be2b
Ancestors: VMMaker.oscog-eem.788

Fix slip in StackInterpreter>>actuallyFollowNecessaryForwardingInMethod:literalCount:
that corrups the methodClassAssociation.

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

Item was changed:
  ----- Method: CoInterpreter>>actuallyFollowNecessaryForwardingInMethod: (in category 'lazy become') -----
  actuallyFollowNecessaryForwardingInMethod: methodObj
  	"To avoid any chance of a forwarded object during super sends
  	 we follow the methodClassAssociation.  The forwarded object
  	 send fault only copes with normal sends to instances."
  	| cogMethod header litCount |
  	<var: #cogMethod type: #'CogMethod *'>
  	header := self rawHeaderOf: methodObj.
  	(self isCogMethodReference: header) ifTrue:
  		[cogMethod := self cCoerceSimple: header to: #'CogMethod *'.
  		 "If the method class is not used we can avoid the forwarding
+ 		  check for both the cogMethod and the bytecoded method."
- 		  check for both the cogMehod and the bytecoded method."
  		 cogMethod cmUsesMethodClass ifFalse:
  			[^self].
  		 cogit followForwardedLiteralsIn: cogMethod.
  		 header := cogMethod methodHeader].
  	litCount := self literalCountOfHeader: header. "Slang super expansion limitation"
  	super
  		actuallyFollowNecessaryForwardingInMethod: methodObj
  		literalCount: litCount!

Item was changed:
  ----- Method: StackInterpreter>>actuallyFollowNecessaryForwardingInMethod:literalCount: (in category 'lazy become') -----
  actuallyFollowNecessaryForwardingInMethod: methodObj literalCount: litCount
  	"To avoid any chance of a forwarded object during super sends we follow the
  	 methodClassAssociation.  The forwarded object send fault only copes with
  	 normal sends to instances.  Inline methodClassAssociation access for speed."
  	| assoc classObj |
  	<option: #SpurObjectMemory>
  	<inline: true>
  	assoc := self literal: litCount - 1 ofMethod: methodObj.
  	(objectMemory isForwarded: assoc) ifTrue:
  		[assoc := objectMemory followForwarded: assoc.
  		 objectMemory
  			storePointer: litCount + LiteralStart - 1
  			ofObject: methodObj
  			withValue: assoc].
  	(objectMemory numSlotsOf: assoc) >= (ValueIndex + 1) ifTrue:
  		[classObj := objectMemory fetchPointer: ValueIndex ofObject: assoc.
  		 (objectMemory isForwarded: classObj) ifTrue:
+ 			[classObj := objectMemory followForwarded: classObj.
- 			[classObj := objectMemory followForwarded: assoc.
  			 objectMemory storePointer: ValueIndex ofObject: assoc withValue: classObj]]!



More information about the Vm-dev mailing list