Eliot Miranda uploaded a new version of VMMakerCompatibilityForPharo6 to project VM Maker: http://source.squeak.org/VMMaker/VMMakerCompatibilityForPharo6-eem.1.mcz
==================== Summary ====================
Name: VMMakerCompatibilityForPharo6-eem.1 Author: eem Time: 13 August 2018, 4:11:01.718248 pm UUID: f1ffa3f1-ba2f-0d00-8b88-25d10cb2214f Ancestors:
Compatibility methods and classes for VMMaker when loaded into Pharo6. Right now gets around EndianDetector and the lack of MethodReference.
==================== Snapshot ====================
SystemOrganization addCategory: #VMMakerCompatibilityForPharo6! SystemOrganization addCategory: 'VMMakerCompatibilityForPharo6-System'!
----- Method: SmalltalkImage>>endianness (in category '*VMMakerCompatibilityForPharo6-accessing') ----- endianness "Pluralitas non est ponenda sine necessitate..." ^EndianDetector endianness!
Object subclass: #MethodReference instanceVariableNames: 'classSymbol classIsMeta methodSymbol stringVersion category environment' classVariableNames: 'InvalidReference' poolDictionaries: '' category: 'VMMakerCompatibilityForPharo6-System'!
!MethodReference commentStamp: 'eem 8/13/2018 15:59' prior: 0! A MethodReference is is a lightweight proxy for a CompiledMethod. Has methods for pointed to the CompileMethod's source statements, byte codes. Is heavily used by Tools.
Instance Variables classIsMeta: Boolean class vs. instance classSymbol: Symbol for method's class (without class keyword if meta) methodSymbol: Symbol for method's selector stringVersion: 'Class>>selector:' format!
----- Method: MethodReference class>>class:selector: (in category 'instance creation') ----- class: aClass selector: aSelector ^ self class: aClass selector: aSelector environment: aClass environment.!
----- Method: MethodReference class>>class:selector:environment: (in category 'instance creation') ----- class: aClass selector: aSelector environment: anEnvironment ^ self new setStandardClass: aClass methodSymbol: aSelector environment: anEnvironment.!
----- Method: MethodReference class>>cleanUp: (in category 'class initialization') ----- cleanUp: aggressive
aggressive ifTrue: [InvalidReference := nil].!
----- Method: MethodReference class>>invalid (in category 'instance creation') ----- invalid "Creates an invalid method reference to avoid the usage of nil." ^ InvalidReference ifNil: [ InvalidReference := self new setClassSymbol: #NonExistentClass classIsMeta: false methodSymbol: #nonExistentSelector stringVersion: '<The Invalid Method Reference>']!
----- Method: MethodReference>><= (in category 'comparing') ----- <= anotherMethodReference
classSymbol < anotherMethodReference classSymbol ifTrue: [^true]. classSymbol > anotherMethodReference classSymbol ifTrue: [^false]. classIsMeta = anotherMethodReference classIsMeta ifFalse: [^classIsMeta not]. ^methodSymbol <= anotherMethodReference methodSymbol!
----- Method: MethodReference>>= (in category 'comparing') ----- = anotherMethodReference "Answer whether the receiver and the argument represent the same object." ^ self species == anotherMethodReference species and: [self classSymbol = anotherMethodReference classSymbol and: [self classIsMeta = anotherMethodReference classIsMeta and: [self methodSymbol = anotherMethodReference methodSymbol and: [self environment == anotherMethodReference environment]]]]!
----- Method: MethodReference>>actualClass (in category 'accessing') ----- actualClass ^self environment at: classSymbol ifPresent: [ :actualClass | classIsMeta ifTrue: [ actualClass classSide ] ifFalse: [ actualClass ] ]!
----- Method: MethodReference>>asCodeReference (in category 'converting') ----- asCodeReference
^ self!
----- Method: MethodReference>>asString (in category 'converting') ----- asString
^(stringVersion ifNil: [ self stringVersionDefault ]) asString!
----- Method: MethodReference>>asStringOrText (in category 'converting') ----- asStringOrText
^stringVersion ifNil: [ self stringVersionDefault ]!
----- Method: MethodReference>>asValid (in category 'converting') ----- asValid "Sometimes persistent MethodReferences may become stale after a refactoring which moved some methods to a superclass. This method answers the new valid MethodReference if that happened." ^ self isValid ifTrue: [ self ] ifFalse: [ | cm | cm := self actualClass lookupSelector: self selector. cm ifNotNil: [ cm methodReference ] ]!
----- Method: MethodReference>>category (in category 'accessing') ----- category "Answers the class category (cached for reuse via MC and other tools)" ^ category ifNil: [category := self actualClass organization categoryOfElement: methodSymbol]!
----- Method: MethodReference>>category: (in category 'initialize-release') ----- category: aSymbol category := aSymbol!
----- Method: MethodReference>>classIsMeta (in category 'testing') ----- classIsMeta
^classIsMeta!
----- Method: MethodReference>>classSymbol (in category 'accessing') ----- classSymbol
^classSymbol!
----- Method: MethodReference>>compiledMethod (in category 'accessing') ----- compiledMethod ^self actualClass compiledMethodAt: methodSymbol ifAbsent: nil!
----- Method: MethodReference>>environment (in category 'accessing') ----- environment ^ environment ifNil: [ "We will probably have MethodReferences already instantiated when this commit lands. We lazily move these over to the new, Environment aware, order of things." environment := Smalltalk globals].!
----- Method: MethodReference>>hash (in category 'comparing') ----- hash "Answer a SmallInteger whose value is related to the receiver's identity." ^ (self species hash bitXor: self classSymbol hash) bitXor: self methodSymbol hash!
----- Method: MethodReference>>isClassReference (in category 'testing') ----- isClassReference
^ false!
----- Method: MethodReference>>isMethodReference (in category 'testing') ----- isMethodReference
^ true!
----- Method: MethodReference>>isValid (in category 'testing') ----- isValid "Answer whether the receiver represents a current selector or Comment"
| aClass | methodSymbol isDoIt ifTrue: [^ false]. (aClass := self actualClass) ifNil: [^ false]. ^ (aClass includesSelector: methodSymbol) or: [methodSymbol == #Comment]!
----- Method: MethodReference>>methodSymbol (in category 'accessing') ----- methodSymbol
^methodSymbol!
----- Method: MethodReference>>printOn: (in category 'printing') ----- printOn: aStream | actualClass | "Print the receiver on a stream" actualClass := classSymbol asString. classIsMeta ifTrue: [actualClass := actualClass, ' class']. super printOn: aStream. aStream nextPutAll: ' ', actualClass, ' >> ', methodSymbol printString.!
----- Method: MethodReference>>selector (in category 'accessing') ----- selector
^methodSymbol!
----- Method: MethodReference>>setClass:methodSymbol:stringVersion: (in category 'initialize-release') ----- setClass: aClass methodSymbol: methodSym stringVersion: aString
classSymbol := aClass theNonMetaClass name. classIsMeta := aClass isMeta. methodSymbol := methodSym. environment := aClass environment. stringVersion := aString.!
----- Method: MethodReference>>setClassAndSelectorIn: (in category 'initialize-release') ----- setClassAndSelectorIn: csBlock
^csBlock value: self actualClass value: methodSymbol!
----- Method: MethodReference>>setClassSymbol:classIsMeta:methodSymbol:stringVersion: (in category 'initialize-release') ----- setClassSymbol: classSym classIsMeta: isMeta methodSymbol: methodSym stringVersion: aString
classSymbol := classSym. classIsMeta := isMeta. methodSymbol := methodSym. stringVersion := aString.!
----- Method: MethodReference>>setStandardClass:methodSymbol: (in category 'initialize-release') ----- setStandardClass: aClass methodSymbol: methodSym
classSymbol := aClass theNonMetaClass name. environment := aClass environment. classIsMeta := aClass isMeta. methodSymbol := methodSym. stringVersion := nil.!
----- Method: MethodReference>>setStandardClass:methodSymbol:environment: (in category 'initialize-release') ----- setStandardClass: aClass methodSymbol: aSelector environment: anEnvironment classSymbol := aClass theNonMetaClass name. classIsMeta := aClass isMeta. methodSymbol := aSelector. environment := anEnvironment. stringVersion := nil.!
----- Method: MethodReference>>source (in category 'accessing') ----- source ^ (self actualClass sourceCodeAt: methodSymbol) asString withSqueakLineEndings!
----- Method: MethodReference>>sourceCode (in category 'accessing') ----- sourceCode
^ self actualClass sourceCodeAt: self methodSymbol!
----- Method: MethodReference>>sourceString (in category 'accessing') ----- sourceString
^ self sourceCode asString!
----- Method: MethodReference>>stringVersion (in category 'accessing') ----- stringVersion
^stringVersion ifNil: [self asStringOrText]!
----- Method: MethodReference>>stringVersion: (in category 'accessing') ----- stringVersion: aString
stringVersion := aString!
----- Method: MethodReference>>stringVersionDefault (in category 'accessing') ----- stringVersionDefault
^classSymbol, (classIsMeta ifTrue: [ ' class ' ] ifFalse: [' ']), methodSymbol !
----- Method: MethodReference>>timeStamp (in category 'accessing') ----- timeStamp ^ self compiledMethod timeStamp!
vm-dev@lists.squeakfoundation.org