[squeak-dev] The Trunk: Compiler-eem.215.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Sep 16 00:10:12 UTC 2011


Eliot Miranda uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-eem.215.mcz

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

Name: Compiler-eem.215
Author: eem
Time: 15 September 2011, 5:09:54.028 pm
UUID: a4ef4332-f69b-4675-8896-723edb2cf487
Ancestors: Compiler-eem.214

Compiler half of second part of changes to revive ability to
create subclasses of CompiledMethod.  Other half is
Kernel-eem.620.

=============== Diff against Compiler-eem.214 ===============

Item was changed:
  ----- Method: MethodNode>>generate (in category 'code generation') -----
  generate
  	"The receiver is the root of a parse tree. Answer a CompiledMethod. The
  	argument, trailer, is the references to the source code that is stored with 
  	every CompiledMethod."
  
+ 	^self generate: CompiledMethodTrailer empty using: CompiledMethod!
- 	^self generate: CompiledMethodTrailer empty!

Item was changed:
  ----- Method: MethodNode>>generate: (in category 'code generation') -----
  generate: trailer 
  	"The receiver is the root of a parse tree. Answer a CompiledMethod.
  	 The argument, trailer, is arbitrary but is typically either the reference
  	 to the source code that is stored with every CompiledMethod, or an
  	 encoding of the method's temporary names."
  
+ 	^self generate: trailer using: CompiledMethod!
- 	| primErrNode blkSize nLits literals stack method |
- 	self generate: trailer ifQuick:
- 			[:m |
- 			  m	literalAt: 2 put: encoder associationForClass;
- 				properties: properties.
- 			^m].
- 	primErrNode := self primitiveErrorVariableName ifNotNil:
- 						[encoder fixTemp: self primitiveErrorVariableName].
- 	encoder supportsClosureOpcodes ifTrue:
- 		[self ensureClosureAnalysisDone.
- 		 encoder rootNode: self. "this is for BlockNode>>sizeCodeForClosureValue:"].
- 	blkSize := (block sizeCodeForEvaluatedValue: encoder)
- 				+ (primErrNode
- 					ifNil: [0]
- 					ifNotNil: [primErrNode sizeCodeForStore: encoder "The VM relies on storeIntoTemp: (129)"]).
- 	method := CompiledMethod
- 				newBytes: blkSize
- 				trailerBytes: trailer 
- 				nArgs: arguments size
- 				nTemps: (encoder supportsClosureOpcodes
- 							ifTrue: [| locals |
- 									locals := arguments,
- 											  temporaries,
- 											  (primErrNode
- 												ifNil: [#()]
- 												ifNotNil: [{primErrNode}]).
- 									encoder
- 										noteBlockExtent: block blockExtent
- 										hasLocals: locals.
- 									locals size]
- 							ifFalse: [encoder maxTemp])
- 				nStack: 0
- 				nLits: (nLits := (literals := encoder allLiterals) size)
- 				primitive: primitive.
- 	nLits > 255 ifTrue:
- 		[^self error: 'Too many literals referenced'].
- 	1 to: nLits do: [:lit | method literalAt: lit put: (literals at: lit)].
- 	encoder streamToMethod: method.
- 	stack := ParseStack new init.
- 	primErrNode ifNotNil: [primErrNode emitCodeForStore: stack encoder: encoder].
- 	stack position: method numTemps.
- 	block emitCodeForEvaluatedValue: stack encoder: encoder.
- 	stack position ~= (method numTemps + 1) ifTrue:
- 		[^self error: 'Compiler stack discrepancy'].
- 	encoder methodStreamPosition ~= (method size - trailer size) ifTrue:
- 		[^self error: 'Compiler code size discrepancy'].
- 	method needsFrameSize: stack size - method numTemps.
- 	method properties: properties.
- 	^method!

Item was changed:
  ----- Method: MethodNode>>generate:ifQuick: (in category 'code generation') -----
  generate: trailer ifQuick: methodBlock
+ 	^self generate: trailer using: CompiledMethod ifQuick: methodBlock!
- 	| v |
- 	(primitive = 0 and: [arguments size = 0 and: [block isQuick]])
- 		ifFalse: [^ self].
- 	v := block code.
- 	v < 0
- 		ifTrue: [^ self].
- 	v = LdSelf
- 		ifTrue: [^ methodBlock value: (CompiledMethod toReturnSelfTrailerBytes: trailer)].
- 	(v between: LdTrue and: LdMinus1 + 3)
- 		ifTrue: [^ methodBlock value: (CompiledMethod toReturnConstant: v - LdSelf trailerBytes: trailer)].
- 	v < ((CodeBases at: LdInstType) + (CodeLimits at: LdInstType))
- 		ifTrue: [^ methodBlock value: (CompiledMethod toReturnField: v trailerBytes: trailer)].
- 	v // 256 = 1
- 		ifTrue: [^ methodBlock value: (CompiledMethod toReturnField: v \\ 256 trailerBytes: trailer)]!

Item was changed:
  ----- Method: MethodNode>>generateWithTempNames (in category 'code generation') -----
  generateWithTempNames
  	"Answer a CompiledMethod with temps names encoded in trailer"
+ 	^self
+ 		generate: (CompiledMethodTrailer new tempNames: self schematicTempNamesString)
+ 		using: CompiledMethod!
- 	^ self generate: (CompiledMethodTrailer new tempNames: self schematicTempNamesString).
- !




More information about the Squeak-dev mailing list