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

Side by Side Diff: lib/runtime/dart/core.js

Issue 1132113003: fixes #177, FunctionDeclarationStatement and closing over `this` (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 7 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 unified diff | Download patch
OLDNEW
1 var core = dart.defineLibrary(core, {}); 1 var core = dart.defineLibrary(core, {});
2 var _js_helper = dart.lazyImport(_js_helper); 2 var _js_helper = dart.lazyImport(_js_helper);
3 var _internal = dart.lazyImport(_internal); 3 var _internal = dart.lazyImport(_internal);
4 var collection = dart.lazyImport(collection); 4 var collection = dart.lazyImport(collection);
5 var _interceptors = dart.lazyImport(_interceptors); 5 var _interceptors = dart.lazyImport(_interceptors);
6 var convert = dart.lazyImport(convert); 6 var convert = dart.lazyImport(convert);
7 (function(exports, _js_helper, _internal, collection, _interceptors, convert) { 7 (function(exports, _js_helper, _internal, collection, _interceptors, convert) {
8 'use strict'; 8 'use strict';
9 class Object { 9 class Object {
10 constructor() { 10 constructor() {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 this._internal(year, month, day, hour, minute, second, millisecond, true); 136 this._internal(year, month, day, hour, minute, second, millisecond, true);
137 } 137 }
138 now() { 138 now() {
139 this._now(); 139 this._now();
140 } 140 }
141 static parse(formattedString) { 141 static parse(formattedString) {
142 let re = new RegExp('^([+-]?\\d{4,6})-?(\\d\\d)-?(\\d\\d)' + '(?:[ T](\\d\ \d)(?::?(\\d\\d)(?::?(\\d\\d)(.\\d{1,6})?)?)?' + '( ?[zZ]| ?([-+])(\\d\\d)(?::?( \\d\\d))?)?)?$'); 142 let re = new RegExp('^([+-]?\\d{4,6})-?(\\d\\d)-?(\\d\\d)' + '(?:[ T](\\d\ \d)(?::?(\\d\\d)(?::?(\\d\\d)(.\\d{1,6})?)?)?' + '( ?[zZ]| ?([-+])(\\d\\d)(?::?( \\d\\d))?)?)?$');
143 let match = re.firstMatch(formattedString); 143 let match = re.firstMatch(formattedString);
144 if (match != null) { 144 if (match != null) {
145 // Function parseIntOrZero: (String) → int 145 // Function parseIntOrZero: (String) → int
146 function parseIntOrZero(matched) { 146 let parseIntOrZero = matched => {
147 if (matched == null) 147 if (matched == null)
148 return 0; 148 return 0;
149 return int.parse(matched); 149 return int.parse(matched);
150 } 150 };
151 // Function parseDoubleOrZero: (String) → double 151 // Function parseDoubleOrZero: (String) → double
152 function parseDoubleOrZero(matched) { 152 let parseDoubleOrZero = matched => {
153 if (matched == null) 153 if (matched == null)
154 return 0.0; 154 return 0.0;
155 return double.parse(matched); 155 return double.parse(matched);
156 } 156 };
157 let years = int.parse(match.get(1)); 157 let years = int.parse(match.get(1));
158 let month = int.parse(match.get(2)); 158 let month = int.parse(match.get(2));
159 let day = int.parse(match.get(3)); 159 let day = int.parse(match.get(3));
160 let hour = parseIntOrZero(match.get(4)); 160 let hour = parseIntOrZero(match.get(4));
161 let minute = parseIntOrZero(match.get(5)); 161 let minute = parseIntOrZero(match.get(5));
162 let second = parseIntOrZero(match.get(6)); 162 let second = parseIntOrZero(match.get(6));
163 let addOneMillisecond = false; 163 let addOneMillisecond = false;
164 let millisecond = (dart.notNull(parseDoubleOrZero(match.get(7))) * 1000) .round(); 164 let millisecond = (dart.notNull(parseDoubleOrZero(match.get(7))) * 1000) .round();
165 if (millisecond == 1000) { 165 if (millisecond == 1000) {
166 addOneMillisecond = true; 166 addOneMillisecond = true;
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 return dart.equals(this[_duration], dart.dload(other, _duration)); 480 return dart.equals(this[_duration], dart.dload(other, _duration));
481 } 481 }
482 get hashCode() { 482 get hashCode() {
483 return dart.hashCode(this[_duration]); 483 return dart.hashCode(this[_duration]);
484 } 484 }
485 compareTo(other) { 485 compareTo(other) {
486 return this[_duration].compareTo(other[_duration]); 486 return this[_duration].compareTo(other[_duration]);
487 } 487 }
488 toString() { 488 toString() {
489 // Function sixDigits: (int) → String 489 // Function sixDigits: (int) → String
490 function sixDigits(n) { 490 let sixDigits = n => {
491 if (dart.notNull(n) >= 100000) 491 if (dart.notNull(n) >= 100000)
492 return `${n}`; 492 return `${n}`;
493 if (dart.notNull(n) >= 10000) 493 if (dart.notNull(n) >= 10000)
494 return `0${n}`; 494 return `0${n}`;
495 if (dart.notNull(n) >= 1000) 495 if (dart.notNull(n) >= 1000)
496 return `00${n}`; 496 return `00${n}`;
497 if (dart.notNull(n) >= 100) 497 if (dart.notNull(n) >= 100)
498 return `000${n}`; 498 return `000${n}`;
499 if (dart.notNull(n) >= 10) 499 if (dart.notNull(n) >= 10)
500 return `0000${n}`; 500 return `0000${n}`;
501 return `00000${n}`; 501 return `00000${n}`;
502 } 502 };
503 // Function twoDigits: (int) → String 503 // Function twoDigits: (int) → String
504 function twoDigits(n) { 504 let twoDigits = n => {
505 if (dart.notNull(n) >= 10) 505 if (dart.notNull(n) >= 10)
506 return `${n}`; 506 return `${n}`;
507 return `0${n}`; 507 return `0${n}`;
508 } 508 };
509 if (dart.notNull(this.inMicroseconds) < 0) { 509 if (dart.notNull(this.inMicroseconds) < 0) {
510 return `-${this['unary-']()}`; 510 return `-${this['unary-']()}`;
511 } 511 }
512 let twoDigitMinutes = twoDigits(this.inMinutes.remainder(Duration.MINUTES_ PER_HOUR)); 512 let twoDigitMinutes = twoDigits(this.inMinutes.remainder(Duration.MINUTES_ PER_HOUR));
513 let twoDigitSeconds = twoDigits(this.inSeconds.remainder(Duration.SECONDS_ PER_MINUTE)); 513 let twoDigitSeconds = twoDigits(this.inSeconds.remainder(Duration.SECONDS_ PER_MINUTE));
514 let sixDigitUs = sixDigits(this.inMicroseconds.remainder(Duration.MICROSEC ONDS_PER_SECOND)); 514 let sixDigitUs = sixDigits(this.inMicroseconds.remainder(Duration.MICROSEC ONDS_PER_SECOND));
515 return `${this.inHours}:${twoDigitMinutes}:${twoDigitSeconds}.${sixDigitUs }`; 515 return `${this.inHours}:${twoDigitMinutes}:${twoDigitSeconds}.${sixDigitUs }`;
516 } 516 }
517 get isNegative() { 517 get isNegative() {
518 return dart.notNull(this[_duration]) < 0; 518 return dart.notNull(this[_duration]) < 0;
(...skipping 1568 matching lines...) Expand 10 before | Expand all | Expand 10 after
2087 return this[_path]; 2087 return this[_path];
2088 } 2088 }
2089 get query() { 2089 get query() {
2090 return this[_query] == null ? "" : this[_query]; 2090 return this[_query] == null ? "" : this[_query];
2091 } 2091 }
2092 get fragment() { 2092 get fragment() {
2093 return this[_fragment] == null ? "" : this[_fragment]; 2093 return this[_fragment] == null ? "" : this[_fragment];
2094 } 2094 }
2095 static parse(uri) { 2095 static parse(uri) {
2096 // Function isRegName: (int) → bool 2096 // Function isRegName: (int) → bool
2097 function isRegName(ch) { 2097 let isRegName = ch => {
2098 return dart.notNull(ch) < 128 && dart.notNull(!dart.equals(dart.dsend(Ur i._regNameTable[$get](dart.notNull(ch) >> 4), '&', 1 << (dart.notNull(ch) & 15)) , 0)); 2098 return dart.notNull(ch) < 128 && dart.notNull(!dart.equals(dart.dsend(Ur i._regNameTable[$get](dart.notNull(ch) >> 4), '&', 1 << (dart.notNull(ch) & 15)) , 0));
2099 } 2099 };
2100 let EOI = -1; 2100 let EOI = -1;
2101 let scheme = ""; 2101 let scheme = "";
2102 let userinfo = ""; 2102 let userinfo = "";
2103 let host = null; 2103 let host = null;
2104 let port = null; 2104 let port = null;
2105 let path = null; 2105 let path = null;
2106 let query = null; 2106 let query = null;
2107 let fragment = null; 2107 let fragment = null;
2108 let index = 0; 2108 let index = 0;
2109 let pathStart = 0; 2109 let pathStart = 0;
2110 let char = EOI; 2110 let char = EOI;
2111 // Function parseAuth: () → void 2111 // Function parseAuth: () → void
2112 function parseAuth() { 2112 let parseAuth = () => {
2113 if (index == uri.length) { 2113 if (index == uri.length) {
2114 char = EOI; 2114 char = EOI;
2115 return; 2115 return;
2116 } 2116 }
2117 let authStart = index; 2117 let authStart = index;
2118 let lastColon = -1; 2118 let lastColon = -1;
2119 let lastAt = -1; 2119 let lastAt = -1;
2120 char = uri.codeUnitAt(index); 2120 char = uri.codeUnitAt(index);
2121 while (dart.notNull(index) < dart.notNull(uri.length)) { 2121 while (dart.notNull(index) < dart.notNull(uri.length)) {
2122 char = uri.codeUnitAt(index); 2122 char = uri.codeUnitAt(index);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2160 portNumber = dart.notNull(portNumber) * 10 + (dart.notNull(digit) - dart.notNull(Uri._ZERO)); 2160 portNumber = dart.notNull(portNumber) * 10 + (dart.notNull(digit) - dart.notNull(Uri._ZERO));
2161 } 2161 }
2162 } 2162 }
2163 port = Uri._makePort(portNumber, scheme); 2163 port = Uri._makePort(portNumber, scheme);
2164 hostEnd = lastColon; 2164 hostEnd = lastColon;
2165 } 2165 }
2166 host = Uri._makeHost(uri, hostStart, hostEnd, true); 2166 host = Uri._makeHost(uri, hostStart, hostEnd, true);
2167 if (dart.notNull(index) < dart.notNull(uri.length)) { 2167 if (dart.notNull(index) < dart.notNull(uri.length)) {
2168 char = uri.codeUnitAt(index); 2168 char = uri.codeUnitAt(index);
2169 } 2169 }
2170 } 2170 };
2171 let NOT_IN_PATH = 0; 2171 let NOT_IN_PATH = 0;
2172 let IN_PATH = 1; 2172 let IN_PATH = 1;
2173 let ALLOW_AUTH = 2; 2173 let ALLOW_AUTH = 2;
2174 let state = NOT_IN_PATH; 2174 let state = NOT_IN_PATH;
2175 let i = index; 2175 let i = index;
2176 while (dart.notNull(i) < dart.notNull(uri.length)) { 2176 while (dart.notNull(i) < dart.notNull(uri.length)) {
2177 char = uri.codeUnitAt(i); 2177 char = uri.codeUnitAt(i);
2178 if (char == Uri._QUESTION || char == Uri._NUMBER_SIGN) { 2178 if (char == Uri._QUESTION || char == Uri._NUMBER_SIGN) {
2179 state = NOT_IN_PATH; 2179 state = NOT_IN_PATH;
2180 break; 2180 break;
(...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after
3048 return dart.toString(sb); 3048 return dart.toString(sb);
3049 } 3049 }
3050 ['=='](other) { 3050 ['=='](other) {
3051 if (!dart.is(other, Uri)) 3051 if (!dart.is(other, Uri))
3052 return false; 3052 return false;
3053 let uri = dart.as(other, Uri); 3053 let uri = dart.as(other, Uri);
3054 return this.scheme == uri.scheme && this.hasAuthority == uri.hasAuthority && this.userInfo == uri.userInfo && this.host == uri.host && this.port == uri.po rt && this.path == uri.path && this.hasQuery == uri.hasQuery && this.query == ur i.query && this.hasFragment == uri.hasFragment && this.fragment == uri.fragment; 3054 return this.scheme == uri.scheme && this.hasAuthority == uri.hasAuthority && this.userInfo == uri.userInfo && this.host == uri.host && this.port == uri.po rt && this.path == uri.path && this.hasQuery == uri.hasQuery && this.query == ur i.query && this.hasFragment == uri.hasFragment && this.fragment == uri.fragment;
3055 } 3055 }
3056 get hashCode() { 3056 get hashCode() {
3057 // Function combine: (dynamic, dynamic) → int 3057 // Function combine: (dynamic, dynamic) → int
3058 function combine(part, current) { 3058 let combine = (part, current) => {
3059 return dart.as(dart.dsend(dart.dsend(dart.dsend(current, '*', 31), '+', dart.hashCode(part)), '&', 1073741823), int); 3059 return dart.as(dart.dsend(dart.dsend(dart.dsend(current, '*', 31), '+', dart.hashCode(part)), '&', 1073741823), int);
3060 } 3060 };
3061 return combine(this.scheme, combine(this.userInfo, combine(this.host, comb ine(this.port, combine(this.path, combine(this.query, combine(this.fragment, 1)) ))))); 3061 return combine(this.scheme, combine(this.userInfo, combine(this.host, comb ine(this.port, combine(this.path, combine(this.query, combine(this.fragment, 1)) )))));
3062 } 3062 }
3063 static _addIfNonEmpty(sb, test, first, second) { 3063 static _addIfNonEmpty(sb, test, first, second) {
3064 if ("" != test) { 3064 if ("" != test) {
3065 sb.write(first); 3065 sb.write(first);
3066 sb.write(second); 3066 sb.write(second);
3067 } 3067 }
3068 } 3068 }
3069 static encodeComponent(component) { 3069 static encodeComponent(component) {
3070 return Uri._uriEncode(dart.as(Uri._unreserved2396Table, List$(int)), compo nent); 3070 return Uri._uriEncode(dart.as(Uri._unreserved2396Table, List$(int)), compo nent);
(...skipping 26 matching lines...) Expand all
3097 } else if (index != 0) { 3097 } else if (index != 0) {
3098 let key = dart.dsend(element, 'substring', 0, index); 3098 let key = dart.dsend(element, 'substring', 0, index);
3099 let value = dart.dsend(element, 'substring', dart.notNull(index) + 1); 3099 let value = dart.dsend(element, 'substring', dart.notNull(index) + 1);
3100 dart.dsetindex(map, Uri.decodeQueryComponent(dart.as(key, String), {en coding: encoding}), Uri.decodeQueryComponent(dart.as(value, String), {encoding: encoding})); 3100 dart.dsetindex(map, Uri.decodeQueryComponent(dart.as(key, String), {en coding: encoding}), Uri.decodeQueryComponent(dart.as(value, String), {encoding: encoding}));
3101 } 3101 }
3102 return map; 3102 return map;
3103 }), Map$(String, String)); 3103 }), Map$(String, String));
3104 } 3104 }
3105 static parseIPv4Address(host) { 3105 static parseIPv4Address(host) {
3106 // Function error: (String) → void 3106 // Function error: (String) → void
3107 function error(msg) { 3107 let error = msg => {
3108 throw new FormatException(`Illegal IPv4 address, ${msg}`); 3108 throw new FormatException(`Illegal IPv4 address, ${msg}`);
3109 } 3109 };
3110 let bytes = host.split('.'); 3110 let bytes = host.split('.');
3111 if (bytes[$length] != 4) { 3111 if (bytes[$length] != 4) {
3112 error('IPv4 address should contain exactly 4 parts'); 3112 error('IPv4 address should contain exactly 4 parts');
3113 } 3113 }
3114 return dart.as(bytes[$map](byteString => { 3114 return dart.as(bytes[$map](byteString => {
3115 let byte = int.parse(dart.as(byteString, String)); 3115 let byte = int.parse(dart.as(byteString, String));
3116 if (dart.notNull(byte) < 0 || dart.notNull(byte) > 255) { 3116 if (dart.notNull(byte) < 0 || dart.notNull(byte) > 255) {
3117 error('each part must be in the range of `0..255`'); 3117 error('each part must be in the range of `0..255`');
3118 } 3118 }
3119 return byte; 3119 return byte;
3120 })[$toList](), List$(int)); 3120 })[$toList](), List$(int));
3121 } 3121 }
3122 static parseIPv6Address(host, start, end) { 3122 static parseIPv6Address(host, start, end) {
3123 if (start === void 0) 3123 if (start === void 0)
3124 start = 0; 3124 start = 0;
3125 if (end === void 0) 3125 if (end === void 0)
3126 end = null; 3126 end = null;
3127 if (end == null) 3127 if (end == null)
3128 end = host.length; 3128 end = host.length;
3129 // Function error: (String, [dynamic]) → void 3129 // Function error: (String, [dynamic]) → void
3130 function error(msg, position) { 3130 let error = (msg, position) => {
3131 if (position === void 0) 3131 if (position === void 0)
3132 position = null; 3132 position = null;
3133 throw new FormatException(`Illegal IPv6 address, ${msg}`, host, dart.as( position, int)); 3133 throw new FormatException(`Illegal IPv6 address, ${msg}`, host, dart.as( position, int));
3134 } 3134 };
3135 // Function parseHex: (int, int) → int 3135 // Function parseHex: (int, int) → int
3136 function parseHex(start, end) { 3136 let parseHex = (start, end) => {
3137 if (dart.notNull(end) - dart.notNull(start) > 4) { 3137 if (dart.notNull(end) - dart.notNull(start) > 4) {
3138 error('an IPv6 part can only contain a maximum of 4 hex digits', start ); 3138 error('an IPv6 part can only contain a maximum of 4 hex digits', start );
3139 } 3139 }
3140 let value = int.parse(host.substring(start, end), {radix: 16}); 3140 let value = int.parse(host.substring(start, end), {radix: 16});
3141 if (dart.notNull(value) < 0 || dart.notNull(value) > (1 << 16) - 1) { 3141 if (dart.notNull(value) < 0 || dart.notNull(value) > (1 << 16) - 1) {
3142 error('each part must be in the range of `0x0..0xFFFF`', start); 3142 error('each part must be in the range of `0x0..0xFFFF`', start);
3143 } 3143 }
3144 return value; 3144 return value;
3145 } 3145 };
3146 if (dart.notNull(host.length) < 2) 3146 if (dart.notNull(host.length) < 2)
3147 error('address is too short'); 3147 error('address is too short');
3148 let parts = dart.setType([], List$(int)); 3148 let parts = dart.setType([], List$(int));
3149 let wildcardSeen = false; 3149 let wildcardSeen = false;
3150 let partStart = start; 3150 let partStart = start;
3151 for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull( i) + 1) { 3151 for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNull( i) + 1) {
3152 if (host.codeUnitAt(i) == Uri._COLON) { 3152 if (host.codeUnitAt(i) == Uri._COLON) {
3153 if (i == start) { 3153 if (i == start) {
3154 i = dart.notNull(i) + 1; 3154 i = dart.notNull(i) + 1;
3155 if (host.codeUnitAt(i) != Uri._COLON) { 3155 if (host.codeUnitAt(i) != Uri._COLON) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
3213 bytes[$set](dart.notNull(index) + 1, dart.notNull(value) & 255); 3213 bytes[$set](dart.notNull(index) + 1, dart.notNull(value) & 255);
3214 index = dart.notNull(index) + 2; 3214 index = dart.notNull(index) + 2;
3215 } 3215 }
3216 } 3216 }
3217 return dart.as(bytes, List$(int)); 3217 return dart.as(bytes, List$(int));
3218 } 3218 }
3219 static _uriEncode(canonicalTable, text, opts) { 3219 static _uriEncode(canonicalTable, text, opts) {
3220 let encoding = opts && 'encoding' in opts ? opts.encoding : convert.UTF8; 3220 let encoding = opts && 'encoding' in opts ? opts.encoding : convert.UTF8;
3221 let spaceToPlus = opts && 'spaceToPlus' in opts ? opts.spaceToPlus : false ; 3221 let spaceToPlus = opts && 'spaceToPlus' in opts ? opts.spaceToPlus : false ;
3222 // Function byteToHex: (dynamic, dynamic) → dynamic 3222 // Function byteToHex: (dynamic, dynamic) → dynamic
3223 function byteToHex(byte, buffer) { 3223 let byteToHex = (byte, buffer) => {
3224 let hex = '0123456789ABCDEF'; 3224 let hex = '0123456789ABCDEF';
3225 dart.dsend(buffer, 'writeCharCode', hex.codeUnitAt(dart.as(dart.dsend(by te, '>>', 4), int))); 3225 dart.dsend(buffer, 'writeCharCode', hex.codeUnitAt(dart.as(dart.dsend(by te, '>>', 4), int)));
3226 dart.dsend(buffer, 'writeCharCode', hex.codeUnitAt(dart.as(dart.dsend(by te, '&', 15), int))); 3226 dart.dsend(buffer, 'writeCharCode', hex.codeUnitAt(dart.as(dart.dsend(by te, '&', 15), int)));
3227 } 3227 };
3228 let result = new StringBuffer(); 3228 let result = new StringBuffer();
3229 let bytes = encoding.encode(text); 3229 let bytes = encoding.encode(text);
3230 for (let i = 0; dart.notNull(i) < dart.notNull(bytes[$length]); i = dart.n otNull(i) + 1) { 3230 for (let i = 0; dart.notNull(i) < dart.notNull(bytes[$length]); i = dart.n otNull(i) + 1) {
3231 let byte = bytes[$get](i); 3231 let byte = bytes[$get](i);
3232 if (dart.notNull(byte) < 128 && (dart.notNull(canonicalTable[$get](dart. notNull(byte) >> 4)) & 1 << (dart.notNull(byte) & 15)) != 0) { 3232 if (dart.notNull(byte) < 128 && (dart.notNull(canonicalTable[$get](dart. notNull(byte) >> 4)) & 1 << (dart.notNull(byte) & 15)) != 0) {
3233 result.writeCharCode(byte); 3233 result.writeCharCode(byte);
3234 } else if (dart.notNull(spaceToPlus) && byte == Uri._SPACE) { 3234 } else if (dart.notNull(spaceToPlus) && byte == Uri._SPACE) {
3235 result.writeCharCode(Uri._PLUS); 3235 result.writeCharCode(Uri._PLUS);
3236 } else { 3236 } else {
3237 result.writeCharCode(Uri._PERCENT); 3237 result.writeCharCode(Uri._PERCENT);
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
3485 exports.Stopwatch = Stopwatch; 3485 exports.Stopwatch = Stopwatch;
3486 exports.String = String; 3486 exports.String = String;
3487 exports.RuneIterator = RuneIterator; 3487 exports.RuneIterator = RuneIterator;
3488 exports.StringBuffer = StringBuffer; 3488 exports.StringBuffer = StringBuffer;
3489 exports.StringSink = StringSink; 3489 exports.StringSink = StringSink;
3490 exports.Symbol = Symbol; 3490 exports.Symbol = Symbol;
3491 exports.Type = Type; 3491 exports.Type = Type;
3492 exports.Uri = Uri; 3492 exports.Uri = Uri;
3493 exports.SupportJsExtensionMethods = SupportJsExtensionMethods; 3493 exports.SupportJsExtensionMethods = SupportJsExtensionMethods;
3494 })(core, _js_helper, _internal, collection, _interceptors, convert); 3494 })(core, _js_helper, _internal, collection, _interceptors, convert);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698