[squeak-dev] The Trunk: Kernel-eem.1355.mcz

Thiede, Christoph Christoph.Thiede at student.hpi.uni-potsdam.de
Thu Oct 29 07:02:25 UTC 2020


Great idea! As a side-effect, there will also be less noise when debugging some block invocation. :-)

Why did you choose numArgs = 2 for the fast lane, was this a random choice only, or did you do some measurements to find out which number of arguments is most commonly passed?

<http://www.hpi.de/>

Best,
Christoph
________________________________
Von: Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im Auftrag von commits at source.squeak.org <commits at source.squeak.org>
Gesendet: Donnerstag, 29. Oktober 2020 03:13:04
An: squeak-dev at lists.squeakfoundation.org; packages at lists.squeakfoundation.org
Betreff: [squeak-dev] The Trunk: Kernel-eem.1355.mcz

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

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

Name: Kernel-eem.1355
Author: eem
Time: 28 October 2020, 6:16:21.972202 pm
UUID: 14e40036-578b-4645-88e4-77be34a6d96b
Ancestors: Kernel-eem.1354

Speed-up cull:[cull:*] by supplying the primitive to handle teh case where the number of block arguments matches the number of arguments to cull:[cull:].
Nuke the obsolete pre-closure simulation code for block closure activation.

=============== Diff against Kernel-eem.1354 ===============

Item was changed:
  ----- Method: BlockClosure>>cull: (in category 'evaluating') -----
  cull: firstArg
         "Activate the receiver, with one or zero arguments."
+        <primitive: 202> "Handle the one argument case primitively"
-
         numArgs >= 1 ifTrue: [ ^self value: firstArg ].
         ^self value!

Item was changed:
  ----- Method: BlockClosure>>cull:cull: (in category 'evaluating') -----
  cull: firstArg cull: secondArg
         "Activate the receiver, with two or less arguments."
+        <primitive: 203> "Handle the two argument case primitively"
-
         numArgs >= 2 ifTrue: [ ^self value: firstArg value: secondArg ].
         numArgs = 1 ifTrue: [ ^self value: firstArg ].
         ^self value!

Item was changed:
  ----- Method: BlockClosure>>cull:cull:cull: (in category 'evaluating') -----
  cull: firstArg cull: secondArg cull: thirdArg
         "Activate the receiver, with three or less arguments."
+        <primitive: 204> "Handle the two argument case primitively"
-
         numArgs >= 2 ifTrue: [
                 numArgs >= 3 ifTrue: [ ^self value: firstArg value: secondArg value: thirdArg ].
                 ^self value: firstArg value: secondArg ].
         numArgs = 1 ifTrue: [ ^self value: firstArg ].
         ^self value!

Item was changed:
  ----- Method: BlockClosure>>cull:cull:cull:cull: (in category 'evaluating') -----
  cull: firstArg cull: secondArg cull: thirdArg cull: fourthArg
         "Activate the receiver, with four or less arguments."
+        <primitive: 205> "Handle the two argument case primitively"
-
         numArgs >= 3 ifTrue: [
                 numArgs >= 4 ifTrue: [
                         ^self value: firstArg value: secondArg value: thirdArg value: fourthArg ].
                 ^self value: firstArg value: secondArg value: thirdArg ].
         numArgs = 2 ifTrue: [ ^self value: firstArg value: secondArg ].
         numArgs = 1 ifTrue: [ ^self value: firstArg ].
         ^self value!

Item was changed:
  ----- Method: BlockClosure>>value (in category 'evaluating') -----
  value
         "Activate the receiver, creating a closure activation (Context)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the copied values to the activation as its copied
          temps. Primitive. Essential."
         <primitive: 201>
-        | newContext |
         numArgs ~= 0 ifTrue:
                 [self numArgsError: 0].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: BlockClosure>>value: (in category 'evaluating') -----
  value: firstArg
         "Activate the receiver, creating a closure activation (Context)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the argument and copied values to the activation
          as its argument and copied temps. Primitive. Essential."
         <primitive: 202>
-        | newContext |
         numArgs ~= 1 ifTrue:
                 [self numArgsError: 1].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: BlockClosure>>value:value: (in category 'evaluating') -----
  value: firstArg value: secondArg
         "Activate the receiver, creating a closure activation (Context)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments and copied values to the activation
          as its arguments and copied temps. Primitive. Essential."
         <primitive: 203>
-        | newContext |
         numArgs ~= 2 ifTrue:
                 [self numArgsError: 2].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        newContext at: 2 put: secondArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: BlockClosure>>value:value:value: (in category 'evaluating') -----
  value: firstArg value: secondArg value: thirdArg
         "Activate the receiver, creating a closure activation (Context)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments and copied values to the activation
          as its arguments and copied temps. Primitive. Essential."
         <primitive: 204>
-        | newContext |
         numArgs ~= 3 ifTrue:
                 [self numArgsError: 3].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        newContext at: 2 put: secondArg.
-                        newContext at: 3 put: thirdArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: BlockClosure>>value:value:value:value: (in category 'evaluating') -----
  value: firstArg value: secondArg value: thirdArg value: fourthArg
         "Activate the receiver, creating a closure activation (Context)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments and copied values to the activation
          as its arguments and copied temps. Primitive. Essential."
         <primitive: 205>
-        | newContext |
         numArgs ~= 4 ifTrue:
                 [self numArgsError: 4].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        newContext at: 2 put: secondArg.
-                        newContext at: 3 put: thirdArg.
-                        newContext at: 4 put: fourthArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: BlockClosure>>value:value:value:value:value: (in category 'evaluating') -----
  value: firstArg value: secondArg value: thirdArg value: fourthArg value: fifthArg
         "Activate the receiver, creating a closure activation (Context)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments and copied values to the activation
          as its arguments and copied temps. Primitive. Essential."
         <primitive: 205>
-        | newContext |
         numArgs ~= 5 ifTrue:
                 [self numArgsError: 5].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        newContext at: 2 put: secondArg.
-                        newContext at: 3 put: thirdArg.
-                        newContext at: 4 put: fourthArg.
-                        newContext at: 5 put: fifthArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: BlockClosure>>valueWithArguments: (in category 'evaluating') -----
  valueWithArguments: anArray
         "Activate the receiver, creating a closure activation (Context)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments in an anArray and copied values to
          the activation as its arguments and copied temps. Primitive. Essential."
         <primitive: 206>
-        | newContext |
         numArgs ~= anArray size ifTrue:
                 [self numArgsError: anArray size].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        1 to: numArgs do:
-                                [:i| newContext at: i put: (anArray at: i)].
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was added:
+ ----- Method: FullBlockClosure>>cull: (in category 'evaluating') -----
+ cull: firstArg
+        "Activate the receiver, with one or zero arguments."
+        <primitive: 207> "Handle the one argument case primitively"
+        numArgs >= 1 ifTrue: [ ^self value: firstArg ].
+        ^self value!

Item was added:
+ ----- Method: FullBlockClosure>>cull:cull: (in category 'evaluating') -----
+ cull: firstArg cull: secondArg
+        "Activate the receiver, with two or less arguments."
+        <primitive: 207> "Handle the two argument case primitively"
+        numArgs >= 2 ifTrue: [ ^self value: firstArg value: secondArg ].
+        numArgs = 1 ifTrue: [ ^self value: firstArg ].
+        ^self value!

Item was added:
+ ----- Method: FullBlockClosure>>cull:cull:cull: (in category 'evaluating') -----
+ cull: firstArg cull: secondArg cull: thirdArg
+        "Activate the receiver, with three or less arguments."
+        <primitive: 207> "Handle the three argument case primitively"
+        numArgs >= 2 ifTrue:
+                [numArgs >= 3 ifTrue:
+                        [^self value: firstArg value: secondArg value: thirdArg].
+                ^self value: firstArg value: secondArg].
+        numArgs = 1 ifTrue:
+                [^self value: firstArg].
+        ^self value!

Item was added:
+ ----- Method: FullBlockClosure>>cull:cull:cull:cull: (in category 'evaluating') -----
+ cull: firstArg cull: secondArg cull: thirdArg cull: fourthArg
+        "Activate the receiver, with four or less arguments."
+        <primitive: 207> "Handle the four argument case primitively"
+        numArgs >= 3 ifTrue:
+                [numArgs >= 4 ifTrue:
+                        [^self value: firstArg value: secondArg value: thirdArg value: fourthArg].
+                ^self value: firstArg value: secondArg value: thirdArg].
+        numArgs = 2 ifTrue:
+                [^self value: firstArg value: secondArg].
+        numArgs = 1 ifTrue:
+                [^self value: firstArg].
+        ^self value!

Item was changed:
  ----- Method: FullBlockClosure>>value (in category 'evaluating') -----
  value
         "Activate the receiver, creating a closure activation (MethodContext)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the copied values to the activation as its copied
          temps. Primitive. Essential."
         <primitive: 207>
-        | newContext |
         numArgs ~= 0 ifTrue:
                 [self numArgsError: 0].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: FullBlockClosure>>value: (in category 'evaluating') -----
  value: firstArg
         "Activate the receiver, creating a closure activation (MethodContext)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the argument and copied values to the activation
          as its argument and copied temps. Primitive. Essential."
         <primitive: 207>
-        | newContext |
         numArgs ~= 1 ifTrue:
                 [self numArgsError: 1].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: FullBlockClosure>>value:value: (in category 'evaluating') -----
  value: firstArg value: secondArg
         "Activate the receiver, creating a closure activation (MethodContext)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments and copied values to the activation
          as its arguments and copied temps. Primitive. Essential."
         <primitive: 207>
-        | newContext |
         numArgs ~= 2 ifTrue:
                 [self numArgsError: 2].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        newContext at: 2 put: secondArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: FullBlockClosure>>value:value:value: (in category 'evaluating') -----
  value: firstArg value: secondArg value: thirdArg
         "Activate the receiver, creating a closure activation (MethodContext)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments and copied values to the activation
          as its arguments and copied temps. Primitive. Essential."
         <primitive: 207>
-        | newContext |
         numArgs ~= 3 ifTrue:
                 [self numArgsError: 3].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        newContext at: 2 put: secondArg.
-                        newContext at: 3 put: thirdArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: FullBlockClosure>>value:value:value:value: (in category 'evaluating') -----
  value: firstArg value: secondArg value: thirdArg value: fourthArg
         "Activate the receiver, creating a closure activation (MethodContext)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments and copied values to the activation
          as its arguments and copied temps. Primitive. Essential."
         <primitive: 207>
-        | newContext |
         numArgs ~= 4 ifTrue:
                 [self numArgsError: 4].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        newContext at: 2 put: secondArg.
-                        newContext at: 3 put: thirdArg.
-                        newContext at: 4 put: fourthArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: FullBlockClosure>>value:value:value:value:value: (in category 'evaluating') -----
  value: firstArg value: secondArg value: thirdArg value: fourthArg value: fifthArg
         "Activate the receiver, creating a closure activation (MethodContext)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments and copied values to the activation
          as its arguments and copied temps. Primitive. Essential."
         <primitive: 207>
-        | newContext |
         numArgs ~= 5 ifTrue:
                 [self numArgsError: 5].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        newContext at: 1 put: firstArg.
-                        newContext at: 2 put: secondArg.
-                        newContext at: 3 put: thirdArg.
-                        newContext at: 4 put: fourthArg.
-                        newContext at: 5 put: fifthArg.
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!

Item was changed:
  ----- Method: FullBlockClosure>>valueWithArguments: (in category 'evaluating') -----
  valueWithArguments: anArray
         "Activate the receiver, creating a closure activation (MethodContext)
          whose closure is the receiver and whose caller is the sender of this
          message. Supply the arguments in an anArray and copied values to
          the activation as its arguments and copied temps. Primitive. Essential."
         <primitive: 208>
-        | newContext |
         numArgs ~= anArray size ifTrue:
                 [self numArgsError: anArray size].
+        ^self primitiveFailed!
-        false
-                ifTrue: "Old code to simulate the closure value primitive on VMs that lack it."
-                        [newContext := self asContextWithSender: thisContext sender.
-                        1 to: numArgs do:
-                                [:i| newContext at: i put: (anArray at: i)].
-                        thisContext privSender: newContext]
-                ifFalse: [self primitiveFailed]!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20201029/14179be3/attachment-0001.html>


More information about the Squeak-dev mailing list