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

Side by Side Diff: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart

Issue 1677423002: Revert "Fix super noSuchMethod handling." (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « no previous file | pkg/compiler/lib/src/info/send_info.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 library dart2js.ir_builder_task; 5 library dart2js.ir_builder_task;
6 6
7 import '../closure.dart' as closure; 7 import '../closure.dart' as closure;
8 import '../common.dart'; 8 import '../common.dart';
9 import '../common/names.dart' show 9 import '../common/names.dart' show
10 Identifiers,
11 Names, 10 Names,
12 Selectors; 11 Selectors;
13 import '../common/tasks.dart' show 12 import '../common/tasks.dart' show
14 CompilerTask; 13 CompilerTask;
15 import '../compiler.dart' show 14 import '../compiler.dart' show
16 Compiler; 15 Compiler;
17 import '../constants/expressions.dart'; 16 import '../constants/expressions.dart';
18 import '../dart_types.dart'; 17 import '../dart_types.dart';
19 import '../elements/elements.dart'; 18 import '../elements/elements.dart';
20 import '../elements/modelx.dart' show 19 import '../elements/modelx.dart' show
(...skipping 1867 matching lines...) Expand 10 before | Expand all | Expand 10 after
1888 ast.Send node, 1887 ast.Send node,
1889 MethodElement method, 1888 MethodElement method,
1890 _) { 1889 _) {
1891 return irBuilder.buildSuperMethodGet(method); 1890 return irBuilder.buildSuperMethodGet(method);
1892 } 1891 }
1893 1892
1894 @override 1893 @override
1895 ir.Primitive visitUnresolvedSuperGet( 1894 ir.Primitive visitUnresolvedSuperGet(
1896 ast.Send node, 1895 ast.Send node,
1897 Element element, _) { 1896 Element element, _) {
1898 return buildSuperNoSuchMethod( 1897 return buildInstanceNoSuchMethod(
1899 elements.getSelector(node), elements.getTypeMask(node), []); 1898 elements.getSelector(node), elements.getTypeMask(node), []);
1900 } 1899 }
1901 1900
1902 @override 1901 @override
1903 ir.Primitive visitUnresolvedSuperSet(
1904 ast.Send node,
1905 Element element,
1906 ast.Node rhs, _) {
1907 return buildSuperNoSuchMethod(
1908 elements.getSelector(node), elements.getTypeMask(node), [visit(rhs)]);
1909 }
1910
1911 @override
1912 ir.Primitive visitThisGet(ast.Identifier node, _) { 1902 ir.Primitive visitThisGet(ast.Identifier node, _) {
1913 if (irBuilder.state.thisParameter == null) { 1903 if (irBuilder.state.thisParameter == null) {
1914 // TODO(asgerf,johnniwinther): Should be in a visitInvalidThis method. 1904 // TODO(asgerf,johnniwinther): Should be in a visitInvalidThis method.
1915 // 'this' in static context. Just translate to null. 1905 // 'this' in static context. Just translate to null.
1916 assert(compiler.compilationFailed); 1906 assert(compiler.compilationFailed);
1917 return irBuilder.buildNullConstant(); 1907 return irBuilder.buildNullConstant();
1918 } 1908 }
1919 return irBuilder.buildThis(); 1909 return irBuilder.buildThis();
1920 } 1910 }
1921 1911
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
2431 2421
2432 @override 2422 @override
2433 ir.Primitive visitSuperMethodIncompatibleInvoke( 2423 ir.Primitive visitSuperMethodIncompatibleInvoke(
2434 ast.Send node, 2424 ast.Send node,
2435 MethodElement method, 2425 MethodElement method,
2436 ast.NodeList arguments, 2426 ast.NodeList arguments,
2437 CallStructure callStructure, _) { 2427 CallStructure callStructure, _) {
2438 List<ir.Primitive> normalizedArguments = <ir.Primitive>[]; 2428 List<ir.Primitive> normalizedArguments = <ir.Primitive>[];
2439 CallStructure normalizedCallStructure = 2429 CallStructure normalizedCallStructure =
2440 translateDynamicArguments(arguments, callStructure, normalizedArguments); 2430 translateDynamicArguments(arguments, callStructure, normalizedArguments);
2441 return buildSuperNoSuchMethod( 2431 return buildInstanceNoSuchMethod(
2442 new Selector.call(method.memberName, normalizedCallStructure), 2432 new Selector.call(method.memberName, normalizedCallStructure),
2443 elements.getTypeMask(node), 2433 elements.getTypeMask(node),
2444 normalizedArguments); 2434 normalizedArguments);
2445 } 2435 }
2446 2436
2447 @override 2437 @override
2448 ir.Primitive visitUnresolvedSuperInvoke( 2438 ir.Primitive visitUnresolvedSuperInvoke(
2449 ast.Send node, 2439 ast.Send node,
2450 Element element, 2440 Element element,
2451 ast.NodeList argumentsNode, 2441 ast.NodeList argumentsNode,
2452 Selector selector, _) { 2442 Selector selector, _) {
2453 List<ir.Primitive> arguments = <ir.Primitive>[]; 2443 List<ir.Primitive> arguments = <ir.Primitive>[];
2454 CallStructure callStructure = translateDynamicArguments( 2444 CallStructure callStructure = translateDynamicArguments(
2455 argumentsNode, selector.callStructure, arguments); 2445 argumentsNode, selector.callStructure, arguments);
2456 // TODO(johnniwinther): Supply a member name to the visit function instead 2446 // TODO(johnniwinther): Supply a member name to the visit function instead
2457 // of looking it up in elements. 2447 // of looking it up in elements.
2458 return buildSuperNoSuchMethod( 2448 return buildInstanceNoSuchMethod(
2459 new Selector.call(elements.getSelector(node).memberName, callStructure), 2449 new Selector.call(elements.getSelector(node).memberName, callStructure),
2460 elements.getTypeMask(node), 2450 elements.getTypeMask(node),
2461 arguments); 2451 arguments);
2462 } 2452 }
2463 2453
2464 @override 2454 @override
2465 ir.Primitive visitThisInvoke( 2455 ir.Primitive visitThisInvoke(
2466 ast.Send node, 2456 ast.Send node,
2467 ast.NodeList arguments, 2457 ast.NodeList arguments,
2468 CallStructure callStructure, 2458 CallStructure callStructure,
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
2859 case CompoundSetter.INVALID: 2849 case CompoundSetter.INVALID:
2860 irBuilder.buildStaticNoSuchMethod( 2850 irBuilder.buildStaticNoSuchMethod(
2861 new Selector.setter(new Name(setter.name, setter.library)), 2851 new Selector.setter(new Name(setter.name, setter.library)),
2862 <ir.Primitive>[result]); 2852 <ir.Primitive>[result]);
2863 return; 2853 return;
2864 } 2854 }
2865 }); 2855 });
2866 } 2856 }
2867 2857
2868 ir.Primitive buildSuperNoSuchGetter(Element element, TypeMask mask) { 2858 ir.Primitive buildSuperNoSuchGetter(Element element, TypeMask mask) {
2869 return buildSuperNoSuchMethod( 2859 return buildInstanceNoSuchMethod(
2870 new Selector.getter(new Name(element.name, element.library)), 2860 new Selector.getter(new Name(element.name, element.library)),
2871 mask, 2861 mask,
2872 const <ir.Primitive>[]); 2862 const <ir.Primitive>[]);
2873 } 2863 }
2874 2864
2875 ir.Primitive buildSuperNoSuchSetter(Element element, 2865 ir.Primitive buildSuperNoSuchSetter(Element element,
2876 TypeMask mask, 2866 TypeMask mask,
2877 ir.Primitive value) { 2867 ir.Primitive value) {
2878 return buildSuperNoSuchMethod( 2868 return buildInstanceNoSuchMethod(
2879 new Selector.setter(new Name(element.name, element.library)), 2869 new Selector.setter(new Name(element.name, element.library)),
2880 mask, 2870 mask,
2881 <ir.Primitive>[value]); 2871 <ir.Primitive>[value]);
2882 } 2872 }
2883 2873
2884 @override 2874 @override
2885 ir.Primitive handleSuperCompounds( 2875 ir.Primitive handleSuperCompounds(
2886 ast.SendSet node, 2876 ast.SendSet node,
2887 Element getter, 2877 Element getter,
2888 CompoundGetter getterKind, 2878 CompoundGetter getterKind,
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
3021 Element indexSetFunction, 3011 Element indexSetFunction,
3022 ast.Node index, 3012 ast.Node index,
3023 CompoundRhs rhs, 3013 CompoundRhs rhs,
3024 arg, 3014 arg,
3025 {bool isGetterValid, 3015 {bool isGetterValid,
3026 bool isSetterValid}) { 3016 bool isSetterValid}) {
3027 ir.Primitive indexValue = visit(index); 3017 ir.Primitive indexValue = visit(index);
3028 return translateCompounds(node, () { 3018 return translateCompounds(node, () {
3029 return isGetterValid 3019 return isGetterValid
3030 ? irBuilder.buildSuperIndex(indexFunction, indexValue) 3020 ? irBuilder.buildSuperIndex(indexFunction, indexValue)
3031 : buildSuperNoSuchMethod( 3021 : buildInstanceNoSuchMethod(
3032 new Selector.index(), 3022 new Selector.index(),
3033 elements.getGetterTypeMaskInComplexSendSet(node), 3023 elements.getGetterTypeMaskInComplexSendSet(node),
3034 <ir.Primitive>[indexValue]); 3024 <ir.Primitive>[indexValue]);
3035 }, rhs, (ir.Primitive result) { 3025 }, rhs, (ir.Primitive result) {
3036 if (isSetterValid) { 3026 if (isSetterValid) {
3037 irBuilder.buildSuperIndexSet(indexSetFunction, indexValue, result); 3027 irBuilder.buildSuperIndexSet(indexSetFunction, indexValue, result);
3038 } else { 3028 } else {
3039 buildSuperNoSuchMethod( 3029 buildInstanceNoSuchMethod(
3040 new Selector.indexSet(), 3030 new Selector.indexSet(),
3041 elements.getTypeMask(node), 3031 elements.getTypeMask(node),
3042 <ir.Primitive>[indexValue, result]); 3032 <ir.Primitive>[indexValue, result]);
3043 } 3033 }
3044 }); 3034 });
3045 } 3035 }
3046 3036
3047 /// Build code to handle foreign code, that is, native JavaScript code, or 3037 /// Build code to handle foreign code, that is, native JavaScript code, or
3048 /// builtin values and operations of the backend. 3038 /// builtin values and operations of the backend.
3049 ir.Primitive handleForeignCode(ast.Send node, 3039 ir.Primitive handleForeignCode(ast.Send node,
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
3330 sourceInformation: sourceInformationBuilder.buildGet(node)); 3320 sourceInformation: sourceInformationBuilder.buildGet(node));
3331 } 3321 }
3332 3322
3333 ir.Primitive visitThrow(ast.Throw node) { 3323 ir.Primitive visitThrow(ast.Throw node) {
3334 assert(irBuilder.isOpen); 3324 assert(irBuilder.isOpen);
3335 // This function is not called for throw expressions occurring as 3325 // This function is not called for throw expressions occurring as
3336 // statements. 3326 // statements.
3337 return irBuilder.buildNonTailThrow(visit(node.expression)); 3327 return irBuilder.buildNonTailThrow(visit(node.expression));
3338 } 3328 }
3339 3329
3340 ir.Primitive buildSuperNoSuchMethod(Selector selector, 3330 ir.Primitive buildInstanceNoSuchMethod(Selector selector,
3341 TypeMask mask, 3331 TypeMask mask,
3342 List<ir.Primitive> arguments) { 3332 List<ir.Primitive> arguments) {
3343 ClassElement cls = elements.analyzedElement.enclosingClass; 3333 return irBuilder.buildDynamicInvocation(
3344 MethodElement element = cls.lookupSuperMember(Identifiers.noSuchMethod_); 3334 irBuilder.buildThis(),
3345 if (!Selectors.noSuchMethod_.signatureApplies(element)) { 3335 Selectors.noSuchMethod_,
3346 element = compiler.coreClasses.objectClass.lookupMember( 3336 mask,
3347 Identifiers.noSuchMethod_);
3348 }
3349 return irBuilder.buildSuperMethodInvocation(
3350 element,
3351 Selectors.noSuchMethod_.callStructure,
3352 [irBuilder.buildInvocationMirror(selector, arguments)]); 3337 [irBuilder.buildInvocationMirror(selector, arguments)]);
3353 } 3338 }
3354 3339
3355 @override 3340 @override
3356 ir.Primitive visitUnresolvedCompound( 3341 ir.Primitive visitUnresolvedCompound(
3357 ast.Send node, 3342 ast.Send node,
3358 Element element, 3343 Element element,
3359 op.AssignmentOperator operator, 3344 op.AssignmentOperator operator,
3360 ast.Node rhs, _) { 3345 ast.Node rhs, _) {
3361 // TODO(asgerf): What is unresolved? The getter and/or the setter? 3346 // TODO(asgerf): What is unresolved? The getter and/or the setter?
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
3450 return irBuilder.buildStaticNoSuchMethod(elements.getSelector(node), 3435 return irBuilder.buildStaticNoSuchMethod(elements.getSelector(node),
3451 [visit(rhs)]); 3436 [visit(rhs)]);
3452 } 3437 }
3453 3438
3454 @override 3439 @override
3455 ir.Primitive visitUnresolvedSuperIndex( 3440 ir.Primitive visitUnresolvedSuperIndex(
3456 ast.Send node, 3441 ast.Send node,
3457 Element function, 3442 Element function,
3458 ast.Node index, _) { 3443 ast.Node index, _) {
3459 // Assume the index getter is missing. 3444 // Assume the index getter is missing.
3460 return buildSuperNoSuchMethod( 3445 return buildInstanceNoSuchMethod(
3461 new Selector.index(), elements.getTypeMask(node), [visit(index)]); 3446 new Selector.index(), elements.getTypeMask(node), [visit(index)]);
3462 } 3447 }
3463 3448
3464 @override 3449 @override
3465 ir.Primitive visitUnresolvedSuperBinary( 3450 ir.Primitive visitUnresolvedSuperBinary(
3466 ast.Send node, 3451 ast.Send node,
3467 Element element, 3452 Element element,
3468 op.BinaryOperator operator, 3453 op.BinaryOperator operator,
3469 ast.Node argument, _) { 3454 ast.Node argument, _) {
3470 return buildSuperNoSuchMethod( 3455 return buildInstanceNoSuchMethod(
3471 elements.getSelector(node), 3456 elements.getSelector(node),
3472 elements.getTypeMask(node), 3457 elements.getTypeMask(node),
3473 [visit(argument)]); 3458 [visit(argument)]);
3474 } 3459 }
3475 3460
3476 @override 3461 @override
3477 ir.Primitive visitUnresolvedSuperUnary( 3462 ir.Primitive visitUnresolvedSuperUnary(
3478 ast.Send node, 3463 ast.Send node,
3479 op.UnaryOperator operator, 3464 op.UnaryOperator operator,
3480 Element element, _) { 3465 Element element, _) {
3481 return buildSuperNoSuchMethod( 3466 return buildInstanceNoSuchMethod(
3482 elements.getSelector(node), elements.getTypeMask(node), []); 3467 elements.getSelector(node), elements.getTypeMask(node), []);
3483 } 3468 }
3484 3469
3485 @override 3470 @override
3486 ir.Primitive bulkHandleNode(ast.Node node, String message, _) { 3471 ir.Primitive bulkHandleNode(ast.Node node, String message, _) {
3487 return giveup(node, "Unhandled node: ${message.replaceAll('#', '$node')}"); 3472 return giveup(node, "Unhandled node: ${message.replaceAll('#', '$node')}");
3488 } 3473 }
3489 3474
3490 @override 3475 @override
3491 ir.Primitive bulkHandleError(ast.Node node, ErroneousElement error, _) { 3476 ir.Primitive bulkHandleError(ast.Node node, ErroneousElement error, _) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3558 return irBuilder.buildStaticNoSuchMethod( 3543 return irBuilder.buildStaticNoSuchMethod(
3559 new Selector.setter(field.memberName), 3544 new Selector.setter(field.memberName),
3560 [visit(rhs)]); 3545 [visit(rhs)]);
3561 } 3546 }
3562 3547
3563 @override 3548 @override
3564 ir.Primitive visitFinalSuperFieldSet( 3549 ir.Primitive visitFinalSuperFieldSet(
3565 ast.SendSet node, 3550 ast.SendSet node,
3566 FieldElement field, 3551 FieldElement field,
3567 ast.Node rhs, _) { 3552 ast.Node rhs, _) {
3568 return buildSuperNoSuchMethod( 3553 return buildInstanceNoSuchMethod(
3569 new Selector.setter(field.memberName), 3554 new Selector.setter(field.memberName),
3570 elements.getTypeMask(node), 3555 elements.getTypeMask(node),
3571 [visit(rhs)]); 3556 [visit(rhs)]);
3572 } 3557 }
3573 3558
3574 @override 3559 @override
3575 ir.Primitive handleImmutableLocalSet( 3560 ir.Primitive handleImmutableLocalSet(
3576 ast.SendSet node, 3561 ast.SendSet node,
3577 LocalElement local, 3562 LocalElement local,
3578 ast.Node rhs, _) { 3563 ast.Node rhs, _) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3625 new Selector.call(setter.memberName, callStructure), 3610 new Selector.call(setter.memberName, callStructure),
3626 arguments); 3611 arguments);
3627 } 3612 }
3628 3613
3629 @override 3614 @override
3630 ir.Primitive visitSuperGetterSet( 3615 ir.Primitive visitSuperGetterSet(
3631 ast.SendSet node, 3616 ast.SendSet node,
3632 GetterElement getter, 3617 GetterElement getter,
3633 ast.Node rhs, 3618 ast.Node rhs,
3634 _) { 3619 _) {
3635 return buildSuperNoSuchMethod( 3620 return buildInstanceNoSuchMethod(
3636 new Selector.setter(getter.memberName), 3621 new Selector.setter(getter.memberName),
3637 elements.getTypeMask(node), 3622 elements.getTypeMask(node),
3638 [visit(rhs)]); 3623 [visit(rhs)]);
3639 } 3624 }
3640 3625
3641 @override 3626 @override
3642 ir.Primitive visitSuperMethodSet( 3627 ir.Primitive visitSuperMethodSet(
3643 ast.Send node, 3628 ast.Send node,
3644 MethodElement method, 3629 MethodElement method,
3645 ast.Node rhs, 3630 ast.Node rhs,
3646 _) { 3631 _) {
3647 return buildSuperNoSuchMethod( 3632 return buildInstanceNoSuchMethod(
3648 new Selector.setter(method.memberName), 3633 new Selector.setter(method.memberName),
3649 elements.getTypeMask(node), 3634 elements.getTypeMask(node),
3650 [visit(rhs)]); 3635 [visit(rhs)]);
3651 } 3636 }
3652 3637
3653 @override 3638 @override
3654 ir.Primitive visitSuperSetterGet( 3639 ir.Primitive visitSuperSetterGet(
3655 ast.Send node, 3640 ast.Send node,
3656 SetterElement setter, _) { 3641 SetterElement setter, _) {
3657 return buildSuperNoSuchMethod( 3642 return buildInstanceNoSuchMethod(
3658 new Selector.setter(setter.memberName), 3643 new Selector.setter(setter.memberName),
3659 elements.getTypeMask(node), 3644 elements.getTypeMask(node),
3660 []); 3645 []);
3661 } 3646 }
3662 3647
3663 @override 3648 @override
3664 ir.Primitive visitSuperSetterInvoke( 3649 ir.Primitive visitSuperSetterInvoke(
3665 ast.Send node, 3650 ast.Send node,
3666 SetterElement setter, 3651 SetterElement setter,
3667 ast.NodeList argumentsNode, 3652 ast.NodeList argumentsNode,
3668 CallStructure callStructure, _) { 3653 CallStructure callStructure, _) {
3669 List<ir.Primitive> arguments = <ir.Primitive>[]; 3654 List<ir.Primitive> arguments = <ir.Primitive>[];
3670 callStructure = 3655 callStructure =
3671 translateDynamicArguments(argumentsNode, callStructure, arguments); 3656 translateDynamicArguments(argumentsNode, callStructure, arguments);
3672 return buildSuperNoSuchMethod( 3657 return buildInstanceNoSuchMethod(
3673 new Selector.call(setter.memberName, callStructure), 3658 new Selector.call(setter.memberName, callStructure),
3674 elements.getTypeMask(node), 3659 elements.getTypeMask(node),
3675 arguments); 3660 arguments);
3676 } 3661 }
3677 3662
3678 ir.FunctionDefinition nullIfGiveup(ir.FunctionDefinition action()) { 3663 ir.FunctionDefinition nullIfGiveup(ir.FunctionDefinition action()) {
3679 try { 3664 try {
3680 return action(); 3665 return action();
3681 } catch(e) { 3666 } catch(e) {
3682 if (e == ABORT_IRNODE_BUILDER) { 3667 if (e == ABORT_IRNODE_BUILDER) {
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
3915 } 3900 }
3916 3901
3917 Element get closureConverter { 3902 Element get closureConverter {
3918 return _backend.helpers.closureConverter; 3903 return _backend.helpers.closureConverter;
3919 } 3904 }
3920 3905
3921 void addNativeMethod(FunctionElement function) { 3906 void addNativeMethod(FunctionElement function) {
3922 _backend.emitter.nativeEmitter.nativeMethods.add(function); 3907 _backend.emitter.nativeEmitter.nativeMethods.add(function);
3923 } 3908 }
3924 } 3909 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/info/send_info.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698