The Trunk: Kernel-ul.1051.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-ul.1051.mcz

commits-2
Levente Uzonyi uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ul.1051.mcz

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

Name: Kernel-ul.1051
Author: ul
Time: 6 December 2016, 6:50:56.960382 pm
UUID: 15f0443e-a6cc-4c91-ba44-190ef66534c7
Ancestors: Kernel-eem.1050

- simplified Semaphore >> critical:ifLocked:
 - Float >> #arcTan: always return a Float + some micro-optimizations
 - micro-optimizations in Float >> #sign

=============== Diff against Kernel-eem.1050 ===============

Item was changed:
  ----- Method: Float>>arcTan: (in category 'mathematical functions') -----
  arcTan: denominator
  "Answer the angle in radians.
  Optional. See Object documentation whatIsAPrimitive.
  Implementation note: use sign in order to catch cases of negativeZero"
 
+ self = 0.0 ifTrue: [
+ denominator sign >= 0 ifTrue: [ ^0.0 ].
+ self sign >= 0 ifTrue: [ ^Pi ].
+ ^0.0 - Pi ].
+ denominator = 0.0 ifTrue: [
+ self > 0.0 ifTrue: [ ^Halfpi ].
+ ^0.0 - Halfpi ].
+ denominator > 0.0 ifTrue: [  ^(self / denominator) arcTan ].
+ self > 0.0 ifTrue: [ ^(self / denominator) arcTan + Pi ].
+ ^(self / denominator) arcTan - Pi!
- ^self = 0.0
- ifTrue: [denominator sign >= 0
- ifTrue: [ 0 ]
- ifFalse: [ self sign >= 0
- ifTrue: [ Pi ]
- ifFalse: [ Pi negated ]]]
- ifFalse: [denominator = 0.0
- ifTrue: [self > 0.0
- ifTrue: [ Halfpi ]
- ifFalse: [ Halfpi negated ]]
- ifFalse: [denominator > 0
- ifTrue: [ (self / denominator) arcTan ]
- ifFalse: [self > 0
- ifTrue: [ ((self / denominator) arcTan) + Pi ]
- ifFalse: [ ((self / denominator) arcTan) - Pi ]]]]!

Item was changed:
  ----- Method: Float>>sign (in category 'mathematical functions') -----
  sign
  "Answer 1 if the receiver is greater than 0, -1 if less than 0, else 0.
  Handle IEEE-754 negative-zero by reporting a sign of -1"
 
+ self > 0.0 ifTrue: [ ^1 ].
+ self < 0.0 ifTrue: [ ^-1 ].
+ ^0 - ((self at: 1) bitShift: -31) "-1 for negative zero, 0 otherwise"!
- self > 0.0 ifTrue: [^ 1].
- (self < 0.0 or: [((self at: 1) bitShift: -31) = 1]) ifTrue: [^ -1].
- ^ 0!

Item was changed:
  ----- Method: Semaphore>>critical:ifLocked: (in category 'mutual exclusion') -----
  critical: mutuallyExcludedBlock ifLocked: alternativeBlock
  "Evaluate mutuallyExcludedBlock only if the receiver is not currently in
  the process of running the critical: message. If the receiver is, then evaluate
  alternativeBlock and return."
  "See the comment of #critical: for the explanation how this pattern works
  before changing the code."
 
+ 0 == excessSignals ifTrue: [ ^alternativeBlock value ].
+ excessSignals := excessSignals - 1.
+ ^mutuallyExcludedBlock ensure: [ self signal ]!
- | caught |
- caught := false.
- ^[
- "We're using #== here instead of #=, because it won't introduce a
- suspension point, while #= may do that."
- excessSignals == 0
- ifTrue: [ alternativeBlock value ]
- ifFalse: [
- excessSignals := excessSignals - 1.
- caught := true.
- mutuallyExcludedBlock value ] ]
- ensure: [ caught ifTrue: [ self signal ] ]!