| Index: sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| index 8f463f828bf1d9f94430f081cce4f9c7ef7880a6..8099a56c4306542c52c68f827fc6e3056918bf13 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| @@ -288,7 +288,7 @@ class Send extends Expression {
|
| if (argumentsNode != null) argumentsNode.accept(visitor);
|
| }
|
|
|
| - int argumentCount() => (argumentsNode == null) ? -1 : argumentsNode.length();
|
| + int argumentCount() => (argumentsNode == null) ? -1 : argumentsNode.length;
|
|
|
| bool get isSuperCall {
|
| return receiver != null &&
|
| @@ -419,14 +419,14 @@ class NodeList extends Node implements Iterable<Node> {
|
|
|
| NodeList([this.beginToken, this.nodes, this.endToken, this.delimiter]);
|
|
|
| - Iterator<Node> iterator() => nodes.iterator();
|
| + Iterator<Node> get iterator => nodes.iterator;
|
|
|
| NodeList.singleton(Node node) : this(null, const Link<Node>().prepend(node));
|
| NodeList.empty() : this(null, const Link<Node>());
|
|
|
| NodeList asNodeList() => this;
|
|
|
| - int length() {
|
| + int get length {
|
| int result = 0;
|
| for (Link<Node> cursor = nodes; !cursor.isEmpty; cursor = cursor.tail) {
|
| result++;
|
| @@ -469,6 +469,97 @@ class NodeList extends Node implements Iterable<Node> {
|
| }
|
| return beginToken;
|
| }
|
| +
|
| + // ------------------- Iterable methods -------------------------------------
|
| + //
|
| + // TODO(floitsch): these functions should be pulled in through a mixin
|
| + // mechanism.
|
| + Iterable mappedBy(f(Node element)) => new MappedIterable(this, f);
|
| +
|
| + Iterable<Node> where(bool f(Node element))
|
| + => new WhereIterable<Node>(this, f);
|
| +
|
| + bool contains(Node element) {
|
| + for (Node e in this) {
|
| + if (e == element) return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + void forEach(void f(Node element)) {
|
| + for (Node element in this) f(element);
|
| + }
|
| +
|
| + String join([String separator]) => Collections.join(this, separator);
|
| +
|
| + dynamic reduce(var initialValue,
|
| + dynamic combine(var previousValue, Node element)) {
|
| + var value = initialValue;
|
| + for (Node element in this) value = combine(value, element);
|
| + return value;
|
| + }
|
| +
|
| + bool every(bool f(Node element)) {
|
| + for (Node element in this) {
|
| + if (!f(element)) return false;
|
| + }
|
| + return true;
|
| + }
|
| +
|
| + bool any(bool f(Node element)) {
|
| + for (Node element in this) {
|
| + if (f(element)) return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + List<Node> toList() => new List<Node>.from(this);
|
| +
|
| + Set<Node> toSet() => new Set<Node>.from(this);
|
| +
|
| + Iterable<Node> take(int n) => new TakeIterable<Node>(this, n);
|
| +
|
| + Iterable<Node> takeWhile(bool test(Node value)) {
|
| + return new TakeWhileIterable<Node>(this, test);
|
| + }
|
| +
|
| + Iterable<Node> skip(int n) => new SkipIterable<Node>(this, n);
|
| +
|
| + Iterable<Node> skipWhile(bool test(Node value)) {
|
| + return new SkipWhileIterable<Node>(this, test);
|
| + }
|
| +
|
| + Node get first {
|
| + return Collections.first(this);
|
| + }
|
| +
|
| + Node get last {
|
| + return Collections.last(this);
|
| + }
|
| +
|
| + Node get single {
|
| + return Collections.single(this);
|
| + }
|
| +
|
| + Node min([int compare(Node a, Node b)]) => Collections.min(this, compare);
|
| +
|
| + Node max([int compare(Node a, Node b)]) => Collections.max(this, compare);
|
| +
|
| + Node firstMatching(bool test(Node value), {Node orElse()}) {
|
| + return Collections.firstMatching(this, test, orElse);
|
| + }
|
| +
|
| + Node lastMatching(bool test(Node value), {Node orElse()}) {
|
| + return Collections.lastMatching(this, test, orElse);
|
| + }
|
| +
|
| + Node singleMatching(bool test(Node value)) {
|
| + return Collections.singleMatching(this, test);
|
| + }
|
| +
|
| + Node elementAt(int index) {
|
| + return Collections.elementAt(this, index);
|
| + }
|
| }
|
|
|
| class Block extends Statement {
|
| @@ -686,7 +777,7 @@ class LiteralInt extends Literal<int> {
|
| try {
|
| Token valueToken = token;
|
| if (identical(valueToken.kind, PLUS_TOKEN)) valueToken = valueToken.next;
|
| - return parseInt(valueToken.value.slowToString());
|
| + return int.parse(valueToken.value.slowToString());
|
| } on FormatException catch (ex) {
|
| (this.handler)(token, ex);
|
| }
|
| @@ -705,7 +796,7 @@ class LiteralDouble extends Literal<double> {
|
| try {
|
| Token valueToken = token;
|
| if (identical(valueToken.kind, PLUS_TOKEN)) valueToken = valueToken.next;
|
| - return parseDouble(valueToken.value.slowToString());
|
| + return double.parse(valueToken.value.slowToString());
|
| } on FormatException catch (ex) {
|
| (this.handler)(token, ex);
|
| }
|
|
|