The Trunk: Compiler-eem.333.mcz

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

The Trunk: Compiler-eem.333.mcz

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

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

Name: Compiler-eem.333
Author: eem
Time: 30 March 2017, 4:06:49.311904 pm
UUID: 89658511-31df-4a48-8b8f-ea3a070871fd
Ancestors: Compiler-ul.332

Nuke obsolete bytecodeless closure implementation support.
Nuke not trearting special selector 200 aas a real send (was #blockCopy: now #~~).

=============== Diff against Compiler-ul.332 ===============

Item was removed:
- ----- Method: Decompiler>>checkForBlock:selector:arguments: (in category 'control') -----
- checkForBlock: receiver selector: selector arguments: arguments
- selector == #blockCopy: ifTrue:
- [^self checkForBlockCopy: receiver].
- self assert: selector == #closureCopy:copiedValues:.
- ^self checkForClosureCopy: receiver arguments: arguments!

Item was changed:
  ----- Method: Decompiler>>send:super:numArgs: (in category 'instruction decoding') -----
  send: selector super: superFlag numArgs: numArgs
+ | args rcvr |
-
- | args rcvr selNode msgNode messages |
  args := Array new: numArgs.
  (numArgs to: 1 by: -1) do:
  [:i | args at: i put: stack removeLast].
  rcvr := stack removeLast.
+ superFlag ifTrue: [rcvr := constructor codeSuper]!
- superFlag ifTrue: [rcvr := constructor codeSuper].
- ((#(blockCopy: closureCopy:copiedValues:) includes: selector)
-  and: [self checkForBlock: rcvr selector: selector arguments: args]) ifFalse:
- [selNode := constructor codeAnySelector: selector.
- rcvr == CascadeFlag
- ifTrue:
- ["May actually be a cascade or an ifNil: for value."
- self willJumpIfFalse
- ifTrue: "= generated by a case macro"
- [selector == #= ifTrue:
- [" = signals a case statement..."
- statements addLast: args first.
- stack addLast: rcvr. "restore CascadeFlag"
- ^ self].
- selector == #== ifTrue:
- [" == signals an ifNil: for value..."
- stack removeLast; removeLast.
- rcvr := stack removeLast.
- stack addLast: IfNilFlag;
- addLast: (constructor
- codeMessage: rcvr
- selector: selNode
- arguments: args).
- ^ self]]
- ifFalse:
- [(self willJumpIfTrue and: [selector == #==]) ifTrue:
- [" == signals an ifNotNil: for value..."
- stack removeLast; removeLast.
- rcvr := stack removeLast.
- stack addLast: IfNilFlag;
- addLast: (constructor
- codeMessage: rcvr
- selector: selNode
- arguments: args).
- ^ self]].
- msgNode := constructor
- codeCascadedMessage: selNode
- arguments: args.
- stack last == CascadeFlag ifFalse:
- ["Last message of a cascade"
- statements addLast: msgNode.
- messages := self popTo: stack removeLast.  "Depth saved by first dup"
- msgNode := constructor
- codeCascade: stack removeLast
- messages: messages]]
- ifFalse:
- [msgNode := constructor
- codeMessage: rcvr
- selector: selNode
- arguments: args].
- stack addLast: msgNode]!

Item was changed:
  ----- Method: EncoderForV3 class>>isRealSendAt:in: (in category 'instruction stream support') -----
  isRealSendAt: pc in: method
  "Answer whether the bytecode at pc is a real message-send, not blockCopy:."
 
  | byte |
  byte := method at: pc.
+ ^byte >= 176 "special send or short send"
+  or: [byte >= 131
- ^(byte >= 176 "special send or short send"
-   and: [byte ~= 200 "special selector blockCopy:"
- or: [(Smalltalk specialSelectorAt: 200 - 175) ~~ #blockCopy:]])
- or: [byte >= 131
  and: [byte <= 134 "long sends"
  and: [byte ~= 132 "double extended do anything"
  or: [(method at: pc + 1) // 32 <= 1]]]]!