The Trunk: Kernel-eem.669.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Kernel-eem.669.mcz

commits-2
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.669.mcz

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

Name: Kernel-eem.669
Author: eem
Time: 13 February 2012, 4:16:39.081 pm
UUID: a0cd06b2-129d-4601-b1f2-a2ef622e8ff0
Ancestors: Kernel-eem.668

Fix CompiledMethod>>#= for class-side methods where
the methodClassAssociation is not unique.

=============== Diff against Kernel-eem.668 ===============

Item was changed:
  ----- Method: CompiledMethod>>= (in category 'comparing') -----
  = method
+ "Answer whether the receiver implements the same code as the argument, method.
+ Here ``same code'' means that if the receiver's source is compiled with the same
+ compiler it should produce the same sequence of bytecodes and literals, same
+ trailer and same properties.  Hence this definition of #= (only one of many plausible
+ definitions) can be used to quickly identify changes in the compiler's output."
  | numLits |
+ method isCompiledMethod ifFalse: [^false].
- "Answer whether the receiver implements the same code as the
- argument, method."
- (method isKindOf: CompiledMethod) ifFalse: [^false].
  self size = method size ifFalse: [^false].
+ self header = method header ifFalse: [^false]. "N.B. includes numLiterals comparison."
- self header = method header ifFalse: [^false].
  self initialPC to: self endPC do:
  [:i | (self at: i) = (method at: i) ifFalse: [^false]].
+ numLits := self numLiterals.
- (numLits := self numLiterals) ~= method numLiterals ifTrue: [^false].
- "``Dont bother checking FFI and named primitives''
- (#(117 120) includes: self primitive) ifTrue: [^ true]."
  1 to: numLits do:
  [:i| | lit1 lit2 |
  lit1 := self literalAt: i.
  lit2 := method literalAt: i.
  (lit1 == lit2 or: [lit1 literalEqual: lit2]) ifFalse:
  [(i = 1 and: [#(117 120) includes: self primitive])
  ifTrue:
  [lit1 isArray
  ifTrue:
+ [(lit2 isArray and: [lit1 allButLast = lit2 allButLast]) ifFalse:
+ [^false]]
- [(lit2 isArray and: [lit1 allButLast = lit2 allButLast])
- ifFalse: [^false]]
  ifFalse: "ExternalLibraryFunction"
+ [(lit1 analogousCodeTo: lit2) ifFalse:
+ [^false]]]
- [(lit1 analogousCodeTo: lit2)
- ifFalse: [^false]]]
  ifFalse:
  [i = (numLits - 1)
  ifTrue: "properties"
  [(self properties analogousCodeTo: method properties)
  ifFalse: [^false]]
+ ifFalse: "last literal (methodClassAssociation) of class-side methods is not unique"
+ [(i = numLits
+ and: [lit1 isVariableBinding
+ and: [lit2 isVariableBinding
+ and: [lit1 key == lit2 key
+ and: [lit1 value == lit2 value]]]]) ifFalse:
+ [^false]]]]].
- ifFalse: [^false]]]].
  ^true!