OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart._interceptors; | 5 part of dart._interceptors; |
6 | 6 |
7 /** | 7 /** |
8 * The super interceptor class for [JSInt] and [JSDouble]. The compiler | 8 * The super interceptor class for [JSInt] and [JSDouble]. The compiler |
9 * recognizes this class as an interceptor, and changes references to | 9 * recognizes this class as an interceptor, and changes references to |
10 * [:this:] to actually use the receiver of the method, which is | 10 * [:this:] to actually use the receiver of the method, which is |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 | 336 |
337 /** | 337 /** |
338 * The interceptor class for [int]s. | 338 * The interceptor class for [int]s. |
339 * | 339 * |
340 * This class implements double since in JavaScript all numbers are doubles, so | 340 * This class implements double since in JavaScript all numbers are doubles, so |
341 * while we want to treat `2.0` as an integer for some operations, its | 341 * while we want to treat `2.0` as an integer for some operations, its |
342 * interceptor should answer `true` to `is double`. | 342 * interceptor should answer `true` to `is double`. |
343 */ | 343 */ |
344 // TODO(jmesserly): for dev_compiler all numbers will get `int` members at | 344 // TODO(jmesserly): for dev_compiler all numbers will get `int` members at |
345 // runtime for dynamic dispatch. We can fix by checking it at dispatch time. | 345 // runtime for dynamic dispatch. We can fix by checking it at dispatch time. |
| 346 // TODO(jmesserly): merge with JSNumber? That would simplify generated code, |
| 347 // and dart_runtime's extension mechanism. |
346 @JsPeerInterface(name: 'Number') | 348 @JsPeerInterface(name: 'Number') |
347 class JSInt extends JSNumber implements int, double { | 349 class JSInt extends JSNumber implements int, double { |
348 const JSInt(); | 350 const JSInt(); |
349 | 351 |
350 bool get isEven => (this & 1) == 0; | 352 bool get isEven => (this & 1) == 0; |
351 | 353 |
352 bool get isOdd => (this & 1) == 1; | 354 bool get isOdd => (this & 1) == 1; |
353 | 355 |
354 int toUnsigned(int width) { | 356 int toUnsigned(int width) { |
355 return this & ((1 << width) - 1); | 357 return this & ((1 << width) - 1); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 } | 418 } |
417 | 419 |
418 class JSDouble extends JSNumber implements double { | 420 class JSDouble extends JSNumber implements double { |
419 const JSDouble(); | 421 const JSDouble(); |
420 Type get runtimeType => double; | 422 Type get runtimeType => double; |
421 } | 423 } |
422 | 424 |
423 class JSPositiveInt extends JSInt {} | 425 class JSPositiveInt extends JSInt {} |
424 class JSUInt32 extends JSPositiveInt {} | 426 class JSUInt32 extends JSPositiveInt {} |
425 class JSUInt31 extends JSUInt32 {} | 427 class JSUInt31 extends JSUInt32 {} |
OLD | NEW |