@@ -67,6 +67,19 @@ public struct CGFloat {
6767 public var native : NativeType
6868}
6969
70+ extension CGFloat : SignedNumeric {
71+ // FIXME(integers): implement properly
72+ public init ? < T : BinaryInteger > ( exactly source: T ) {
73+ fatalError ( )
74+ }
75+
76+ @_transparent
77+ public var magnitude : CGFloat {
78+ return CGFloat ( Swift . abs ( native) )
79+ }
80+
81+ }
82+
7083extension CGFloat : BinaryFloatingPoint {
7184
7285 public typealias RawSignificand = UInt
@@ -196,34 +209,28 @@ extension CGFloat : BinaryFloatingPoint {
196209 return CGFloat ( native. nextUp)
197210 }
198211
199- @_transparent
200- public var magnitude : CGFloat {
201- return CGFloat ( Swift . abs ( native) )
202- }
203-
204- @_transparent
205212 public mutating func negate( ) {
206213 native. negate ( )
207214 }
208215
209216 @_transparent
210- public mutating func add ( _ other : CGFloat ) {
211- native. add ( other . native)
217+ public static func += ( _ lhs : inout CGFloat , _ rhs : CGFloat ) {
218+ lhs . native += rhs . native
212219 }
213220
214221 @_transparent
215- public mutating func subtract ( _ other : CGFloat ) {
216- native. subtract ( other . native)
222+ public static func -= ( _ lhs : inout CGFloat , _ rhs : CGFloat ) {
223+ lhs . native -= rhs . native
217224 }
218225
219226 @_transparent
220- public mutating func multiply ( by other : CGFloat ) {
221- native . multiply ( by : other . native)
227+ public static func *= ( _ lhs : inout CGFloat , _ rhs : CGFloat ) {
228+ lhs . native *= rhs . native
222229 }
223230
224231 @_transparent
225- public mutating func divide ( by other : CGFloat ) {
226- native . divide ( by : other . native)
232+ public static func /= ( _ lhs : inout CGFloat , _ rhs : CGFloat ) {
233+ lhs . native /= rhs . native
227234 }
228235
229236 @_transparent
@@ -418,44 +425,34 @@ extension Float {
418425// tweaking the overload resolution rules, or by removing the other
419426// definitions in the standard lib, or both.
420427
421- @_transparent
422- public func + ( lhs: CGFloat , rhs: CGFloat ) -> CGFloat {
423- return lhs. adding ( rhs)
424- }
425-
426- @_transparent
427- public func - ( lhs: CGFloat , rhs: CGFloat ) -> CGFloat {
428- return lhs. subtracting ( rhs)
429- }
430-
431- @_transparent
432- public func * ( lhs: CGFloat , rhs: CGFloat ) -> CGFloat {
433- return lhs. multiplied ( by: rhs)
434- }
435-
436- @_transparent
437- public func / ( lhs: CGFloat , rhs: CGFloat ) -> CGFloat {
438- return lhs. divided ( by: rhs)
439- }
440-
441- @_transparent
442- public func += ( lhs: inout CGFloat , rhs: CGFloat ) {
443- lhs. add ( rhs)
444- }
428+ extension CGFloat {
429+ @_transparent
430+ public static func + ( lhs: CGFloat , rhs: CGFloat ) -> CGFloat {
431+ var lhs = lhs
432+ lhs += rhs
433+ return lhs
434+ }
445435
446- @_transparent
447- public func -= ( lhs: inout CGFloat , rhs: CGFloat ) {
448- lhs. subtract ( rhs)
449- }
436+ @_transparent
437+ public static func - ( lhs: CGFloat , rhs: CGFloat ) -> CGFloat {
438+ var lhs = lhs
439+ lhs -= rhs
440+ return lhs
441+ }
450442
451- @_transparent
452- public func *= ( lhs: inout CGFloat , rhs: CGFloat ) {
453- lhs. multiply ( by: rhs)
454- }
443+ @_transparent
444+ public static func * ( lhs: CGFloat , rhs: CGFloat ) -> CGFloat {
445+ var lhs = lhs
446+ lhs *= rhs
447+ return lhs
448+ }
455449
456- @_transparent
457- public func /= ( lhs: inout CGFloat , rhs: CGFloat ) {
458- lhs. divide ( by: rhs)
450+ @_transparent
451+ public static func / ( lhs: CGFloat , rhs: CGFloat ) -> CGFloat {
452+ var lhs = lhs
453+ lhs /= rhs
454+ return lhs
455+ }
459456}
460457
461458//===----------------------------------------------------------------------===//
0 commit comments