| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |