The Trunk: Kernel-eem.1164.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.1164.mcz

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

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

Name: Kernel-eem.1164
Author: eem
Time: 27 March 2018, 11:44:42.020383 am
UUID: 1e50cd13-d194-479f-877a-eac64559142b
Ancestors: Kernel-cbc.1163

The selector of a method should never be found (unless it occurs as a literal or in a pragma)  irrespective of thorough search.

=============== Diff against Kernel-cbc.1163 ===============

Item was changed:
  ----- Method: CompiledCode>>refersTo:bytecodeScanner:thorough: (in category 'literals') -----
  refersTo: literal bytecodeScanner: scanBlockOrNil thorough: thorough
  "Answer if the receiver refers to the literal.  If the scan block is non-nil, then
  use it to find the literal in bytecode.  If thorough is true, dive down into
  literal arrays and method properties to locate references to the literal there-in."
+ 2 to: (self isCompiledBlock
+ ifTrue: [self numLiterals] "exclude outerCode or methodClass"
+ ifFalse: [self numLiterals - 1]) "exclude selector/properties and methodClass"
- 2 to: ((self isCompiledBlock or: [thorough])
- ifTrue: [self numLiterals] "exclude outerCode or methodClass"
- ifFalse: [self numLiterals - 1]) "exclude selector/properties and methodClass"
    do: [:i| | lit |
  lit := self objectAt: i.
  (literal == lit or: [literal literalEqual: lit]) ifTrue: [^true]. "== for Float bindingOf: #NaN since NaN ~= NaN"
  lit isCompiledCode
  ifTrue:
  [(lit refersTo: literal bytecodeScanner: scanBlockOrNil thorough: thorough) ifTrue:
  [^true]]
  ifFalse:
  [thorough ifTrue:
  [lit isVariableBinding
  ifTrue:
  [literal == lit key ifTrue: [^true]]
  ifFalse:
  [(lit isArray
    and: [(lit hasLiteral: literal)
  or: [literal isVariableBinding
  and: [literal key isSymbol
  and: [lit hasLiteral: literal key]]]]) ifTrue:
  [^true]]]]].
  scanBlockOrNil ifNotNil:
  [(self scanFor: scanBlockOrNil) ifTrue:
  [^true]].
  ^false!