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

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

Issue 2814453005: Merge CommonElements and BackendHelpers! (Closed)
Patch Set: comments and re-merge, take two Created 3 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) 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:js_runtime/shared/embedded_names.dart';
6 import 'package:kernel/ast.dart' as ir; 6 import 'package:kernel/ast.dart' as ir;
7 7
8 import '../closure.dart'; 8 import '../closure.dart';
9 import '../common.dart'; 9 import '../common.dart';
10 import '../compiler.dart'; 10 import '../compiler.dart';
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 } 273 }
274 274
275 TypeMask typeOfIteratorMoveNext(ir.ForInStatement forInStatement) { 275 TypeMask typeOfIteratorMoveNext(ir.ForInStatement forInStatement) {
276 return _resultOf(_target).typeOfIteratorMoveNext(getNode(forInStatement)); 276 return _resultOf(_target).typeOfIteratorMoveNext(getNode(forInStatement));
277 } 277 }
278 278
279 bool isJsIndexableIterator( 279 bool isJsIndexableIterator(
280 ir.ForInStatement forInStatement, ClosedWorld closedWorld) { 280 ir.ForInStatement forInStatement, ClosedWorld closedWorld) {
281 TypeMask mask = typeOfIterator(forInStatement); 281 TypeMask mask = typeOfIterator(forInStatement);
282 return mask != null && 282 return mask != null &&
283 mask.satisfies(_backend.helpers.jsIndexableClass, closedWorld) && 283 mask.satisfies(
284 _compiler.commonElements.jsIndexableClass, closedWorld) &&
284 // String is indexable but not iterable. 285 // String is indexable but not iterable.
285 !mask.satisfies(_backend.helpers.jsStringClass, closedWorld); 286 !mask.satisfies(_compiler.commonElements.jsStringClass, closedWorld);
286 } 287 }
287 288
288 bool isFixedLength(TypeMask mask, ClosedWorld closedWorld) { 289 bool isFixedLength(TypeMask mask, ClosedWorld closedWorld) {
289 if (mask.isContainer && (mask as ContainerTypeMask).length != null) { 290 if (mask.isContainer && (mask as ContainerTypeMask).length != null) {
290 // A container on which we have inferred the length. 291 // A container on which we have inferred the length.
291 return true; 292 return true;
292 } 293 }
293 // TODO(sra): Recognize any combination of fixed length indexables. 294 // TODO(sra): Recognize any combination of fixed length indexables.
294 if (mask.containsOnly(closedWorld.backendClasses.fixedListClass) || 295 if (mask.containsOnly(closedWorld.backendClasses.fixedListClass) ||
295 mask.containsOnly(closedWorld.backendClasses.constListClass) || 296 mask.containsOnly(closedWorld.backendClasses.constListClass) ||
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 363
363 // Is the member a lazy initialized static or top-level member? 364 // Is the member a lazy initialized static or top-level member?
364 bool isLazyStatic(ir.Member member) { 365 bool isLazyStatic(ir.Member member) {
365 if (member is ir.Field) { 366 if (member is ir.Field) {
366 FieldElement field = _nodeToElement[member]; 367 FieldElement field = _nodeToElement[member];
367 return field.constant == null; 368 return field.constant == null;
368 } 369 }
369 return false; 370 return false;
370 } 371 }
371 372
372 LibraryElement get jsHelperLibrary => _backend.helpers.jsHelperLibrary; 373 LibraryElement get jsHelperLibrary =>
374 _compiler.commonElements.jsHelperLibrary;
373 375
374 KernelJumpTarget getJumpTarget(ir.TreeNode node, 376 KernelJumpTarget getJumpTarget(ir.TreeNode node,
375 {bool isContinueTarget: false}) { 377 {bool isContinueTarget: false}) {
376 return _jumpTargets.putIfAbsent(node, () { 378 return _jumpTargets.putIfAbsent(node, () {
377 if (node is ir.LabeledStatement && _jumpTargets.containsKey(node.body)) { 379 if (node is ir.LabeledStatement && _jumpTargets.containsKey(node.body)) {
378 return _jumpTargets[node.body]; 380 return _jumpTargets[node.body];
379 } 381 }
380 return new KernelJumpTarget(node, this, 382 return new KernelJumpTarget(node, this,
381 makeContinueLabel: isContinueTarget); 383 makeContinueLabel: isContinueTarget);
382 }); 384 });
383 } 385 }
384 386
385 ir.Procedure get checkDeferredIsLoaded => 387 ir.Procedure get checkDeferredIsLoaded =>
386 kernel.functions[_backend.helpers.checkDeferredIsLoaded]; 388 kernel.functions[_compiler.commonElements.checkDeferredIsLoaded];
387 389
388 TypeMask get checkDeferredIsLoadedType => 390 TypeMask get checkDeferredIsLoadedType =>
389 TypeMaskFactory.inferredReturnTypeForElement( 391 TypeMaskFactory.inferredReturnTypeForElement(
390 _backend.helpers.checkDeferredIsLoaded, _globalInferenceResults); 392 _compiler.commonElements.checkDeferredIsLoaded,
393 _globalInferenceResults);
391 394
392 ir.Procedure get createInvocationMirror => 395 ir.Procedure get createInvocationMirror =>
393 kernel.functions[_backend.helpers.createInvocationMirror]; 396 kernel.functions[_compiler.commonElements.createInvocationMirror];
394 397
395 ir.Class get mapLiteralClass => 398 ir.Class get mapLiteralClass =>
396 kernel.classes[_backend.helpers.mapLiteralClass]; 399 kernel.classes[_compiler.commonElements.mapLiteralClass];
397 400
398 ir.Procedure get mapLiteralConstructor => 401 ir.Procedure get mapLiteralConstructor =>
399 kernel.functions[_backend.helpers.mapLiteralConstructor]; 402 kernel.functions[_compiler.commonElements.mapLiteralConstructor];
400 403
401 ir.Procedure get mapLiteralConstructorEmpty => 404 ir.Procedure get mapLiteralConstructorEmpty =>
402 kernel.functions[_backend.helpers.mapLiteralConstructorEmpty]; 405 kernel.functions[_compiler.commonElements.mapLiteralConstructorEmpty];
403 406
404 ir.Procedure get mapLiteralUntypedEmptyMaker => 407 ir.Procedure get mapLiteralUntypedEmptyMaker =>
405 kernel.functions[_backend.helpers.mapLiteralUntypedEmptyMaker]; 408 kernel.functions[_compiler.commonElements.mapLiteralUntypedEmptyMaker];
406 409
407 ir.Procedure get exceptionUnwrapper => 410 ir.Procedure get exceptionUnwrapper =>
408 kernel.functions[_backend.helpers.exceptionUnwrapper]; 411 kernel.functions[_compiler.commonElements.exceptionUnwrapper];
409 412
410 TypeMask get exceptionUnwrapperType => 413 TypeMask get exceptionUnwrapperType =>
411 TypeMaskFactory.inferredReturnTypeForElement( 414 TypeMaskFactory.inferredReturnTypeForElement(
412 _backend.helpers.exceptionUnwrapper, _globalInferenceResults); 415 _compiler.commonElements.exceptionUnwrapper, _globalInferenceResults);
413 416
414 ir.Procedure get traceFromException => 417 ir.Procedure get traceFromException =>
415 kernel.functions[_backend.helpers.traceFromException]; 418 kernel.functions[_compiler.commonElements.traceFromException];
416 419
417 TypeMask get traceFromExceptionType => 420 TypeMask get traceFromExceptionType =>
418 TypeMaskFactory.inferredReturnTypeForElement( 421 TypeMaskFactory.inferredReturnTypeForElement(
419 _backend.helpers.traceFromException, _globalInferenceResults); 422 _compiler.commonElements.traceFromException, _globalInferenceResults);
420 423
421 ir.Procedure get streamIteratorConstructor => 424 ir.Procedure get streamIteratorConstructor =>
422 kernel.functions[_backend.helpers.streamIteratorConstructor]; 425 kernel.functions[_compiler.commonElements.streamIteratorConstructor];
423 426
424 TypeMask get streamIteratorConstructorType => 427 TypeMask get streamIteratorConstructorType =>
425 TypeMaskFactory.inferredReturnTypeForElement( 428 TypeMaskFactory.inferredReturnTypeForElement(
426 // ignore: UNNECESSARY_CAST 429 // ignore: UNNECESSARY_CAST
427 _backend.helpers.streamIteratorConstructor as FunctionEntity, 430 _compiler.commonElements.streamIteratorConstructor as FunctionEntity,
428 _globalInferenceResults); 431 _globalInferenceResults);
429 432
430 ir.Procedure get fallThroughError => 433 ir.Procedure get fallThroughError =>
431 kernel.functions[_backend.helpers.fallThroughError]; 434 kernel.functions[_compiler.commonElements.fallThroughError];
432 435
433 TypeMask get fallThroughErrorType => 436 TypeMask get fallThroughErrorType =>
434 TypeMaskFactory.inferredReturnTypeForElement( 437 TypeMaskFactory.inferredReturnTypeForElement(
435 _backend.helpers.fallThroughError, _globalInferenceResults); 438 _compiler.commonElements.fallThroughError, _globalInferenceResults);
436 439
437 ir.Procedure get mapLiteralUntypedMaker => 440 ir.Procedure get mapLiteralUntypedMaker =>
438 kernel.functions[_backend.helpers.mapLiteralUntypedMaker]; 441 kernel.functions[_compiler.commonElements.mapLiteralUntypedMaker];
439 442
440 ir.Procedure get checkConcurrentModificationError => 443 ir.Procedure get checkConcurrentModificationError => kernel
441 kernel.functions[_backend.helpers.checkConcurrentModificationError]; 444 .functions[_compiler.commonElements.checkConcurrentModificationError];
442 445
443 TypeMask get checkConcurrentModificationErrorReturnType => 446 TypeMask get checkConcurrentModificationErrorReturnType =>
444 TypeMaskFactory.inferredReturnTypeForElement( 447 TypeMaskFactory.inferredReturnTypeForElement(
445 _backend.helpers.checkConcurrentModificationError, 448 _compiler.commonElements.checkConcurrentModificationError,
446 _globalInferenceResults); 449 _globalInferenceResults);
447 450
448 ir.Procedure get checkSubtype => 451 ir.Procedure get checkSubtype =>
449 kernel.functions[_backend.helpers.checkSubtype]; 452 kernel.functions[_compiler.commonElements.checkSubtype];
450 453
451 ir.Procedure get checkSubtypeOfRuntimeType => 454 ir.Procedure get checkSubtypeOfRuntimeType =>
452 kernel.functions[_backend.helpers.checkSubtypeOfRuntimeType]; 455 kernel.functions[_compiler.commonElements.checkSubtypeOfRuntimeType];
453 456
454 ir.Procedure get functionTypeTest => 457 ir.Procedure get functionTypeTest =>
455 kernel.functions[_backend.helpers.functionTypeTest]; 458 kernel.functions[_compiler.commonElements.functionTypeTest];
456 459
457 ir.Procedure get throwTypeError => 460 ir.Procedure get throwTypeError =>
458 kernel.functions[_backend.helpers.throwTypeError]; 461 kernel.functions[_compiler.commonElements.throwTypeError];
459 462
460 TypeMask get throwTypeErrorType => 463 TypeMask get throwTypeErrorType =>
461 TypeMaskFactory.inferredReturnTypeForElement( 464 TypeMaskFactory.inferredReturnTypeForElement(
462 _backend.helpers.throwTypeError, _globalInferenceResults); 465 _compiler.commonElements.throwTypeError, _globalInferenceResults);
463 466
464 ir.Procedure get assertHelper => 467 ir.Procedure get assertHelper =>
465 kernel.functions[_backend.helpers.assertHelper]; 468 kernel.functions[_compiler.commonElements.assertHelper];
466 469
467 TypeMask get assertHelperReturnType => 470 TypeMask get assertHelperReturnType =>
468 TypeMaskFactory.inferredReturnTypeForElement( 471 TypeMaskFactory.inferredReturnTypeForElement(
469 _backend.helpers.assertHelper, _globalInferenceResults); 472 _compiler.commonElements.assertHelper, _globalInferenceResults);
470 473
471 ir.Procedure get assertTest => kernel.functions[_backend.helpers.assertTest]; 474 ir.Procedure get assertTest =>
475 kernel.functions[_compiler.commonElements.assertTest];
472 476
473 TypeMask get assertTestReturnType => 477 TypeMask get assertTestReturnType =>
474 TypeMaskFactory.inferredReturnTypeForElement( 478 TypeMaskFactory.inferredReturnTypeForElement(
475 _backend.helpers.assertTest, _globalInferenceResults); 479 _compiler.commonElements.assertTest, _globalInferenceResults);
476 480
477 ir.Procedure get assertThrow => 481 ir.Procedure get assertThrow =>
478 kernel.functions[_backend.helpers.assertThrow]; 482 kernel.functions[_compiler.commonElements.assertThrow];
479 483
480 ir.Procedure get setRuntimeTypeInfo => 484 ir.Procedure get setRuntimeTypeInfo =>
481 kernel.functions[_backend.helpers.setRuntimeTypeInfo]; 485 kernel.functions[_compiler.commonElements.setRuntimeTypeInfo];
482 486
483 TypeMask get assertThrowReturnType => 487 TypeMask get assertThrowReturnType =>
484 TypeMaskFactory.inferredReturnTypeForElement( 488 TypeMaskFactory.inferredReturnTypeForElement(
485 _backend.helpers.assertThrow, _globalInferenceResults); 489 _compiler.commonElements.assertThrow, _globalInferenceResults);
486 490
487 ir.Procedure get runtimeTypeToString => 491 ir.Procedure get runtimeTypeToString =>
488 kernel.functions[_backend.helpers.runtimeTypeToString]; 492 kernel.functions[_compiler.commonElements.runtimeTypeToString];
489 493
490 ir.Procedure get createRuntimeType => 494 ir.Procedure get createRuntimeType =>
491 kernel.functions[_backend.helpers.createRuntimeType]; 495 kernel.functions[_compiler.commonElements.createRuntimeType];
492 496
493 TypeMask get createRuntimeTypeReturnType => 497 TypeMask get createRuntimeTypeReturnType =>
494 TypeMaskFactory.inferredReturnTypeForElement( 498 TypeMaskFactory.inferredReturnTypeForElement(
495 _backend.helpers.createRuntimeType, _globalInferenceResults); 499 _compiler.commonElements.createRuntimeType, _globalInferenceResults);
496 500
497 ir.Class get objectClass => 501 ir.Class get objectClass =>
498 kernel.classes[_compiler.commonElements.objectClass]; 502 kernel.classes[_compiler.commonElements.objectClass];
499 503
500 ir.Class get futureClass => 504 ir.Class get futureClass =>
501 kernel.classes[_compiler.commonElements.futureClass]; 505 kernel.classes[_compiler.commonElements.futureClass];
502 506
503 TypeMask makeSubtypeOfObject(ClosedWorld closedWorld) => 507 TypeMask makeSubtypeOfObject(ClosedWorld closedWorld) =>
504 new TypeMask.subclass(_compiler.commonElements.objectClass, closedWorld); 508 new TypeMask.subclass(_compiler.commonElements.objectClass, closedWorld);
505 509
506 ir.Procedure get currentIsolate => 510 ir.Procedure get currentIsolate =>
507 kernel.functions[_backend.helpers.currentIsolate]; 511 kernel.functions[_compiler.commonElements.currentIsolate];
508 512
509 ir.Procedure get callInIsolate => 513 ir.Procedure get callInIsolate =>
510 kernel.functions[_backend.helpers.callInIsolate]; 514 kernel.functions[_compiler.commonElements.callInIsolate];
511 515
512 bool isInForeignLibrary(ir.Member member) => 516 bool isInForeignLibrary(ir.Member member) =>
513 _backend.isForeign(getElement(member)); 517 _backend.isForeign(getElement(member));
514 518
515 native.NativeBehavior getNativeBehavior(ir.Node node) { 519 native.NativeBehavior getNativeBehavior(ir.Node node) {
516 return elements.getNativeData(getNode(node)); 520 return elements.getNativeData(getNode(node));
517 } 521 }
518 522
519 js.Name getNameForJsGetName(ir.Node argument, ConstantValue constant) { 523 js.Name getNameForJsGetName(ir.Node argument, ConstantValue constant) {
520 int index = _extractEnumIndexFromConstantValue( 524 int index = _extractEnumIndexFromConstantValue(
521 constant, _backend.helpers.jsGetNameEnum); 525 constant, _compiler.commonElements.jsGetNameEnum);
522 if (index == null) return null; 526 if (index == null) return null;
523 return _backend.namer 527 return _backend.namer
524 .getNameForJsGetName(getNode(argument), JsGetName.values[index]); 528 .getNameForJsGetName(getNode(argument), JsGetName.values[index]);
525 } 529 }
526 530
527 js.Template getJsBuiltinTemplate(ConstantValue constant) { 531 js.Template getJsBuiltinTemplate(ConstantValue constant) {
528 int index = _extractEnumIndexFromConstantValue( 532 int index = _extractEnumIndexFromConstantValue(
529 constant, _backend.helpers.jsBuiltinEnum); 533 constant, _compiler.commonElements.jsBuiltinEnum);
530 if (index == null) return null; 534 if (index == null) return null;
531 return _backend.emitter.builtinTemplateFor(JsBuiltin.values[index]); 535 return _backend.emitter.builtinTemplateFor(JsBuiltin.values[index]);
532 } 536 }
533 537
534 int _extractEnumIndexFromConstantValue( 538 int _extractEnumIndexFromConstantValue(
535 ConstantValue constant, ClassEntity classElement) { 539 ConstantValue constant, ClassEntity classElement) {
536 if (constant is ConstructedConstantValue) { 540 if (constant is ConstructedConstantValue) {
537 if (constant.type.element == classElement) { 541 if (constant.type.element == classElement) {
538 assert(constant.fields.length == 1 || constant.fields.length == 2); 542 assert(constant.fields.length == 1 || constant.fields.length == 2);
539 ConstantValue indexConstant = constant.fields.values.first; 543 ConstantValue indexConstant = constant.fields.values.first;
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 JumpTarget continueTarget = 821 JumpTarget continueTarget =
818 astAdapter.getJumpTarget(switchCase, isContinueTarget: true); 822 astAdapter.getJumpTarget(switchCase, isContinueTarget: true);
819 assert(continueTarget is KernelJumpTarget); 823 assert(continueTarget is KernelJumpTarget);
820 targetIndexMap[continueTarget] = switchIndex; 824 targetIndexMap[continueTarget] = switchIndex;
821 assert(builder.jumpTargets[continueTarget] == null); 825 assert(builder.jumpTargets[continueTarget] == null);
822 builder.jumpTargets[continueTarget] = this; 826 builder.jumpTargets[continueTarget] = this;
823 switchIndex++; 827 switchIndex++;
824 } 828 }
825 } 829 }
826 } 830 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart ('k') | pkg/compiler/lib/src/ssa/optimize.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698