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

Side by Side Diff: pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart

Issue 2404123002: Build CFG for various JS() foreign methods (Closed)
Patch Set: Created 4 years, 2 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import 'package:js_runtime/shared/embedded_names.dart';
5 import 'package:kernel/ast.dart' as ir; 6 import 'package:kernel/ast.dart' as ir;
6 7
7 import '../common.dart'; 8 import '../common.dart';
8 import '../common/names.dart'; 9 import '../common/names.dart';
9 import '../compiler.dart'; 10 import '../compiler.dart';
10 import '../constants/values.dart'; 11 import '../constants/values.dart';
11 import '../dart_types.dart'; 12 import '../dart_types.dart';
12 import '../elements/elements.dart'; 13 import '../elements/elements.dart';
14 import '../js/js.dart' as js;
13 import '../js_backend/js_backend.dart'; 15 import '../js_backend/js_backend.dart';
14 import '../kernel/kernel.dart'; 16 import '../kernel/kernel.dart';
17 import '../native/native.dart' as native;
15 import '../resolution/tree_elements.dart'; 18 import '../resolution/tree_elements.dart';
16 import '../tree/tree.dart' as ast; 19 import '../tree/tree.dart' as ast;
17 import '../types/masks.dart'; 20 import '../types/masks.dart';
18 import '../types/types.dart'; 21 import '../types/types.dart';
19 import '../universe/call_structure.dart'; 22 import '../universe/call_structure.dart';
20 import '../universe/selector.dart'; 23 import '../universe/selector.dart';
21 import '../universe/side_effects.dart'; 24 import '../universe/side_effects.dart';
22 import '../world.dart'; 25 import '../world.dart';
23 import 'locals_handler.dart'; 26 import 'locals_handler.dart';
24 import 'types.dart'; 27 import 'types.dart';
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 } 216 }
214 217
215 TypeMask inferredTypeOf(ir.Member node) { 218 TypeMask inferredTypeOf(ir.Member node) {
216 return TypeMaskFactory.inferredTypeForElement(getElement(node), _compiler); 219 return TypeMaskFactory.inferredTypeForElement(getElement(node), _compiler);
217 } 220 }
218 221
219 TypeMask selectorTypeOf(Selector selector, TypeMask mask) { 222 TypeMask selectorTypeOf(Selector selector, TypeMask mask) {
220 return TypeMaskFactory.inferredTypeForSelector(selector, mask, _compiler); 223 return TypeMaskFactory.inferredTypeForSelector(selector, mask, _compiler);
221 } 224 }
222 225
226 TypeMask typeFromNativeBehavior(native.NativeBehavior nativeBehavior) {
227 return TypeMaskFactory.fromNativeBehavior(nativeBehavior, _compiler);
228 }
229
223 ConstantValue getConstantFor(ir.Node node) { 230 ConstantValue getConstantFor(ir.Node node) {
224 ConstantValue constantValue = 231 ConstantValue constantValue =
225 _backend.constants.getConstantValueForNode(getNode(node), elements); 232 _backend.constants.getConstantValueForNode(getNode(node), elements);
226 assert(invariant(getNode(node), constantValue != null, 233 assert(invariant(getNode(node), constantValue != null,
227 message: 'No constant computed for $node')); 234 message: 'No constant computed for $node'));
228 return constantValue; 235 return constantValue;
229 } 236 }
230 237
231 bool isIntercepted(ir.Node node) { 238 bool isIntercepted(ir.Node node) {
232 Selector selector = getSelector(node); 239 Selector selector = getSelector(node);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 272
266 TypeMask get assertTestReturnType => TypeMaskFactory 273 TypeMask get assertTestReturnType => TypeMaskFactory
267 .inferredReturnTypeForElement(_backend.helpers.assertTest, _compiler); 274 .inferredReturnTypeForElement(_backend.helpers.assertTest, _compiler);
268 275
269 ir.Procedure get assertThrow => 276 ir.Procedure get assertThrow =>
270 kernel.functions[_backend.helpers.assertThrow]; 277 kernel.functions[_backend.helpers.assertThrow];
271 278
272 TypeMask get assertThrowReturnType => TypeMaskFactory 279 TypeMask get assertThrowReturnType => TypeMaskFactory
273 .inferredReturnTypeForElement(_backend.helpers.assertThrow, _compiler); 280 .inferredReturnTypeForElement(_backend.helpers.assertThrow, _compiler);
274 281
282 //bool isInForeignLibrary(ir.Member member) =>
Harry Terkelsen 2016/10/12 16:42:59 remove this comment?
sra1 2016/10/13 19:02:01 Done.
283 // getElement(member.enclosingLibrary) == _backend.helpers.foreignLibrary;
284 bool isInForeignLibrary(ir.Member member) =>
285 _backend.isForeign(getElement(member));
286
287 native.NativeBehavior getNativeBehavior(ir.Node node) {
288 return elements.getNativeData(getNode(node));
289 }
290
291 js.Name getNameForJsGetName(ir.Node argument, ConstantValue constant) {
292 int index = _extractEnumIndexFromConstantValue(
293 constant, _backend.helpers.jsGetNameEnum);
294 if (index == null) return null;
295 return _backend.namer
296 .getNameForJsGetName(getNode(argument), JsGetName.values[index]);
297 }
298
299 js.Template getJsBuiltinTemplate(ConstantValue constant) {
300 int index = _extractEnumIndexFromConstantValue(
301 constant, _backend.helpers.jsBuiltinEnum);
302 if (index == null) return null;
303 return _backend.emitter.builtinTemplateFor(JsBuiltin.values[index]);
304 }
305
306 int _extractEnumIndexFromConstantValue(
307 ConstantValue constant, Element classElement) {
308 if (constant is ConstructedConstantValue) {
309 if (constant.type.element == classElement) {
310 assert(constant.fields.length == 1);
311 ConstantValue indexConstant = constant.fields.values.single;
312 if (indexConstant is IntConstantValue) {
313 return indexConstant.primitiveValue;
314 }
315 }
316 }
317 return null;
318 }
319
275 DartType getDartType(ir.DartType type) { 320 DartType getDartType(ir.DartType type) {
276 return type.accept(_typeConverter); 321 return type.accept(_typeConverter);
277 } 322 }
278 323
279 List<DartType> getDartTypes(List<ir.DartType> types) { 324 List<DartType> getDartTypes(List<ir.DartType> types) {
280 return types.map(getDartType).toList(); 325 return types.map(getDartType).toList();
281 } 326 }
282 } 327 }
283 328
284 class DartTypeConverter extends ir.DartTypeVisitor<DartType> { 329 class DartTypeConverter extends ir.DartTypeVisitor<DartType> {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 @override 371 @override
327 DartType visitDynamicType(ir.DynamicType node) { 372 DartType visitDynamicType(ir.DynamicType node) {
328 return const DynamicType(); 373 return const DynamicType();
329 } 374 }
330 375
331 @override 376 @override
332 DartType visitInvalidType(ir.InvalidType node) { 377 DartType visitInvalidType(ir.InvalidType node) {
333 throw new UnimplementedError("Invalid types not currently supported"); 378 throw new UnimplementedError("Invalid types not currently supported");
334 } 379 }
335 } 380 }
OLDNEW
« pkg/compiler/lib/src/ssa/builder_kernel.dart ('K') | « pkg/compiler/lib/src/ssa/builder_kernel.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698