Chromium Code Reviews| 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 #library('dart:_js_helper'); | 5 #library('dart:_js_helper'); |
| 6 | 6 |
| 7 #import('dart:coreimpl'); | 7 #import('dart:coreimpl'); |
| 8 #import('dart:collection'); | 8 #import('dart:collection'); |
| 9 | 9 |
| 10 #source('constant_map.dart'); | 10 #source('constant_map.dart'); |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 527 if ((length is !int) || (length < 0)) { | 527 if ((length is !int) || (length < 0)) { |
| 528 throw new ArgumentError(length); | 528 throw new ArgumentError(length); |
| 529 } | 529 } |
| 530 var result = JS('Object', r'new Array(#)', length); | 530 var result = JS('Object', r'new Array(#)', length); |
| 531 JS('void', r'#.fixed$length = #', result, true); | 531 JS('void', r'#.fixed$length = #', result, true); |
| 532 return result; | 532 return result; |
| 533 } | 533 } |
| 534 | 534 |
| 535 static num dateNow() => JS('num', r'Date.now()'); | 535 static num dateNow() => JS('num', r'Date.now()'); |
| 536 | 536 |
| 537 static const MAX_CODE_UNIT = 0xffff; | |
| 538 static const MAX_CODE_POINT = 0x10ffff; | |
| 539 static const SURROGATE_BASE = 0xd800; | |
| 540 static const SURROGATE_END = 0xdfff; | |
| 541 static const LEAD_BASE = 0xd800; | |
| 542 static const TRAIL_BASE = 0xdc00; | |
| 543 static const SURROGATE_MASK = 0x3ff; | |
| 544 static const SURROGATE_ENCODING_BASE = 0x10000; | |
| 545 | |
| 537 static String stringFromCharCodes(charCodes) { | 546 static String stringFromCharCodes(charCodes) { |
|
floitsch
2012/11/08 15:28:21
I would move this code to the patch-class and redi
ngeoffray
2012/11/15 13:24:20
I don't think the patch classes have access to 'JS
| |
| 547 bool surrogatePairs = false; | |
| 538 for (var i in charCodes) { | 548 for (var i in charCodes) { |
| 539 if (i is !int) throw new ArgumentError(i); | 549 if (i is !int) throw new ArgumentError(i); |
| 550 if (i > MAX_CODE_POINT) throw new ArgumentError(i); | |
| 551 if (i > MAX_CODE_UNIT) surrogatePairs = true; | |
| 552 if (i >= SURROGATE_BASE && i <= SURROGATE_END) throw new ArgumentError(i); | |
| 540 } | 553 } |
| 541 return JS('String', r'String.fromCharCode.apply(#, #)', null, charCodes); | 554 if (!surrogatePairs) { |
| 555 return JS('String', r'String.fromCharCode.apply(#, #)', null, charCodes); | |
| 556 } | |
| 557 var expanded = []; | |
| 558 for (var i in charCodes) { | |
| 559 if (i <= MAX_CODE_UNIT) { | |
| 560 expanded.add(i); | |
| 561 } else { | |
| 562 expanded.add(LEAD_BASE + | |
| 563 (((i - SURROGATE_ENCODING_BASE) >> 10) & SURROGATE_MASK)); | |
| 564 expanded.add(TRAIL_BASE + (i & SURROGATE_MASK)); | |
| 565 } | |
| 566 } | |
| 567 return JS('String', r'String.fromCharCode.apply(#, #)', null, expanded); | |
| 568 } | |
| 569 | |
| 570 static String stringFromCodeUnits(codeUnits) { | |
| 571 for (var i in codeUnits) { | |
| 572 if (i is !int) throw new ArgumentError(i); | |
| 573 if (i > MAX_CODE_UNIT) throw new ArgumentError(i); | |
| 574 } | |
| 575 return JS('String', r'String.fromCharCode.apply(#, #)', null, codeUnits); | |
| 542 } | 576 } |
| 543 | 577 |
| 544 static String getTimeZoneName(receiver) { | 578 static String getTimeZoneName(receiver) { |
| 545 // When calling toString on a Date it will emit the timezone in parenthesis. | 579 // When calling toString on a Date it will emit the timezone in parenthesis. |
| 546 // Example: "Wed May 16 2012 21:13:00 GMT+0200 (CEST)". | 580 // Example: "Wed May 16 2012 21:13:00 GMT+0200 (CEST)". |
| 547 // We extract this name using a regexp. | 581 // We extract this name using a regexp. |
| 548 var d = lazyAsJsDate(receiver); | 582 var d = lazyAsJsDate(receiver); |
| 549 return JS('String', r'/\((.*)\)/.exec(#.toString())[1]', d); | 583 return JS('String', r'/\((.*)\)/.exec(#.toString())[1]', d); |
| 550 } | 584 } |
| 551 | 585 |
| (...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1477 result = new TypeImpl(key); | 1511 result = new TypeImpl(key); |
| 1478 JS('var', r'#[#] = #', runtimeTypeCache, key, result); | 1512 JS('var', r'#[#] = #', runtimeTypeCache, key, result); |
| 1479 } | 1513 } |
| 1480 return result; | 1514 return result; |
| 1481 } | 1515 } |
| 1482 | 1516 |
| 1483 String getRuntimeTypeString(var object) { | 1517 String getRuntimeTypeString(var object) { |
| 1484 var typeInfo = JS('Object', r'#.builtin$typeInfo', object); | 1518 var typeInfo = JS('Object', r'#.builtin$typeInfo', object); |
| 1485 return JS('String', r'#.runtimeType', typeInfo); | 1519 return JS('String', r'#.runtimeType', typeInfo); |
| 1486 } | 1520 } |
| OLD | NEW |