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 ] ]! |
Free forum by Nabble | Edit this page |