[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
|