[Vm-dev] VM Maker: Cog-eem.134.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Feb 6 23:12:03 UTC 2014


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

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

Name: Cog-eem.134
Author: eem
Time: 6 February 2014, 3:11:45.304 pm
UUID: 0c1023d1-6676-4f09-a5e0-f80c13b6d2c7
Ancestors: Cog-eem.133

Spur bootstrap:
Fix selectors of replacement methods; these used to be a string
containing ClassPROTOTYPEselector...

Add WideString at: & at:put: primitives.

=============== Diff against Cog-eem.133 ===============

Item was added:
+ ----- Method: SpurBootstrap class>>WideStringPROTOTYPEat: (in category 'method prototypes') -----
+ WideStringPROTOTYPEat: index
+ 	"Answer the Character stored in the field of the receiver indexed by the
+ 	 argument.  Primitive.  Fail if the index argument is not an Integer or is out
+ 	 of bounds.  Essential.  See Object documentation whatIsAPrimitive."
+ 
+ 	<primitive: 63>
+ 	^index isInteger
+ 		ifTrue:
+ 			[self errorSubscriptBounds: index]
+ 		ifFalse:
+ 			[index isNumber
+ 				ifTrue: [self at: index asInteger]
+ 				ifFalse: [self errorNonIntegerIndex]]!

Item was added:
+ ----- Method: SpurBootstrap class>>WideStringPROTOTYPEat:put: (in category 'method prototypes') -----
+ WideStringPROTOTYPEat: index put: aCharacter
+ 	"Store the Character into the field of the receiver indicated by the index.
+ 	 Primitive.  Fail if the index is not an Integer or is out of bounds, or if the
+ 	 argument is not a Character.  Essential.  See Object documentation whatIsAPrimitive."
+ 
+ 	<primitive: 64>
+ 	^aCharacter isCharacter
+ 		ifTrue:
+ 			[index isInteger
+ 				ifTrue: [self errorSubscriptBounds: index]
+ 				ifFalse: [self errorNonIntegerIndex]]
+ 		ifFalse:
+ 			[self errorImproperStore]!

Item was changed:
  ----- Method: SpurBootstrap>>installableMethodFor:selector:className:isMeta: (in category 'bootstrap methods') -----
  installableMethodFor: aCompiledMethod selector: selector className: className isMeta: isMeta
+ 	"Create a sourceless method to install in the bootstrapped image.  It will allow the
+ 	 bootstrap to limp along until the relevant transformed Monticello package is loaded."
+ 	| compiledMethodClass sourcelessMethod bytes newMethod |
- 	| compiledMethodClass sourcelessMethod bytes newMethod methodClass |
  	compiledMethodClass := self findClassNamed: (self findSymbol: #CompiledMethod).
+ 	"the prototypes have source pointers.  the Character methods to be replaced don't."
- 	"the prototypes hve source pointers.  the Character methods to be replaced don't."
  	sourcelessMethod := aCompiledMethod trailer hasSourcePointer
  							ifTrue: [aCompiledMethod copyWithTempsFromMethodNode: aCompiledMethod methodNode]
  							ifFalse: [aCompiledMethod].
  	bytes := sourcelessMethod size - sourcelessMethod initialPC + 1.
  	newMethod := self
  					interpreter: oldInterpreter
  					object: compiledMethodClass
  					perform: (self findSymbol: #newMethod:header:)
  					withArguments: { oldHeap integerObjectOf: bytes.
  									   oldHeap integerObjectOf: sourcelessMethod header }.
+ 	1 to: sourcelessMethod numLiterals - 2 do:
- 	1 to: sourcelessMethod numLiterals - 1 do:
  		[:i| | literal oop |
  		literal := sourcelessMethod literalAt: i.
- 		literal isMethodProperties ifTrue:
- 			[literal := selector].
  		oop := (literal isLiteral or: [literal isVariableBinding])
  					ifTrue:
  						[literal isInteger
  							ifTrue: [oldHeap integerObjectOf: literal]
  							ifFalse: [literalMap at: literal ifAbsent: [self findLiteral: literal]]]
  					ifFalse: "should be a VMObjectProxy"
  						[literal oop].
  		oldHeap storePointer: i ofObject: newMethod withValue: oop].
+ 	oldHeap
+ 		storePointer: sourcelessMethod numLiterals - 1
+ 		ofObject: newMethod
+ 		withValue: (selector isSymbol
+ 						ifTrue: [self findSymbol: selector]
+ 						ifFalse: [selector oop]);
+ 		storePointer: sourcelessMethod numLiterals
+ 		ofObject: newMethod
+ 		withValue: (self methodClassForClassName: className
+ 						isMeta: isMeta).
- 	methodClass := self methodClassForClassName: className isMeta: isMeta.
- 	oldHeap storePointer: sourcelessMethod numLiterals ofObject: newMethod withValue: methodClass.
  	sourcelessMethod initialPC to: sourcelessMethod size do:
  		[:i|
  		oldHeap storeByte: i - 1 ofObject: newMethod withValue: (sourcelessMethod byteAt: i)].
  	^newMethod!



More information about the Vm-dev mailing list