OLD | NEW |
1 // Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dartino 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.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
4 | 4 |
5 library dart.core_patch; | 5 library dart.core_patch; |
6 | 6 |
7 import 'dart:fletch._system' as fletch; | 7 import 'dart:dartino._system' as dartino; |
8 import 'dart:fletch._system' show patch; | 8 import 'dart:dartino._system' show patch; |
9 | 9 |
10 part 'bigint.dart'; | 10 part 'bigint.dart'; |
11 part 'case.dart'; | 11 part 'case.dart'; |
12 part 'double.dart'; | 12 part 'double.dart'; |
13 part 'int.dart'; | 13 part 'int.dart'; |
14 part 'string.dart'; | 14 part 'string.dart'; |
15 | 15 |
16 // TODO(sigurdm): move the following a to part file shared with "core.patch" | 16 // TODO(sigurdm): move the following a to part file shared with "core.patch" |
17 // when part files can contain patch-classes. | 17 // when part files can contain patch-classes. |
18 | 18 |
19 @patch external bool identical(Object a, Object b); | 19 @patch external bool identical(Object a, Object b); |
20 | 20 |
21 @patch int identityHashCode(Object object) { | 21 @patch int identityHashCode(Object object) { |
22 if (object is int) return object; | 22 if (object is int) return object; |
23 return _identityHashCode(object); | 23 return _identityHashCode(object); |
24 } | 24 } |
25 | 25 |
26 @fletch.native external _identityHashCode(Object object); | 26 @dartino.native external _identityHashCode(Object object); |
27 | 27 |
28 @patch class Object { | 28 @patch class Object { |
29 @patch String toString() => '[object Object]'; | 29 @patch String toString() => '[object Object]'; |
30 | 30 |
31 @patch int get hashCode => _identityHashCode(this); | 31 @patch int get hashCode => _identityHashCode(this); |
32 | 32 |
33 @patch noSuchMethod(Invocation invocation) { | 33 @patch noSuchMethod(Invocation invocation) { |
34 if (invocation is fletch.FletchInvocation) { | 34 if (invocation is dartino.DartinoInvocation) { |
35 throw invocation.asNoSuchMethodError; | 35 throw invocation.asNoSuchMethodError; |
36 } | 36 } |
37 // TODO(ahe): Get rid of this call. | 37 // TODO(ahe): Get rid of this call. |
38 fletch.unresolved("<unknown>"); | 38 dartino.unresolved("<unknown>"); |
39 } | 39 } |
40 | 40 |
41 // The noSuchMethod helper is automatically called from the | 41 // The noSuchMethod helper is automatically called from the |
42 // trampoline and it is passed the selector. The arguments | 42 // trampoline and it is passed the selector. The arguments |
43 // to the original call are still present on the stack, so | 43 // to the original call are still present on the stack, so |
44 // it is possible to dig them out if need be. | 44 // it is possible to dig them out if need be. |
45 _noSuchMethod(receiver, receiverClass, receiverSelector) { | 45 _noSuchMethod(receiver, receiverClass, receiverSelector) { |
46 // NOTE: The number and type of arguments here must be kept in sync with: | 46 // NOTE: The number and type of arguments here must be kept in sync with: |
47 // src/vm/interpreter.cc:HandleEnterNoSuchMethod | 47 // src/vm/interpreter.cc:HandleEnterNoSuchMethod |
48 return noSuchMethod(new fletch.FletchInvocation( | 48 return noSuchMethod(new dartino.DartinoInvocation( |
49 receiver, receiverClass, receiverSelector)); | 49 receiver, receiverClass, receiverSelector)); |
50 } | 50 } |
51 | 51 |
52 // The noSuchMethod trampoline is automatically generated | 52 // The noSuchMethod trampoline is automatically generated |
53 // by the compiler. It calls the noSuchMethod helper and | 53 // by the compiler. It calls the noSuchMethod helper and |
54 // takes care off removing an arbitrary number of arguments | 54 // takes care off removing an arbitrary number of arguments |
55 // from the caller stack before it returns. | 55 // from the caller stack before it returns. |
56 external _noSuchMethodTrampoline(); | 56 external _noSuchMethodTrampoline(); |
57 } | 57 } |
58 | 58 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 } | 183 } |
184 return '[object Object]'; | 184 return '[object Object]'; |
185 } | 185 } |
186 | 186 |
187 @patch StackTrace get stackTrace { | 187 @patch StackTrace get stackTrace { |
188 throw "getter stackTrace is unimplemented"; | 188 throw "getter stackTrace is unimplemented"; |
189 } | 189 } |
190 } | 190 } |
191 | 191 |
192 @patch class Stopwatch { | 192 @patch class Stopwatch { |
193 @patch @fletch.native external static int _now(); | 193 @patch @dartino.native external static int _now(); |
194 | 194 |
195 @patch static int _initTicker() { | 195 @patch static int _initTicker() { |
196 _frequency = _fletchNative_frequency(); | 196 _frequency = _dartinoNative_frequency(); |
197 } | 197 } |
198 | 198 |
199 @fletch.native external static int _fletchNative_frequency(); | 199 @dartino.native external static int _dartinoNative_frequency(); |
200 } | 200 } |
201 | 201 |
202 @patch class List { | 202 @patch class List { |
203 @patch factory List([int length]) { | 203 @patch factory List([int length]) { |
204 return fletch.newList(length); | 204 return dartino.newList(length); |
205 } | 205 } |
206 | 206 |
207 @patch factory List.filled(int length, E fill) { | 207 @patch factory List.filled(int length, E fill) { |
208 // All error handling on the length parameter is done at the implementation | 208 // All error handling on the length parameter is done at the implementation |
209 // of new _List. | 209 // of new _List. |
210 var result = fletch.newList(length); | 210 var result = dartino.newList(length); |
211 if (fill != null) { | 211 if (fill != null) { |
212 for (int i = 0; i < length; i++) { | 212 for (int i = 0; i < length; i++) { |
213 result[i] = fill; | 213 result[i] = fill; |
214 } | 214 } |
215 } | 215 } |
216 return result; | 216 return result; |
217 } | 217 } |
218 | 218 |
219 @patch factory List.from(Iterable elements, {bool growable: true}) { | 219 @patch factory List.from(Iterable elements, {bool growable: true}) { |
220 // TODO(ajohnsen): elements.length can be slow if not a List. Consider | 220 // TODO(ajohnsen): elements.length can be slow if not a List. Consider |
221 // fast-path non-list & growable, and create internal helper for non-list & | 221 // fast-path non-list & growable, and create internal helper for non-list & |
222 // non-growable. | 222 // non-growable. |
223 int length = elements.length; | 223 int length = elements.length; |
224 var list; | 224 var list; |
225 if (growable) { | 225 if (growable) { |
226 list = fletch.newList(null); | 226 list = dartino.newList(null); |
227 list.length = length; | 227 list.length = length; |
228 } else { | 228 } else { |
229 list = fletch.newList(length); | 229 list = dartino.newList(length); |
230 } | 230 } |
231 if (elements is List) { | 231 if (elements is List) { |
232 for (int i = 0; i < length; i++) { | 232 for (int i = 0; i < length; i++) { |
233 list[i] = elements[i]; | 233 list[i] = elements[i]; |
234 } | 234 } |
235 } else { | 235 } else { |
236 int i = 0; | 236 int i = 0; |
237 elements.forEach((e) { list[i++] = e; }); | 237 elements.forEach((e) { list[i++] = e; }); |
238 } | 238 } |
239 return list; | 239 return list; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 source.startsWith('+0x')) { | 282 source.startsWith('+0x')) { |
283 if (onError != null) return onError(source); | 283 if (onError != null) return onError(source); |
284 throw new FormatException("Can't parse string as integer", source); | 284 throw new FormatException("Can't parse string as integer", source); |
285 } | 285 } |
286 } else { | 286 } else { |
287 if (radix < 2 || radix > 36) throw new ArgumentError(radix); | 287 if (radix < 2 || radix > 36) throw new ArgumentError(radix); |
288 } | 288 } |
289 return _parse(source, radix, onError); | 289 return _parse(source, radix, onError); |
290 } | 290 } |
291 | 291 |
292 @fletch.native static int _parse( | 292 @dartino.native static int _parse( |
293 String source, | 293 String source, |
294 int radix, | 294 int radix, |
295 int onError(String source)) { | 295 int onError(String source)) { |
296 switch (fletch.nativeError) { | 296 switch (dartino.nativeError) { |
297 case fletch.wrongArgumentType: | 297 case dartino.wrongArgumentType: |
298 throw new ArgumentError(source); | 298 throw new ArgumentError(source); |
299 case fletch.indexOutOfBounds: | 299 case dartino.indexOutOfBounds: |
300 if (onError != null) return onError(source); | 300 if (onError != null) return onError(source); |
301 throw new FormatException("Can't parse string as integer", source); | 301 throw new FormatException("Can't parse string as integer", source); |
302 } | 302 } |
303 } | 303 } |
304 | 304 |
305 @patch factory int.fromEnvironment( | 305 @patch factory int.fromEnvironment( |
306 String name, | 306 String name, |
307 {int defaultValue}) => defaultValue; | 307 {int defaultValue}) => defaultValue; |
308 } | 308 } |
309 | 309 |
310 @patch class double { | 310 @patch class double { |
311 @patch static double parse(String source, [double onError(String source)]) { | 311 @patch static double parse(String source, [double onError(String source)]) { |
312 return _parse(source.trim(), onError); | 312 return _parse(source.trim(), onError); |
313 } | 313 } |
314 | 314 |
315 @fletch.native static double _parse( | 315 @dartino.native static double _parse( |
316 String source, | 316 String source, |
317 double onError(String source)) { | 317 double onError(String source)) { |
318 switch (fletch.nativeError) { | 318 switch (dartino.nativeError) { |
319 case fletch.wrongArgumentType: | 319 case dartino.wrongArgumentType: |
320 throw new ArgumentError(source); | 320 throw new ArgumentError(source); |
321 case fletch.indexOutOfBounds: | 321 case dartino.indexOutOfBounds: |
322 if (onError != null) return onError(source); | 322 if (onError != null) return onError(source); |
323 throw new FormatException("Can't parse string as double", source); | 323 throw new FormatException("Can't parse string as double", source); |
324 } | 324 } |
325 } | 325 } |
326 } | 326 } |
327 | 327 |
328 @patch class DateTime { | 328 @patch class DateTime { |
329 static const _MILLISECOND_INDEX = 0; | 329 static const _MILLISECOND_INDEX = 0; |
330 static const _SECOND_INDEX = 1; | 330 static const _SECOND_INDEX = 1; |
331 static const _MINUTE_INDEX = 2; | 331 static const _MINUTE_INDEX = 2; |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 static int _timeZoneOffsetInSeconds(int millisecondsSinceEpoch) { | 646 static int _timeZoneOffsetInSeconds(int millisecondsSinceEpoch) { |
647 int equivalentSeconds = _equivalentSeconds(millisecondsSinceEpoch); | 647 int equivalentSeconds = _equivalentSeconds(millisecondsSinceEpoch); |
648 return _timeZoneOffset(equivalentSeconds); | 648 return _timeZoneOffset(equivalentSeconds); |
649 } | 649 } |
650 | 650 |
651 static String _timeZoneName(int millisecondsSinceEpoch) { | 651 static String _timeZoneName(int millisecondsSinceEpoch) { |
652 int equivalentSeconds = _equivalentSeconds(millisecondsSinceEpoch); | 652 int equivalentSeconds = _equivalentSeconds(millisecondsSinceEpoch); |
653 return _timeZone(equivalentSeconds); | 653 return _timeZone(equivalentSeconds); |
654 } | 654 } |
655 | 655 |
656 @fletch.native external static int _getCurrentMs(); | 656 @dartino.native external static int _getCurrentMs(); |
657 | 657 |
658 @fletch.native external static String _timeZone(int clampedSecondsSinceEpoch); | 658 @dartino.native external static String _timeZone(int clampedSecondsSinceEpoch)
; |
659 | 659 |
660 @fletch.native external static int _timeZoneOffset( | 660 @dartino.native external static int _timeZoneOffset( |
661 int clampedSecondsSinceEpoch); | 661 int clampedSecondsSinceEpoch); |
662 | 662 |
663 @fletch.native external static int _localTimeZoneOffset(); | 663 @dartino.native external static int _localTimeZoneOffset(); |
664 } | 664 } |
OLD | NEW |