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

Unified Diff: pkg/js_ast/lib/src/builder.dart

Issue 1153243003: dart2js: Use frequency of occurence to sort metadata indices. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: sra comments Created 5 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
Index: pkg/js_ast/lib/src/builder.dart
diff --git a/pkg/js_ast/lib/src/builder.dart b/pkg/js_ast/lib/src/builder.dart
index 12f204e79343dcd347822df75d6c615fbcd92a04..f03c67c154089a38d5134c121d9bd463ba6d4ee8 100644
--- a/pkg/js_ast/lib/src/builder.dart
+++ b/pkg/js_ast/lib/src/builder.dart
@@ -329,6 +329,29 @@ class JsBuilder {
/// [escapedString].
LiteralString string(String value) => new LiteralString('"$value"');
+ /// Creates an instance of [LiteralString] from [value].
+ ///
+ /// Does not add quotes or do any escaping.
+ LiteralString stringPart(String value) => new LiteralString(value);
+
+ StringConcatenation concatenateStrings(Iterable<Literal> parts,
+ {addQuotes: false}) {
+ List<Literal> _parts;
+ if (addQuotes) {
+ Literal quote = stringPart('"');
+ _parts = <Literal>[quote]
+ ..addAll(parts)
+ ..add(quote);
+ } else {
+ _parts = new List.from(parts, growable: false);
+ }
+ return new StringConcatenation(_parts);
+ }
+
+ Iterable<Literal> joinLiterals(Iterable<Literal> list, Literal separator) {
+ return new _InterleaveIterable(list, separator);
+ }
+
LiteralNumber number(num value) => new LiteralNumber('$value');
LiteralBool boolean(bool value) => new LiteralBool(value);
@@ -349,6 +372,10 @@ class JsBuilder {
}
LiteralString string(String value) => js.string(value);
+LiteralString stringPart(String value) => js.stringPart(value);
+Iterable<Literal> joinLiterals(Iterable<Literal> list, Literal separator) {
+ return js.joinLiterals(list, separator);
+}
LiteralNumber number(num value) => js.number(value);
ArrayInitializer numArray(Iterable<int> list) => js.numArray(list);
ArrayInitializer stringArray(Iterable<String> list) => js.stringArray(list);
@@ -772,7 +799,6 @@ class MiniJsParser {
}
Expression parseFunctionExpression() {
- String last = lastToken;
if (lastCategory == ALPHA || lastCategory == HASH) {
Declaration name = parseVariableDeclaration();
return new NamedFunction(name, parseFun());
@@ -1272,7 +1298,6 @@ class MiniJsParser {
Statement parseTry() {
expectCategory(LBRACE);
Block body = parseBlock();
- String token = lastToken;
Catch catchPart = null;
if (acceptString('catch')) catchPart = parseCatch();
Block finallyPart = null;
@@ -1348,3 +1373,40 @@ class MiniJsParser {
return new Catch(errorName, body);
}
}
+
+class _InterleaveIterator implements Iterator<Node> {
+ Iterator<Node> source;
+ Node separator;
+ bool isNextSeparator = false;
+ bool isInitialized = false;
+
+ _InterleaveIterator(this.source, this.separator);
+
+ bool moveNext() {
+ if (!isInitialized) {
+ isInitialized = true;
+ return source.moveNext();
+ } else if (isNextSeparator) {
+ isNextSeparator = false;
+ return true;
+ } else {
+ return isNextSeparator = source.moveNext();
+ }
+ }
+
+ Node get current {
+ if (isNextSeparator) return separator._clone();
+ return source.current;
+ }
+}
+
+class _InterleaveIterable extends IterableBase {
+ Iterable<Node> source;
+ Node separator;
+
+ _InterleaveIterable(this.source, this.separator);
+
+ Iterator<Node> get iterator {
+ return new _InterleaveIterator(source.iterator, separator);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698