| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 #library("dart:core"); | |
| 6 #import("dart:coreimpl"); | |
| 7 | |
| 8 // TODO(jimhug): Better way to map in standard corelib | |
| 9 #source("../../corelib/src/bool.dart"); | |
| 10 #source("../../corelib/src/collection.dart"); | |
| 11 #source("../../corelib/src/comparable.dart"); | |
| 12 #source("../../corelib/src/date.dart"); | |
| 13 #source("../../corelib/src/double.dart"); | |
| 14 #source("../../corelib/src/duration.dart"); | |
| 15 #source("../../corelib/src/exceptions.dart"); | |
| 16 #source("../../corelib/src/expect.dart"); | |
| 17 #source("../../corelib/src/function.dart"); | |
| 18 #source("../../corelib/src/future.dart"); | |
| 19 #source("../../corelib/src/hashable.dart"); | |
| 20 #source("../../corelib/src/int.dart"); | |
| 21 #source("../../corelib/src/iterable.dart"); | |
| 22 #source("../../corelib/src/iterator.dart"); | |
| 23 #source("../../corelib/src/list.dart"); | |
| 24 #source("../../corelib/src/map.dart"); | |
| 25 #source("math.dart"); // overriden to be more directly native | |
| 26 #source("natives.dart"); // native helpers generated by the compiler | |
| 27 #source("num.dart"); // overriden to include int members on num - weird typing | |
| 28 #source("../../corelib/src/options.dart"); | |
| 29 #source("../../corelib/src/pattern.dart"); | |
| 30 #source("../../corelib/src/queue.dart"); | |
| 31 #source("../../corelib/src/regexp.dart"); | |
| 32 #source("../../corelib/src/set.dart"); | |
| 33 #source("../../corelib/src/stopwatch.dart"); | |
| 34 #source("../../corelib/src/string.dart"); | |
| 35 #source("../../corelib/src/strings.dart"); | |
| 36 #source("../../corelib/src/string_buffer.dart"); | |
| 37 | |
| 38 // TODO(jimhug): Ad-hoc cut-paste-and-edit from compiler/lib below: | |
| 39 // Conceptual change is moving to more true natives. | |
| 40 | |
| 41 /** | |
| 42 * The class [Clock] provides access to a monotonically incrementing clock | |
| 43 * device. | |
| 44 */ | |
| 45 class Clock { | |
| 46 /** Returns the current clock tick. */ | |
| 47 static int now() native 'return new Date().getTime();'; | |
| 48 | |
| 49 /** Returns the frequency of clock ticks in Hz. */ | |
| 50 // TODO(jimhug): Why isn't this a property? | |
| 51 static int frequency() => 1000; | |
| 52 } | |
| 53 | |
| 54 // TODO(jmesserly): this is working around a name conflict with "window.print". | |
| 55 void print(Object obj) => _print(obj); | |
| 56 void _print(Object obj) native @'''if (typeof console == 'object') { | |
| 57 if (obj) obj = obj.toString(); | |
| 58 console.log(obj); | |
| 59 } else if (typeof write === 'function') { | |
| 60 write(obj); | |
| 61 write('\n'); | |
| 62 }''' { | |
| 63 // ensure toString is generated | |
| 64 obj.toString(); | |
| 65 } | |
| 66 | |
| 67 // Exceptions thrown by the generated JS code. | |
| 68 | |
| 69 class AssertionError { | |
| 70 final String failedAssertion; | |
| 71 | |
| 72 // TODO(jmesserly): I don't think these should be here. They are properties of | |
| 73 // the stack trace | |
| 74 final String url; | |
| 75 final int line; | |
| 76 final int column; | |
| 77 | |
| 78 AssertionError._internal(this.failedAssertion, this.url, this.line, this.colum
n); | |
| 79 | |
| 80 String toString() { | |
| 81 return "Failed assertion: '$failedAssertion' is not true " + | |
| 82 "in $url at line $line, column $column."; | |
| 83 } | |
| 84 } | |
| 85 | |
| 86 // TODO(jmesserly): fix the strange interaction with JS TypeError, such as | |
| 87 // toString(). Ideally this would generate to a different JS name but I'm not | |
| 88 // sure how to force that. | |
| 89 class TypeError extends AssertionError native 'TypeError' { | |
| 90 final String srcType; | |
| 91 final String dstType; | |
| 92 | |
| 93 // TODO: make this non-native once $typeNameOf and toString issues are fixed. | |
| 94 TypeError._internal(Object src, String dstType) native @''' | |
| 95 this.srcType = (src == null ? "Null" : src.$typeNameOf()); | |
| 96 this.dstType = dstType; | |
| 97 this.toString = function() { | |
| 98 return ("Failed type check: type " + this.srcType + | |
| 99 " is not assignable to type " + this.dstType); | |
| 100 }'''; | |
| 101 } | |
| 102 | |
| 103 class FallThroughError { | |
| 104 const FallThroughError(); | |
| 105 | |
| 106 String toString() => "Switch case fall-through."; | |
| 107 } | |
| 108 | |
| 109 // Dart core library. | |
| 110 | |
| 111 class Object native "Object" { | |
| 112 | |
| 113 const Object() native; | |
| 114 | |
| 115 bool operator ==(Object other) native; | |
| 116 String toString() native; | |
| 117 | |
| 118 // TODO(jmesserly): optimize this. No need to call it, unless it's overridden. | |
| 119 // Notes: "use strict" prevents boxing. | |
| 120 // The Dart "return this" might help with type inference. | |
| 121 get dynamic() native '"use strict"; return this;' { return this; } | |
| 122 | |
| 123 // TODO(jmesserly): add named args. For now stay compatible with the VM. | |
| 124 noSuchMethod(String name, List args) { | |
| 125 throw new NoSuchMethodException(this, name, args); | |
| 126 } | |
| 127 } | |
| 128 | |
| 129 void _assert(var test, String text, String url, int line, int column) { | |
| 130 if (test is Function) test = test(); | |
| 131 if (!test) throw new AssertionError._internal(text, url, line, column); | |
| 132 } | |
| OLD | NEW |