Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(193)

Unified Diff: frog/lib/corelib_impl.dart

Issue 10548047: Remove frog from the repository. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Move test and update apidoc.gyp. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « frog/lib/corelib.dart ('k') | frog/lib/date_implementation.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/lib/corelib_impl.dart
diff --git a/frog/lib/corelib_impl.dart b/frog/lib/corelib_impl.dart
deleted file mode 100644
index 7bb743345561f2cb44398f390ab913620bc2aa29..0000000000000000000000000000000000000000
--- a/frog/lib/corelib_impl.dart
+++ /dev/null
@@ -1,529 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#library("dart:coreimpl");
-
-#source("../../corelib/src/implementation/dual_pivot_quicksort.dart");
-#source("../../corelib/src/implementation/duration_implementation.dart");
-#source("../../corelib/src/implementation/exceptions.dart");
-#source("../../corelib/src/implementation/collections.dart");
-#source("../../corelib/src/implementation/future_implementation.dart");
-#source("../../corelib/src/implementation/hash_map_set.dart");
-// TODO(jimhug): Re-explore tradeoffs with using builtin JS maps.
-#source("../../corelib/src/implementation/linked_hash_map.dart");
-#source("../../corelib/src/implementation/maps.dart");
-#source("../../corelib/src/implementation/options.dart");
-#source("../../corelib/src/implementation/queue.dart");
-#source("../../corelib/src/implementation/stopwatch_implementation.dart");
-#source("../../corelib/src/implementation/splay_tree.dart");
-
-#source("string_buffer.dart");
-#source("string_base.dart");
-#source("string_implementation.dart");
-#source("arrays.dart");
-#source("date_implementation.dart");
-
-#source("function_implementation.dart");
-
-/**
- * The default implementation of the [List<E>] interface. Essentially a growable
- * array that will expand automatically as more elements are added.
- */
-class ListFactory<E> implements List<E> native "Array" {
- ListFactory([int length]) native;
-
- // TODO(jmesserly): type parameters aren't working here
- factory ListFactory.from(Iterable other) {
- final list = [];
- for (final e in other) {
- list.add(e);
- }
- return list;
- }
-
- // TODO(jimhug): Only works for Arrays.
- factory ListFactory.fromList(List other, int startIndex, int endIndex)
- native 'return other.slice(startIndex, endIndex);';
-
- int length; // all fields on natives are implied native.
-
- // List<E> members:
- E operator [](int index) native;
- void operator []=(int index, E value) native;
- void add(E value) native "this.push(value);";
- void addLast(E value) native "this.push(value);";
- void addAll(Collection<E> collection) {
- for (E item in collection) add(item);
- }
- void sort(int compare(E a, E b)) native;
- void copyFrom(List<Object> src, int srcStart, int dstStart, int count) native;
- int indexOf(E element, [int start]) native;
- int lastIndexOf(E element, [int start]) native;
- void clear() { length = 0; }
-
- E removeLast() native "return this.pop();";
-
- E last() => this[this.length-1];
-
- ListFactory<E> getRange(int start, int rangeLength) {
- if (rangeLength == 0) return [];
- if (rangeLength < 0) throw new IllegalArgumentException('length');
- if (start < 0 || start + rangeLength > this.length)
- throw new IndexOutOfRangeException(start);
- return this._slice(start, start + rangeLength);
- }
-
- void setRange(int start, int rangeLength, List<E> from, [int startFrom = 0]) {
- // length of 0 prevails and should not throw exceptions.
- if (rangeLength == 0) return;
- if (rangeLength < 0) {
- throw new IllegalArgumentException('length is negative');
- }
-
- if (start < 0) throw new IndexOutOfRangeException(start);
-
- int end = start + rangeLength;
- if (end > this.length) throw new IndexOutOfRangeException(end);
-
- if (startFrom < 0) throw new IndexOutOfRangeException(startFrom);
-
- int endFrom = startFrom + rangeLength;
- if (endFrom > from.length) throw new IndexOutOfRangeException(endFrom);
-
- for (var i = 0; i < rangeLength; ++i)
- this[start + i] = from[startFrom + i];
- }
-
- void removeRange(int start, int rangeLength) {
- if (rangeLength == 0) return;
- if (rangeLength < 0) throw new IllegalArgumentException('length');
- if (start < 0 || start + rangeLength > this.length)
- throw new IndexOutOfRangeException(start);
- this._splice(start, rangeLength);
- }
-
- void insertRange(int start, int rangeLength, [E initialValue]) {
- if (rangeLength == 0) return;
- if (rangeLength < 0) throw new IllegalArgumentException('length');
- if (start < 0 || start > this.length)
- throw new IndexOutOfRangeException(start);
-
- // Splice in the values with a minimum of array allocations.
- var args = new ListFactory(rangeLength + 2);
- args[0] = start;
- args[1] = 0;
- for (var i = 0; i < rangeLength; i++) {
- args[i + 2] = initialValue;
- }
- this._splice_apply(args);
- }
-
- // Collection<E> members:
- void forEach(void f(E element)) native;
- ListFactory<E> filter(bool f(E element)) native;
- ListFactory map(f(E element)) native;
- bool every(bool f(E element)) native;
- bool some(bool f(E element)) native;
- bool isEmpty() => length == 0;
-
- // Iterable<E> members:
- Iterator<E> iterator() => new ListIterator(this);
-
- String toString() => Collections.collectionToString(this);
-
- // Native methods.
- ListFactory<E> _slice(start, end) native 'slice';
- void _splice(start, length) native 'splice';
- void _splice_apply(args) native 'this.splice.apply(this, args)';
-}
-
-// Iterator for lists.
-class ListIterator<T> implements Iterator<T> {
- ListIterator(List<T> array)
- : _array = array,
- _pos = 0 {
- }
-
- bool hasNext() {
- return _array.length > _pos;
- }
-
- T next() {
- // TODO(jmesserly): this check is redundant in a for-in loop
- // Must we do it?
- if (!hasNext()) {
- throw const NoMoreElementsException();
- }
- return _array[_pos++];
- }
-
- final List<T> _array;
- int _pos;
-}
-
-// TODO(jimhug): Enforce immutability on IE
-ImmutableList _constList(List other) native '''
- other.__proto__ = ImmutableList.prototype;
- return other;
-'''
-{ new ImmutableList(other.length); }
-
-
-/** An immutable list. Attempting to modify the list will throw an exception. */
-class ImmutableList<E> extends ListFactory<E> {
- // TODO(jimhug): Can this go away now?
- int get length() native "return this.length;";
-
- void set length(int length) {
- throw const IllegalAccessException();
- }
-
- ImmutableList(int length) : super(length);
-
- factory ImmutableList.from(List other) {
- return _constList(other);
- }
-
- void operator []=(int index, E value) {
- throw const IllegalAccessException();
- }
-
- void copyFrom(List src, int srcStart, int dstStart, int count) {
- throw const IllegalAccessException();
- }
-
- void setRange(int start, int length, List<E> from, [int startFrom = 0]) {
- throw const IllegalAccessException();
- }
-
- void removeRange(int start, int length) {
- throw const IllegalAccessException();
- }
-
- void insertRange(int start, int length, [E initialValue = null]) {
- throw const IllegalAccessException();
- }
-
- void sort(int compare(E a, E b)) {
- throw const IllegalAccessException();
- }
-
- void add(E element) {
- throw const IllegalAccessException();
- }
-
- void addLast(E element) {
- throw const IllegalAccessException();
- }
-
- void addAll(Collection<E> elements) {
- throw const IllegalAccessException();
- }
-
- void clear() {
- throw const IllegalAccessException();
- }
-
- E removeLast() {
- throw const IllegalAccessException();
- }
-
- String toString() => Collections.collectionToString(this);
-}
-
-
-LinkedHashMapImplementation _map(List itemsAndKeys) {
- LinkedHashMapImplementation ret = new LinkedHashMapImplementation();
- for (int i=0; i < itemsAndKeys.length;) {
- ret[itemsAndKeys[i++]] = itemsAndKeys[i++];
- }
- return ret;
-}
-
-ImmutableMap _constMap(List itemsAndKeys) {
- return new ImmutableMap(itemsAndKeys);
-}
-
-/** An immutable map. */
-class ImmutableMap<K, V> implements Map<K, V> {
- final Map<K, V> _internal;
-
- ImmutableMap(List keyValuePairs) : _internal = _map(keyValuePairs);
-
- V operator [](K key) => _internal[key];
-
- bool isEmpty() => _internal.isEmpty();
-
- int get length() => _internal.length;
-
- void forEach(void f(K key, V value)) {
- _internal.forEach(f);
- }
-
- Collection<K> getKeys() => _internal.getKeys();
-
- Collection<V> getValues() => _internal.getValues();
-
- bool containsKey(K key) => _internal.containsKey(key);
-
- bool containsValue(V value) => _internal.containsValue(value);
-
- void operator []=(K key, V value) {
- throw const IllegalAccessException();
- }
-
- V putIfAbsent(K key, V ifAbsent()) {
- throw const IllegalAccessException();
- }
-
- void clear() {
- throw const IllegalAccessException();
- }
-
- V remove(K key) {
- throw const IllegalAccessException();
- }
-
- String toString() => Maps.mapToString(this);
-}
-
-
-// TODO(jmesserly): this should wrap real RegExp when we can
-// We can't do it yet because we'd need a way to redirect the const
-// default constructor.
-// TODO(jimhug): One way to resolve this is to make the const constructor
-// very special in order for it to generate JS regex literals into the code
-// and then treat the constructor as a factory.
-class JSSyntaxRegExp implements RegExp {
- final String pattern;
- final bool multiLine;
- final bool ignoreCase;
-
- const JSSyntaxRegExp(String pattern, [bool multiLine, bool ignoreCase]):
- this._create(pattern,
- (multiLine == true ? 'm' : '') + (ignoreCase == true ? 'i' : ''));
-
- const JSSyntaxRegExp._create(String pattern, String flags) native
- '''this.re = new RegExp(pattern, flags);
- this.pattern = pattern;
- this.multiLine = this.re.multiline;
- this.ignoreCase = this.re.ignoreCase;''';
-
- Match firstMatch(String str) {
- List<String> m = _exec(str);
- return m == null ? null
- : new MatchImplementation(pattern, str, _matchStart(m), _lastIndex, m);
- }
-
- List<String> _exec(String str) native "return this.re.exec(str);" {
- // Note: this code is just a hint to tell the frog compiler the dependencies
- // this native code might have. It is not an implementation.
- return [];
- }
- int _matchStart(m) native "return m.index;";
- int get _lastIndex() native "return this.re.lastIndex;";
-
- bool hasMatch(String str) native "return this.re.test(str);";
-
- String stringMatch(String str) {
- var match = firstMatch(str);
- return match === null ? null : match.group(0);
- }
-
- Iterable<Match> allMatches(String str) => new _AllMatchesIterable(this, str);
-
- /**
- * Returns a new RegExp with the same pattern as this one and with the
- * "global" flag set. This allows us to match this RegExp against a string
- * multiple times, to support things like [allMatches] and
- * [String.replaceAll].
- *
- * Note that the returned RegExp disobeys the normal API in that it maintains
- * state about the location of the last match.
- */
- JSSyntaxRegExp get _global() => new JSSyntaxRegExp._create(pattern,
- 'g' + (multiLine ? 'm' : '') + (ignoreCase ? 'i' : ''));
-}
-
-class MatchImplementation implements Match {
- const MatchImplementation(
- String this.pattern,
- String this.str,
- int this._start,
- int this._end,
- List<String> this._groups);
-
- final String pattern;
- final String str;
- final int _start;
- final int _end;
- final List<String> _groups;
-
- int start() => _start;
- int end() => _end;
- String group(int groupIndex) => _groups[groupIndex];
- String operator [](int groupIndex) => _groups[groupIndex];
- int groupCount() => _groups.length;
-
- List<String> groups(List<int> groupIndices) {
- List<String> out = [];
- groupIndices.forEach((int groupIndex) => out.add(_groups[groupIndex]));
- return out;
- }
-}
-
-class _AllMatchesIterable implements Iterable<Match> {
- final JSSyntaxRegExp _re;
- final String _str;
-
- const _AllMatchesIterable(this._re, this._str);
-
- Iterator<Match> iterator() => new _AllMatchesIterator(_re, _str);
-}
-
-class _AllMatchesIterator implements Iterator<Match> {
- final RegExp _re;
- final String _str;
- Match _next;
- bool _done;
-
- _AllMatchesIterator(JSSyntaxRegExp re, String this._str)
- : _done = false, _re = re._global;
-
- Match next() {
- if (!hasNext()) {
- throw const NoMoreElementsException();
- }
-
- // _next is set by #hasNext
- var result = _next;
- _next = null;
- return result;
- }
-
- bool hasNext() {
- if (_done) {
- return false;
- } else if (_next != null) {
- return true;
- }
-
- _next = _re.firstMatch(_str);
- if (_next == null) {
- _done = true;
- return false;
- } else {
- return true;
- }
- }
-}
-
-
-class NumImplementation implements int, double native "Number" {
- // Arithmetic operations.
- num operator +(num other) native;
- num operator -(num other) native;
- num operator *(num other) native;
- num operator %(num other) native;
- num operator /(num other) native;
- // Truncating division.
- // TODO(jimhug): Implement
- num operator ~/(num other) native;
- // The unary '-' operator.
- num operator negate() native "'use strict'; return -this;";
-
- // Relational operations.
- bool operator <(num other) native;
- bool operator <=(num other) native;
- bool operator >(num other) native;
- bool operator >=(num other) native;
-
- bool operator ==(var other) native;
-
- // Bitwise operations
- int operator &(int other) native;
- int operator |(int other) native;
- int operator ^(int other) native;
- int operator ~() native;
- int operator <<(int shiftAmount) native;
- int operator >>(int shiftAmount) native;
-
-
- // TODO(jimhug): Move these out of methods to avoid boxing when not needed.
- // TODO(jmesserly): for now I'm avoiding boxing with "use strict", however,
- // we might want to do something better. It would be nice if operators and
- // methods on String/num were handled in a uniform way.
- num remainder(num other) native "'use strict'; return this % other;";
-
- bool isEven() native "'use strict'; return ((this & 1) == 0);";
- bool isOdd() native "'use strict'; return ((this & 1) == 1);";
- bool isNaN() native "'use strict'; return isNaN(this);";
- bool isNegative() native
- "'use strict'; return this == 0 ? (1 / this) < 0 : this < 0;";
- bool isInfinite() native
- "'use strict'; return (this == Infinity) || (this == -Infinity);";
-
- num abs() native "'use strict'; return Math.abs(this);";
- num round() native "'use strict'; return Math.round(this);";
- num floor() native "'use strict'; return Math.floor(this);";
- num ceil() native "'use strict'; return Math.ceil(this);";
- num truncate() native
- "'use strict'; return (this < 0) ? Math.ceil(this) : Math.floor(this);";
-
- int hashCode() native "'use strict'; return this & 0x1FFFFFFF;";
-
- // If truncated is -0.0 return +0. The test will also trigger for positive
- // 0s but that's not a problem.
- int toInt() native '''
- 'use strict';
- if (isNaN(this)) \$throw(new BadNumberFormatException("NaN"));
- if ((this == Infinity) || (this == -Infinity)) {
- \$throw(new BadNumberFormatException("Infinity"));
- }
- var truncated = (this < 0) ? Math.ceil(this) : Math.floor(this);
- if (truncated == -0.0) return 0;
- return truncated;''' { throw new BadNumberFormatException(""); }
-
- double toDouble() native "'use strict'; return this + 0;";
-
- String toStringAsFixed(int fractionDigits) native
- "'use strict'; return this.toFixed(fractionDigits);";
- String toStringAsExponential(int fractionDigits) native
- "'use strict'; return this.toExponential(fractionDigits)";
- String toStringAsPrecision(int precision) native
- "'use strict'; return this.toPrecision(precision)";
- String toRadixString(int radix) native
- "'use strict'; return this.toString(radix)";
-
- // CompareTo has to give a complete order, including -0/+0, NaN and
- // Infinities.
- // Order is: -Inf < .. < -0.0 < 0.0 .. < +inf < NaN.
- int compareTo(NumImplementation other) {
- // Don't use the 'this' object (which is a JS Number object), but get the
- // primitive JS number by invoking toDouble().
- num thisValue = toDouble();
- // Remember that NaN return false for any comparison.
- if (thisValue < other) {
- return -1;
- } else if (thisValue > other) {
- return 1;
- } else if (thisValue == other) {
- if (thisValue == 0) {
- bool thisIsNegative = isNegative();
- bool otherIsNegative = other.isNegative();
- if (thisIsNegative == otherIsNegative) return 0;
- if (thisIsNegative) return -1;
- return 1;
- }
- return 0;
- } else if (isNaN()) {
- if (other.isNaN()) {
- return 0;
- }
- return 1;
- } else {
- return -1;
- }
- }
-}
« no previous file with comments | « frog/lib/corelib.dart ('k') | frog/lib/date_implementation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698