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

Side by Side Diff: tool/input_sdk/private/ddc_runtime/operations.dart

Issue 1879373004: Implement modular compilation (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 8 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 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart 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 file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// This library defines runtime operations on objects used by the code 5 /// This library defines runtime operations on objects used by the code
6 /// generator. 6 /// generator.
7 part of dart._runtime; 7 part of dart._runtime;
8 8
9 _canonicalFieldName(obj, name, args, displayName) => JS('', '''(() => { 9 _canonicalFieldName(obj, name, args, displayName) => JS('', '''(() => {
10 $name = $canonicalMember($obj, $name); 10 $name = $canonicalMember($obj, $name);
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 145
146 dsetindex(obj, index, value) => JS('', '''(() => { 146 dsetindex(obj, index, value) => JS('', '''(() => {
147 $callMethod($obj, 'set', [$index, $value], '[]='); 147 $callMethod($obj, 'set', [$index, $value], '[]=');
148 return $value; 148 return $value;
149 })()'''); 149 })()''');
150 150
151 _ignoreTypeFailure(actual, type) => JS('', '''(() => { 151 _ignoreTypeFailure(actual, type) => JS('', '''(() => {
152 // TODO(vsm): Remove this hack ... 152 // TODO(vsm): Remove this hack ...
153 // This is primarily due to the lack of generic methods, 153 // This is primarily due to the lack of generic methods,
154 // but we need to triage all the types. 154 // but we need to triage all the types.
155 if (isSubtype($type, $Iterable) && isSubtype($actual, $Iterable) || 155 if ($isSubtype($type, $Iterable) && $isSubtype($actual, $Iterable) ||
156 isSubtype($type, $Future) && isSubtype($actual, $Future) || 156 $isSubtype($type, $Future) && $isSubtype($actual, $Future) ||
157 isSubtype($type, $Map) && isSubtype($actual, $Map) || 157 $isSubtype($type, $Map) && $isSubtype($actual, $Map) ||
158 isSubtype($type, $Function) && isSubtype($actual, $Function) || 158 $isSubtype($type, $Function) && $isSubtype($actual, $Function) ||
159 isSubtype($type, $Stream) && isSubtype($actual, $Stream) || 159 $isSubtype($type, $Stream) && $isSubtype($actual, $Stream) ||
160 isSubtype($type, $StreamSubscription) && 160 $isSubtype($type, $StreamSubscription) &&
161 isSubtype($actual, $StreamSubscription)) { 161 $isSubtype($actual, $StreamSubscription)) {
162 console.warn('Ignoring cast fail from ' + $typeName($actual) + 162 console.warn('Ignoring cast fail from ' + $typeName($actual) +
163 ' to ' + $typeName($type)); 163 ' to ' + $typeName($type));
164 return true; 164 return true;
165 } 165 }
166 return false; 166 return false;
167 })()'''); 167 })()''');
168 168
169 strongInstanceOf(obj, type, ignoreFromWhiteList) => JS('', '''(() => { 169 strongInstanceOf(obj, type, ignoreFromWhiteList) => JS('', '''(() => {
170 let actual = $realRuntimeType($obj); 170 let actual = $realRuntimeType($obj);
171 if ($isSubtype(actual, $type) || actual == $jsobject || 171 if ($isSubtype(actual, $type) || actual == $jsobject ||
172 actual == $int && type == $double) return true; 172 actual == $int && type == $double) return true;
173 if ($ignoreFromWhiteList == void 0) return false; 173 if ($ignoreFromWhiteList == void 0) return false;
174 if ($isGroundType($type)) return false; 174 if ($isGroundType($type)) return false;
175 if ($_ignoreTypeFailure(actual, $type)) return true; 175 if ($_ignoreTypeFailure(actual, $type)) return true;
176 return false; 176 return false;
177 })()'''); 177 })()''');
178 178
179 instanceOfOrNull(obj, type) => JS('', '''(() => { 179 instanceOfOrNull(obj, type) => JS('', '''(() => {
180 if (($obj == null) || $strongInstanceOf($obj, $type, true)) return true; 180 if (($obj == null) || $strongInstanceOf($obj, $type, true)) return true;
181 return false; 181 return false;
182 })()'''); 182 })()''');
183 183
184 @JSExportName('is')
184 instanceOf(obj, type) => JS('', '''(() => { 185 instanceOf(obj, type) => JS('', '''(() => {
185 if ($strongInstanceOf($obj, $type)) return true; 186 if ($strongInstanceOf($obj, $type)) return true;
186 // TODO(#296): This is perhaps too eager to throw a StrongModeError? 187 // TODO(#296): This is perhaps too eager to throw a StrongModeError?
187 // It will throw on <int>[] is List<String>. 188 // It will throw on <int>[] is List<String>.
188 // TODO(vsm): We can statically detect many cases where this 189 // TODO(vsm): We can statically detect many cases where this
189 // check is unnecessary. 190 // check is unnecessary.
190 if ($isGroundType($type)) return false; 191 if ($isGroundType($type)) return false;
191 let actual = $realRuntimeType($obj); 192 let actual = $realRuntimeType($obj);
192 $throwStrongModeError('Strong mode is check failure: ' + 193 $throwStrongModeError('Strong mode is check failure: ' +
193 $typeName(actual) + ' does not soundly subtype ' + 194 $typeName(actual) + ' does not soundly subtype ' +
194 $typeName($type)); 195 $typeName($type));
195 })()'''); 196 })()''');
196 197
198 @JSExportName('as')
197 cast(obj, type) => JS('', '''(() => { 199 cast(obj, type) => JS('', '''(() => {
198 // TODO(#296): This is perhaps too eager to throw a StrongModeError? 200 // TODO(#296): This is perhaps too eager to throw a StrongModeError?
199 // TODO(vsm): handle non-nullable types 201 // TODO(vsm): handle non-nullable types
200 if ($instanceOfOrNull($obj, $type)) return $obj; 202 if ($instanceOfOrNull($obj, $type)) return $obj;
201 let actual = $realRuntimeType($obj); 203 let actual = $realRuntimeType($obj);
202 if ($isGroundType($type)) $throwCastError(actual, $type); 204 if ($isGroundType($type)) $throwCastError(actual, $type);
203 205
204 if ($_ignoreTypeFailure(actual, $type)) return $obj; 206 if ($_ignoreTypeFailure(actual, $type)) return $obj;
205 207
206 $throwStrongModeError('Strong mode cast failure from ' + 208 $throwStrongModeError('Strong mode cast failure from ' +
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 constructor(dartIterator) { 427 constructor(dartIterator) {
426 this.dartIterator = dartIterator; 428 this.dartIterator = dartIterator;
427 } 429 }
428 next() { 430 next() {
429 let i = this.dartIterator; 431 let i = this.dartIterator;
430 let done = !i.moveNext(); 432 let done = !i.moveNext();
431 return { done: done, value: done ? void 0 : i.current }; 433 return { done: done, value: done ? void 0 : i.current };
432 } 434 }
433 } 435 }
434 '''); 436 ''');
OLDNEW
« no previous file with comments | « tool/input_sdk/private/ddc_runtime/classes.dart ('k') | tool/input_sdk/private/ddc_runtime/rtti.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698