| 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 closurelib; | 7 import '../closure.dart' as closurelib; |
| 8 import '../closure.dart' hide ClosureScope; | 8 import '../closure.dart' hide ClosureScope; |
| 9 import '../constants/expressions.dart'; | 9 import '../constants/expressions.dart'; |
| 10 import '../dart_types.dart'; | 10 import '../dart_types.dart'; |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 | 237 |
| 238 List<ir.Initializer> buildConstructorInitializers( | 238 List<ir.Initializer> buildConstructorInitializers( |
| 239 ast.FunctionExpression function, ConstructorElement element) { | 239 ast.FunctionExpression function, ConstructorElement element) { |
| 240 List<ir.Initializer> result = <ir.Initializer>[]; | 240 List<ir.Initializer> result = <ir.Initializer>[]; |
| 241 FunctionSignature signature = element.functionSignature; | 241 FunctionSignature signature = element.functionSignature; |
| 242 | 242 |
| 243 void tryAddInitializingFormal(ParameterElement parameterElement) { | 243 void tryAddInitializingFormal(ParameterElement parameterElement) { |
| 244 if (parameterElement.isInitializingFormal) { | 244 if (parameterElement.isInitializingFormal) { |
| 245 InitializingFormalElement initializingFormal = parameterElement; | 245 InitializingFormalElement initializingFormal = parameterElement; |
| 246 withBuilder(irBuilder.makeInitializerBuilder(), () { | 246 withBuilder(irBuilder.makeInitializerBuilder(), () { |
| 247 ir.Primitive value = irBuilder.buildLocalGet(parameterElement); | 247 ir.Primitive value = |
| 248 irBuilder.buildLocalVariableGet(parameterElement); |
| 248 result.add(irBuilder.makeFieldInitializer( | 249 result.add(irBuilder.makeFieldInitializer( |
| 249 initializingFormal.fieldElement, | 250 initializingFormal.fieldElement, |
| 250 irBuilder.makeRunnableBody(value))); | 251 irBuilder.makeRunnableBody(value))); |
| 251 }); | 252 }); |
| 252 } | 253 } |
| 253 } | 254 } |
| 254 | 255 |
| 255 // TODO(sigurdm): Preserve initializing formals as initializing formals. | 256 // TODO(sigurdm): Preserve initializing formals as initializing formals. |
| 256 signature.orderedForEachParameter(tryAddInitializingFormal); | 257 signature.orderedForEachParameter(tryAddInitializingFormal); |
| 257 | 258 |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 674 } | 675 } |
| 675 | 676 |
| 676 @override | 677 @override |
| 677 ir.Primitive handleLocalGet( | 678 ir.Primitive handleLocalGet( |
| 678 ast.Send node, | 679 ast.Send node, |
| 679 LocalElement element, | 680 LocalElement element, |
| 680 _) { | 681 _) { |
| 681 if (element.isConst) { | 682 if (element.isConst) { |
| 682 return translateConstant(node); | 683 return translateConstant(node); |
| 683 } | 684 } |
| 684 return irBuilder.buildLocalGet(element); | 685 return irBuilder.buildLocalVariableGet(element); |
| 685 } | 686 } |
| 686 | 687 |
| 687 @override | 688 @override |
| 689 ir.Primitive visitLocalFunctionGet( |
| 690 ast.Send node, |
| 691 LocalFunctionElement function, |
| 692 _) { |
| 693 return irBuilder.buildLocalFunctionGet(function); |
| 694 } |
| 695 |
| 696 @override |
| 688 ir.Primitive handleStaticFieldGet( | 697 ir.Primitive handleStaticFieldGet( |
| 689 ast.Send node, | 698 ast.Send node, |
| 690 FieldElement field, | 699 FieldElement field, |
| 691 _) { | 700 _) { |
| 692 if (field.isConst) { | 701 if (field.isConst) { |
| 693 return translateConstant(node); | 702 return translateConstant(node); |
| 694 } | 703 } |
| 695 return irBuilder.buildStaticGet(field, | 704 return irBuilder.buildStaticFieldGet(field, |
| 696 sourceInformation: sourceInformationBuilder.buildGet(node)); | 705 sourceInformation: sourceInformationBuilder.buildGet(node)); |
| 697 } | 706 } |
| 698 | 707 |
| 699 @override | 708 @override |
| 700 ir.Primitive handleStaticFunctionGet( | 709 ir.Primitive handleStaticFunctionGet( |
| 701 ast.Send node, | 710 ast.Send node, |
| 702 MethodElement function, | 711 MethodElement function, |
| 703 _) { | 712 _) { |
| 704 // TODO(karlklose): support foreign functions. | 713 // TODO(karlklose): support foreign functions. |
| 705 if (function.isForeign(compiler.backend)) { | 714 if (function.isForeign(compiler.backend)) { |
| 706 return giveup(node, 'handleStaticFunctionGet: foreign: $function'); | 715 return giveup(node, 'handleStaticFunctionGet: foreign: $function'); |
| 707 } | 716 } |
| 708 return translateConstant(node); | 717 return translateConstant(node); |
| 709 } | 718 } |
| 710 | 719 |
| 711 @override | 720 @override |
| 712 ir.Primitive handleStaticGetterGet( | 721 ir.Primitive handleStaticGetterGet( |
| 713 ast.Send node, | 722 ast.Send node, |
| 714 FunctionElement getter, | 723 FunctionElement getter, |
| 715 _) { | 724 _) { |
| 716 return irBuilder.buildStaticInvocation(getter, | 725 return irBuilder.buildStaticGetterGet(getter); |
| 717 new Selector.getter(getter.name, getter.library), const []); | |
| 718 } | 726 } |
| 719 | 727 |
| 720 @override | 728 @override |
| 721 ir.Primitive visitSuperFieldGet( | 729 ir.Primitive visitSuperFieldGet( |
| 722 ast.Send node, | 730 ast.Send node, |
| 723 FieldElement field, | 731 FieldElement field, |
| 724 _) { | 732 _) { |
| 725 return irBuilder.buildSuperGet(field); | 733 return irBuilder.buildSuperFieldGet(field); |
| 726 } | 734 } |
| 727 | 735 |
| 728 @override | 736 @override |
| 729 ir.Primitive visitSuperGetterGet( | 737 ir.Primitive visitSuperGetterGet( |
| 730 ast.Send node, | 738 ast.Send node, |
| 731 FunctionElement getter, | 739 FunctionElement getter, |
| 732 _) { | 740 _) { |
| 733 return irBuilder.buildSuperGet(getter); | 741 return irBuilder.buildSuperGetterGet(getter); |
| 734 } | 742 } |
| 735 | 743 |
| 736 @override | 744 @override |
| 737 ir.Primitive visitSuperMethodGet( | 745 ir.Primitive visitSuperMethodGet( |
| 738 ast.Send node, | 746 ast.Send node, |
| 739 MethodElement method, | 747 MethodElement method, |
| 740 _) { | 748 _) { |
| 741 return irBuilder.buildSuperGet(method); | 749 return irBuilder.buildSuperMethodGet(method); |
| 742 } | 750 } |
| 743 | 751 |
| 744 @override | 752 @override |
| 745 ir.Primitive visitThisGet(ast.Identifier node, _) { | 753 ir.Primitive visitThisGet(ast.Identifier node, _) { |
| 746 return irBuilder.buildThis(); | 754 return irBuilder.buildThis(); |
| 747 } | 755 } |
| 748 | 756 |
| 749 ir.Primitive translateTypeVariableTypeLiteral(TypeVariableElement element) { | 757 ir.Primitive translateTypeVariableTypeLiteral(TypeVariableElement element) { |
| 750 return buildReifyTypeVariable(irBuilder.buildThis(), element.type); | 758 return buildReifyTypeVariable(irBuilder.buildThis(), element.type); |
| 751 } | 759 } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 842 arguments = normalizeDynamicArguments(selector, arguments); | 850 arguments = normalizeDynamicArguments(selector, arguments); |
| 843 return irBuilder.buildDynamicInvocation(target, selector, arguments); | 851 return irBuilder.buildDynamicInvocation(target, selector, arguments); |
| 844 } | 852 } |
| 845 | 853 |
| 846 ir.Primitive translateSuperBinary(FunctionElement function, | 854 ir.Primitive translateSuperBinary(FunctionElement function, |
| 847 op.BinaryOperator operator, | 855 op.BinaryOperator operator, |
| 848 ast.Node argument) { | 856 ast.Node argument) { |
| 849 Selector selector = new Selector.binaryOperator(operator.selectorName); | 857 Selector selector = new Selector.binaryOperator(operator.selectorName); |
| 850 List<ir.Primitive> arguments = <ir.Primitive>[visit(argument)]; | 858 List<ir.Primitive> arguments = <ir.Primitive>[visit(argument)]; |
| 851 arguments = normalizeDynamicArguments(selector, arguments); | 859 arguments = normalizeDynamicArguments(selector, arguments); |
| 852 return irBuilder.buildSuperInvocation(function, selector, arguments); | 860 return irBuilder.buildSuperMethodInvocation(function, selector, arguments); |
| 853 } | 861 } |
| 854 | 862 |
| 855 @override | 863 @override |
| 856 ir.Primitive visitSuperBinary( | 864 ir.Primitive visitSuperBinary( |
| 857 ast.Send node, | 865 ast.Send node, |
| 858 FunctionElement function, | 866 FunctionElement function, |
| 859 op.BinaryOperator operator, | 867 op.BinaryOperator operator, |
| 860 ast.Node argument, | 868 ast.Node argument, |
| 861 _) { | 869 _) { |
| 862 return translateSuperBinary(function, operator, argument); | 870 return translateSuperBinary(function, operator, argument); |
| 863 } | 871 } |
| 864 | 872 |
| 865 @override | 873 @override |
| 866 ir.Primitive visitSuperIndex( | 874 ir.Primitive visitSuperIndex( |
| 867 ast.Send node, | 875 ast.Send node, |
| 868 FunctionElement function, | 876 FunctionElement function, |
| 869 ast.Node index, | 877 ast.Node index, |
| 870 _) { | 878 _) { |
| 871 Selector selector = new Selector.index(); | 879 Selector selector = new Selector.index(); |
| 872 List<ir.Primitive> arguments = <ir.Primitive>[visit(index)]; | 880 List<ir.Primitive> arguments = <ir.Primitive>[visit(index)]; |
| 873 arguments = normalizeDynamicArguments(selector, arguments); | 881 arguments = normalizeDynamicArguments(selector, arguments); |
| 874 return irBuilder.buildSuperInvocation(function, selector, arguments); | 882 return irBuilder.buildSuperMethodInvocation(function, selector, arguments); |
| 875 } | 883 } |
| 876 | 884 |
| 877 @override | 885 @override |
| 878 ir.Primitive visitEquals( | 886 ir.Primitive visitEquals( |
| 879 ast.Send node, | 887 ast.Send node, |
| 880 ast.Node left, | 888 ast.Node left, |
| 881 ast.Node right, | 889 ast.Node right, |
| 882 _) { | 890 _) { |
| 883 return translateBinary(left, op.BinaryOperator.EQ, right); | 891 return translateBinary(left, op.BinaryOperator.EQ, right); |
| 884 } | 892 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 936 ir.Primitive visitSuperUnary( | 944 ir.Primitive visitSuperUnary( |
| 937 ast.Send node, | 945 ast.Send node, |
| 938 op.UnaryOperator operator, | 946 op.UnaryOperator operator, |
| 939 FunctionElement function, | 947 FunctionElement function, |
| 940 _) { | 948 _) { |
| 941 // TODO(johnniwinther): Clean up the creation of selectors. | 949 // TODO(johnniwinther): Clean up the creation of selectors. |
| 942 Selector selector = new Selector( | 950 Selector selector = new Selector( |
| 943 SelectorKind.OPERATOR, | 951 SelectorKind.OPERATOR, |
| 944 new PublicName(operator.selectorName), | 952 new PublicName(operator.selectorName), |
| 945 CallStructure.NO_ARGS); | 953 CallStructure.NO_ARGS); |
| 946 return irBuilder.buildSuperInvocation(function, selector, const []); | 954 return irBuilder.buildSuperMethodInvocation(function, selector, const []); |
| 947 } | 955 } |
| 948 | 956 |
| 949 // TODO(johnniwinther): Handle this in the [IrBuilder] to ensure the correct | 957 // TODO(johnniwinther): Handle this in the [IrBuilder] to ensure the correct |
| 950 // semantic correlation between arguments and invocation. | 958 // semantic correlation between arguments and invocation. |
| 951 List<ir.Primitive> translateDynamicArguments(ast.NodeList nodeList, | 959 List<ir.Primitive> translateDynamicArguments(ast.NodeList nodeList, |
| 952 Selector selector) { | 960 Selector selector) { |
| 953 List<ir.Primitive> arguments = nodeList.nodes.mapToList(visit); | 961 List<ir.Primitive> arguments = nodeList.nodes.mapToList(visit); |
| 954 return normalizeDynamicArguments(selector, arguments); | 962 return normalizeDynamicArguments(selector, arguments); |
| 955 } | 963 } |
| 956 | 964 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1001 translateReceiver(receiver), selector, | 1009 translateReceiver(receiver), selector, |
| 1002 translateDynamicArguments(arguments, selector)); | 1010 translateDynamicArguments(arguments, selector)); |
| 1003 } | 1011 } |
| 1004 | 1012 |
| 1005 ir.Primitive handleLocalInvoke( | 1013 ir.Primitive handleLocalInvoke( |
| 1006 ast.Send node, | 1014 ast.Send node, |
| 1007 LocalElement element, | 1015 LocalElement element, |
| 1008 ast.NodeList arguments, | 1016 ast.NodeList arguments, |
| 1009 Selector selector, | 1017 Selector selector, |
| 1010 _) { | 1018 _) { |
| 1011 return irBuilder.buildLocalInvocation(element, selector, | 1019 return irBuilder.buildLocalVariableInvocation(element, selector, |
| 1012 translateDynamicArguments(arguments, selector)); | 1020 translateDynamicArguments(arguments, selector)); |
| 1013 } | 1021 } |
| 1014 | 1022 |
| 1023 @override |
| 1024 ir.Primitive visitLocalFunctionInvoke( |
| 1025 ast.Send node, |
| 1026 LocalFunctionElement function, |
| 1027 ast.NodeList arguments, |
| 1028 Selector selector, |
| 1029 _) { |
| 1030 return irBuilder.buildLocalFunctionInvocation(function, selector, |
| 1031 translateDynamicArguments(arguments, selector)); |
| 1032 } |
| 1033 |
| 1015 @override | 1034 @override |
| 1016 ir.Primitive handleStaticFieldInvoke( | 1035 ir.Primitive handleStaticFieldInvoke( |
| 1017 ast.Send node, | 1036 ast.Send node, |
| 1018 FieldElement field, | 1037 FieldElement field, |
| 1019 ast.NodeList arguments, | 1038 ast.NodeList arguments, |
| 1020 Selector selector, | 1039 Selector selector, |
| 1021 _) { | 1040 _) { |
| 1022 return translateCallInvoke( | 1041 return irBuilder.buildStaticFieldInvocation(field, selector, |
| 1023 irBuilder.buildStaticGet(field), | 1042 translateDynamicArguments(arguments, selector)); |
| 1024 arguments, selector); | |
| 1025 } | 1043 } |
| 1026 | 1044 |
| 1027 @override | 1045 @override |
| 1028 ir.Primitive handleStaticFunctionInvoke( | 1046 ir.Primitive handleStaticFunctionInvoke( |
| 1029 ast.Send node, | 1047 ast.Send node, |
| 1030 MethodElement function, | 1048 MethodElement function, |
| 1031 ast.NodeList arguments, | 1049 ast.NodeList arguments, |
| 1032 Selector selector, | 1050 Selector selector, |
| 1033 _) { | 1051 _) { |
| 1034 // TODO(karlklose): support foreign functions. | 1052 // TODO(karlklose): support foreign functions. |
| 1035 if (function.isForeign(compiler.backend)) { | 1053 if (function.isForeign(compiler.backend)) { |
| 1036 return giveup(node, 'handleStaticFunctionInvoke: foreign: $function'); | 1054 return giveup(node, 'handleStaticFunctionInvoke: foreign: $function'); |
| 1037 } | 1055 } |
| 1038 return irBuilder.buildStaticInvocation(function, selector, | 1056 return irBuilder.buildStaticFunctionInvocation(function, selector, |
| 1039 translateStaticArguments(arguments, function, selector.callStructure), | 1057 translateStaticArguments(arguments, function, selector.callStructure), |
| 1040 sourceInformation: sourceInformationBuilder.buildCall(node)); | 1058 sourceInformation: sourceInformationBuilder.buildCall(node)); |
| 1041 } | 1059 } |
| 1042 | 1060 |
| 1043 @override | 1061 @override |
| 1044 ir.Primitive handleStaticGetterInvoke( | 1062 ir.Primitive handleStaticGetterInvoke( |
| 1045 ast.Send node, | 1063 ast.Send node, |
| 1046 FunctionElement getter, | 1064 FunctionElement getter, |
| 1047 ast.NodeList arguments, | 1065 ast.NodeList arguments, |
| 1048 Selector selector, | 1066 Selector selector, |
| 1049 _) { | 1067 _) { |
| 1050 return translateCallInvoke( | 1068 return irBuilder.buildStaticGetterInvocation(getter, selector, |
| 1051 irBuilder.buildStaticGet(getter), | 1069 translateDynamicArguments(arguments, selector)); |
| 1052 arguments, selector); | |
| 1053 } | 1070 } |
| 1054 | 1071 |
| 1055 @override | 1072 @override |
| 1056 ir.Primitive visitSuperFieldInvoke( | 1073 ir.Primitive visitSuperFieldInvoke( |
| 1057 ast.Send node, | 1074 ast.Send node, |
| 1058 FieldElement field, | 1075 FieldElement field, |
| 1059 ast.NodeList arguments, | 1076 ast.NodeList arguments, |
| 1060 Selector selector, | 1077 Selector selector, |
| 1061 _) { | 1078 _) { |
| 1062 return translateCallInvoke( | 1079 return irBuilder.buildSuperFieldInvocation(field, selector, |
| 1063 irBuilder.buildSuperGet(field), | 1080 translateDynamicArguments(arguments, selector)); |
| 1064 arguments, selector); | |
| 1065 } | 1081 } |
| 1066 | 1082 |
| 1067 @override | 1083 @override |
| 1068 ir.Primitive visitSuperGetterInvoke( | 1084 ir.Primitive visitSuperGetterInvoke( |
| 1069 ast.Send node, | 1085 ast.Send node, |
| 1070 FunctionElement getter, | 1086 FunctionElement getter, |
| 1071 ast.NodeList arguments, | 1087 ast.NodeList arguments, |
| 1072 Selector selector, | 1088 Selector selector, |
| 1073 _) { | 1089 _) { |
| 1074 return translateCallInvoke( | 1090 return irBuilder.buildSuperGetterInvocation(getter, selector, |
| 1075 irBuilder.buildSuperGet(getter), | 1091 translateDynamicArguments(arguments, selector)); |
| 1076 arguments, selector); | |
| 1077 } | 1092 } |
| 1078 | 1093 |
| 1079 @override | 1094 @override |
| 1080 ir.Primitive visitSuperMethodInvoke( | 1095 ir.Primitive visitSuperMethodInvoke( |
| 1081 ast.Send node, | 1096 ast.Send node, |
| 1082 MethodElement method, | 1097 MethodElement method, |
| 1083 ast.NodeList arguments, | 1098 ast.NodeList arguments, |
| 1084 Selector selector, | 1099 Selector selector, |
| 1085 _) { | 1100 _) { |
| 1086 return irBuilder.buildSuperInvocation(method, selector, | 1101 return irBuilder.buildSuperMethodInvocation(method, selector, |
| 1087 translateDynamicArguments(arguments, selector)); | 1102 translateDynamicArguments(arguments, selector)); |
| 1088 } | 1103 } |
| 1089 | 1104 |
| 1090 @override | 1105 @override |
| 1091 ir.Primitive visitThisInvoke( | 1106 ir.Primitive visitThisInvoke( |
| 1092 ast.Send node, | 1107 ast.Send node, |
| 1093 ast.NodeList arguments, | 1108 ast.NodeList arguments, |
| 1094 Selector selector, | 1109 Selector selector, |
| 1095 _) { | 1110 _) { |
| 1096 return translateCallInvoke(irBuilder.buildThis(), arguments, selector); | 1111 return translateCallInvoke(irBuilder.buildThis(), arguments, selector); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1175 ast.Node index, | 1190 ast.Node index, |
| 1176 op.AssignmentOperator operator, | 1191 op.AssignmentOperator operator, |
| 1177 ast.Node rhs, | 1192 ast.Node rhs, |
| 1178 _) { | 1193 _) { |
| 1179 ir.Primitive indexValue = visit(index); | 1194 ir.Primitive indexValue = visit(index); |
| 1180 return translateCompound( | 1195 return translateCompound( |
| 1181 getValue: () { | 1196 getValue: () { |
| 1182 Selector selector = new Selector.index(); | 1197 Selector selector = new Selector.index(); |
| 1183 List<ir.Primitive> arguments = <ir.Primitive>[indexValue]; | 1198 List<ir.Primitive> arguments = <ir.Primitive>[indexValue]; |
| 1184 arguments = normalizeDynamicArguments(selector, arguments); | 1199 arguments = normalizeDynamicArguments(selector, arguments); |
| 1185 return irBuilder.buildSuperInvocation(getter, selector, arguments); | 1200 return irBuilder.buildSuperMethodInvocation( |
| 1201 getter, selector, arguments); |
| 1186 }, | 1202 }, |
| 1187 operator: operator, | 1203 operator: operator, |
| 1188 rhs: rhs, | 1204 rhs: rhs, |
| 1189 setValue: (ir.Primitive result) { | 1205 setValue: (ir.Primitive result) { |
| 1190 irBuilder.buildSuperIndexSet(setter, indexValue, result); | 1206 irBuilder.buildSuperIndexSet(setter, indexValue, result); |
| 1191 }); | 1207 }); |
| 1192 } | 1208 } |
| 1193 | 1209 |
| 1194 ir.Primitive translatePrefixPostfix( | 1210 ir.Primitive translatePrefixPostfix( |
| 1195 {ir.Primitive getValue(), | 1211 {ir.Primitive getValue(), |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1276 } | 1292 } |
| 1277 | 1293 |
| 1278 @override | 1294 @override |
| 1279 ir.Primitive handleLocalCompound( | 1295 ir.Primitive handleLocalCompound( |
| 1280 ast.Send node, | 1296 ast.Send node, |
| 1281 LocalElement element, | 1297 LocalElement element, |
| 1282 op.AssignmentOperator operator, | 1298 op.AssignmentOperator operator, |
| 1283 ast.Node rhs, | 1299 ast.Node rhs, |
| 1284 _) { | 1300 _) { |
| 1285 return translateCompound( | 1301 return translateCompound( |
| 1286 getValue: () => irBuilder.buildLocalGet(element), | 1302 getValue: () => irBuilder.buildLocalVariableGet(element), |
| 1287 operator: operator, | 1303 operator: operator, |
| 1288 rhs: rhs, | 1304 rhs: rhs, |
| 1289 setValue: (ir.Primitive result) { | 1305 setValue: (ir.Primitive result) { |
| 1290 irBuilder.buildLocalSet(element, result); | 1306 irBuilder.buildLocalVariableSet(element, result); |
| 1291 }); | 1307 }); |
| 1292 } | 1308 } |
| 1293 | 1309 |
| 1294 @override | 1310 @override |
| 1295 ir.Primitive handleLocalPostfixPrefix( | 1311 ir.Primitive handleLocalPostfixPrefix( |
| 1296 ast.Send node, | 1312 ast.Send node, |
| 1297 LocalElement element, | 1313 LocalElement element, |
| 1298 op.IncDecOperator operator, | 1314 op.IncDecOperator operator, |
| 1299 arg, | 1315 arg, |
| 1300 {bool isPrefix}) { | 1316 {bool isPrefix}) { |
| 1301 return translatePrefixPostfix( | 1317 return translatePrefixPostfix( |
| 1302 getValue: () => irBuilder.buildLocalGet(element), | 1318 getValue: () => irBuilder.buildLocalVariableGet(element), |
| 1303 operator: operator, | 1319 operator: operator, |
| 1304 setValue: (ir.Primitive result) { | 1320 setValue: (ir.Primitive result) { |
| 1305 irBuilder.buildLocalSet(element, result); | 1321 irBuilder.buildLocalVariableSet(element, result); |
| 1306 }, | 1322 }, |
| 1307 isPrefix: isPrefix); | 1323 isPrefix: isPrefix); |
| 1308 } | 1324 } |
| 1309 | 1325 |
| 1310 @override | 1326 @override |
| 1311 ir.Primitive handleLocalSet( | 1327 ir.Primitive handleLocalSet( |
| 1312 ast.SendSet node, | 1328 ast.SendSet node, |
| 1313 LocalElement element, | 1329 LocalElement element, |
| 1314 ast.Node rhs, | 1330 ast.Node rhs, |
| 1315 _) { | 1331 _) { |
| 1316 return irBuilder.buildLocalSet(element, visit(rhs)); | 1332 return irBuilder.buildLocalVariableSet(element, visit(rhs)); |
| 1317 } | 1333 } |
| 1318 | 1334 |
| 1319 @override | 1335 @override |
| 1320 ir.Primitive handleStaticFieldCompound( | 1336 ir.Primitive handleStaticFieldCompound( |
| 1321 ast.Send node, | 1337 ast.Send node, |
| 1322 FieldElement field, | 1338 FieldElement field, |
| 1323 op.AssignmentOperator operator, | 1339 op.AssignmentOperator operator, |
| 1324 ast.Node rhs, | 1340 ast.Node rhs, |
| 1325 _) { | 1341 _) { |
| 1326 return translateCompound( | 1342 return translateCompound( |
| 1327 getValue: () => irBuilder.buildStaticGet(field), | 1343 getValue: () => irBuilder.buildStaticFieldGet(field), |
| 1328 operator: operator, | 1344 operator: operator, |
| 1329 rhs: rhs, | 1345 rhs: rhs, |
| 1330 setValue: (ir.Primitive result) { | 1346 setValue: (ir.Primitive result) { |
| 1331 irBuilder.buildStaticSet(field, result); | 1347 irBuilder.buildStaticFieldSet(field, result); |
| 1332 }); | 1348 }); |
| 1333 } | 1349 } |
| 1334 | 1350 |
| 1335 @override | 1351 @override |
| 1336 ir.Primitive handleStaticFieldPostfixPrefix( | 1352 ir.Primitive handleStaticFieldPostfixPrefix( |
| 1337 ast.Send node, | 1353 ast.Send node, |
| 1338 FieldElement field, | 1354 FieldElement field, |
| 1339 op.IncDecOperator operator, | 1355 op.IncDecOperator operator, |
| 1340 arg, | 1356 arg, |
| 1341 {bool isPrefix}) { | 1357 {bool isPrefix}) { |
| 1342 return translatePrefixPostfix( | 1358 return translatePrefixPostfix( |
| 1343 getValue: () => irBuilder.buildStaticGet(field), | 1359 getValue: () => irBuilder.buildStaticFieldGet(field), |
| 1344 operator: operator, | 1360 operator: operator, |
| 1345 setValue: (ir.Primitive result) { | 1361 setValue: (ir.Primitive result) { |
| 1346 irBuilder.buildStaticSet(field, result); | 1362 irBuilder.buildStaticFieldSet(field, result); |
| 1347 }, | 1363 }, |
| 1348 isPrefix: isPrefix); | 1364 isPrefix: isPrefix); |
| 1349 } | 1365 } |
| 1350 | 1366 |
| 1351 @override | 1367 @override |
| 1352 ir.Primitive handleStaticFieldSet( | 1368 ir.Primitive handleStaticFieldSet( |
| 1353 ast.SendSet node, | 1369 ast.SendSet node, |
| 1354 FieldElement field, | 1370 FieldElement field, |
| 1355 ast.Node rhs, | 1371 ast.Node rhs, |
| 1356 _) { | 1372 _) { |
| 1357 return irBuilder.buildStaticSet(field, visit(rhs)); | 1373 return irBuilder.buildStaticFieldSet(field, visit(rhs)); |
| 1358 } | 1374 } |
| 1359 | 1375 |
| 1360 @override | 1376 @override |
| 1361 ir.Primitive visitSuperFieldSet( | 1377 ir.Primitive visitSuperFieldSet( |
| 1362 ast.SendSet node, | 1378 ast.SendSet node, |
| 1363 FieldElement field, | 1379 FieldElement field, |
| 1364 ast.Node rhs, | 1380 ast.Node rhs, |
| 1365 _) { | 1381 _) { |
| 1366 return irBuilder.buildSuperSet(field, visit(rhs)); | 1382 return irBuilder.buildSuperFieldSet(field, visit(rhs)); |
| 1367 } | 1383 } |
| 1368 | 1384 |
| 1369 @override | 1385 @override |
| 1370 ir.Primitive visitSuperSetterSet( | 1386 ir.Primitive visitSuperSetterSet( |
| 1371 ast.SendSet node, | 1387 ast.SendSet node, |
| 1372 FunctionElement setter, | 1388 FunctionElement setter, |
| 1373 ast.Node rhs, | 1389 ast.Node rhs, |
| 1374 _) { | 1390 _) { |
| 1375 return irBuilder.buildSuperSet(setter, visit(rhs)); | 1391 return irBuilder.buildSuperSetterSet(setter, visit(rhs)); |
| 1376 } | 1392 } |
| 1377 | 1393 |
| 1378 @override | 1394 @override |
| 1379 ir.Primitive handleStaticGetterSetterCompound( | 1395 ir.Primitive handleStaticGetterSetterCompound( |
| 1380 ast.Send node, | 1396 ast.Send node, |
| 1381 FunctionElement getter, | 1397 FunctionElement getter, |
| 1382 FunctionElement setter, | 1398 FunctionElement setter, |
| 1383 op.AssignmentOperator operator, | 1399 op.AssignmentOperator operator, |
| 1384 ast.Node rhs, | 1400 ast.Node rhs, |
| 1385 _) { | 1401 _) { |
| 1386 return translateCompound( | 1402 return translateCompound( |
| 1387 getValue: () => irBuilder.buildStaticGet(getter), | 1403 getValue: () => irBuilder.buildStaticGetterGet(getter), |
| 1388 operator: operator, | 1404 operator: operator, |
| 1389 rhs: rhs, | 1405 rhs: rhs, |
| 1390 setValue: (ir.Primitive result) { | 1406 setValue: (ir.Primitive result) { |
| 1391 irBuilder.buildStaticSet(setter, result); | 1407 irBuilder.buildStaticSetterSet(setter, result); |
| 1392 }); | 1408 }); |
| 1393 } | 1409 } |
| 1394 | 1410 |
| 1395 @override | 1411 @override |
| 1396 ir.Primitive handleSuperFieldFieldPostfixPrefix( | 1412 ir.Primitive handleSuperFieldFieldPostfixPrefix( |
| 1397 ast.Send node, | 1413 ast.Send node, |
| 1398 FieldElement readField, | 1414 FieldElement readField, |
| 1399 FieldElement writtenField, | 1415 FieldElement writtenField, |
| 1400 op.IncDecOperator operator, | 1416 op.IncDecOperator operator, |
| 1401 arg, | 1417 arg, |
| 1402 {bool isPrefix}) { | 1418 {bool isPrefix}) { |
| 1403 return translatePrefixPostfix( | 1419 return translatePrefixPostfix( |
| 1404 getValue: () => irBuilder.buildSuperGet(readField), | 1420 getValue: () => irBuilder.buildSuperFieldGet(readField), |
| 1405 operator: operator, | 1421 operator: operator, |
| 1406 setValue: (ir.Primitive result) { | 1422 setValue: (ir.Primitive result) { |
| 1407 irBuilder.buildSuperSet(writtenField, result); | 1423 irBuilder.buildSuperFieldSet(writtenField, result); |
| 1408 }, | 1424 }, |
| 1409 isPrefix: isPrefix); | 1425 isPrefix: isPrefix); |
| 1410 } | 1426 } |
| 1411 | 1427 |
| 1412 @override | 1428 @override |
| 1413 ir.Primitive handleSuperFieldSetterPostfixPrefix( | 1429 ir.Primitive handleSuperFieldSetterPostfixPrefix( |
| 1414 ast.Send node, | 1430 ast.Send node, |
| 1415 FieldElement field, | 1431 FieldElement field, |
| 1416 FunctionElement setter, | 1432 FunctionElement setter, |
| 1417 op.IncDecOperator operator, | 1433 op.IncDecOperator operator, |
| 1418 arg, | 1434 arg, |
| 1419 {bool isPrefix}) { | 1435 {bool isPrefix}) { |
| 1420 return translatePrefixPostfix( | 1436 return translatePrefixPostfix( |
| 1421 getValue: () => irBuilder.buildSuperGet(field), | 1437 getValue: () => irBuilder.buildSuperFieldGet(field), |
| 1422 operator: operator, | 1438 operator: operator, |
| 1423 setValue: (ir.Primitive result) { | 1439 setValue: (ir.Primitive result) { |
| 1424 irBuilder.buildSuperSet(setter, result); | 1440 irBuilder.buildSuperSetterSet(setter, result); |
| 1425 }, | 1441 }, |
| 1426 isPrefix: isPrefix); | 1442 isPrefix: isPrefix); |
| 1427 } | 1443 } |
| 1428 | 1444 |
| 1429 @override | 1445 @override |
| 1430 ir.Primitive handleSuperGetterFieldPostfixPrefix( | 1446 ir.Primitive handleSuperGetterFieldPostfixPrefix( |
| 1431 ast.Send node, | 1447 ast.Send node, |
| 1432 FunctionElement getter, | 1448 FunctionElement getter, |
| 1433 FieldElement field, | 1449 FieldElement field, |
| 1434 op.IncDecOperator operator, | 1450 op.IncDecOperator operator, |
| 1435 arg, | 1451 arg, |
| 1436 {bool isPrefix}) { | 1452 {bool isPrefix}) { |
| 1437 return translatePrefixPostfix( | 1453 return translatePrefixPostfix( |
| 1438 getValue: () => irBuilder.buildSuperGet(getter), | 1454 getValue: () => irBuilder.buildSuperGetterGet(getter), |
| 1439 operator: operator, | 1455 operator: operator, |
| 1440 setValue: (ir.Primitive result) { | 1456 setValue: (ir.Primitive result) { |
| 1441 irBuilder.buildSuperSet(field, result); | 1457 irBuilder.buildSuperFieldSet(field, result); |
| 1442 }, | 1458 }, |
| 1443 isPrefix: isPrefix); | 1459 isPrefix: isPrefix); |
| 1444 } | 1460 } |
| 1445 | 1461 |
| 1446 @override | 1462 @override |
| 1447 ir.Primitive handleSuperGetterSetterPostfixPrefix( | 1463 ir.Primitive handleSuperGetterSetterPostfixPrefix( |
| 1448 ast.Send node, | 1464 ast.Send node, |
| 1449 FunctionElement getter, | 1465 FunctionElement getter, |
| 1450 FunctionElement setter, | 1466 FunctionElement setter, |
| 1451 op.IncDecOperator operator, | 1467 op.IncDecOperator operator, |
| 1452 arg, | 1468 arg, |
| 1453 {bool isPrefix}) { | 1469 {bool isPrefix}) { |
| 1454 return translatePrefixPostfix( | 1470 return translatePrefixPostfix( |
| 1455 getValue: () => irBuilder.buildSuperGet(getter), | 1471 getValue: () => irBuilder.buildSuperGetterGet(getter), |
| 1456 operator: operator, | 1472 operator: operator, |
| 1457 setValue: (ir.Primitive result) { | 1473 setValue: (ir.Primitive result) { |
| 1458 irBuilder.buildSuperSet(setter, result); | 1474 irBuilder.buildSuperSetterSet(setter, result); |
| 1459 }, | 1475 }, |
| 1460 isPrefix: isPrefix); | 1476 isPrefix: isPrefix); |
| 1461 } | 1477 } |
| 1462 | 1478 |
| 1463 @override | 1479 @override |
| 1464 ir.Primitive handleSuperMethodSetterPostfixPrefix( | 1480 ir.Primitive handleSuperMethodSetterPostfixPrefix( |
| 1465 ast.Send node, | 1481 ast.Send node, |
| 1466 FunctionElement method, | 1482 FunctionElement method, |
| 1467 FunctionElement setter, | 1483 FunctionElement setter, |
| 1468 op.IncDecOperator operator, | 1484 op.IncDecOperator operator, |
| 1469 arg, | 1485 arg, |
| 1470 {bool isPrefix}) { | 1486 {bool isPrefix}) { |
| 1471 return translatePrefixPostfix( | 1487 return translatePrefixPostfix( |
| 1472 getValue: () => irBuilder.buildSuperGet(method), | 1488 getValue: () => irBuilder.buildSuperMethodGet(method), |
| 1473 operator: operator, | 1489 operator: operator, |
| 1474 setValue: (ir.Primitive result) { | 1490 setValue: (ir.Primitive result) { |
| 1475 irBuilder.buildSuperSet(setter, result); | 1491 irBuilder.buildSuperSetterSet(setter, result); |
| 1476 }, | 1492 }, |
| 1477 isPrefix: isPrefix); | 1493 isPrefix: isPrefix); |
| 1478 } | 1494 } |
| 1479 | 1495 |
| 1480 @override | 1496 @override |
| 1481 ir.Primitive handleStaticGetterSetterPostfixPrefix( | 1497 ir.Primitive handleStaticGetterSetterPostfixPrefix( |
| 1482 ast.Send node, | 1498 ast.Send node, |
| 1483 FunctionElement getter, | 1499 FunctionElement getter, |
| 1484 FunctionElement setter, | 1500 FunctionElement setter, |
| 1485 op.IncDecOperator operator, | 1501 op.IncDecOperator operator, |
| 1486 arg, | 1502 arg, |
| 1487 {bool isPrefix}) { | 1503 {bool isPrefix}) { |
| 1488 return translatePrefixPostfix( | 1504 return translatePrefixPostfix( |
| 1489 getValue: () => irBuilder.buildStaticGet(getter), | 1505 getValue: () => irBuilder.buildStaticGetterGet(getter), |
| 1490 operator: operator, | 1506 operator: operator, |
| 1491 setValue: (ir.Primitive result) { | 1507 setValue: (ir.Primitive result) { |
| 1492 irBuilder.buildStaticSet(setter, result); | 1508 irBuilder.buildStaticSetterSet(setter, result); |
| 1493 }, | 1509 }, |
| 1494 isPrefix: isPrefix); | 1510 isPrefix: isPrefix); |
| 1495 } | 1511 } |
| 1496 | 1512 |
| 1497 @override | 1513 @override |
| 1498 ir.Primitive handleStaticMethodSetterCompound( | 1514 ir.Primitive handleStaticMethodSetterCompound( |
| 1499 ast.Send node, | 1515 ast.Send node, |
| 1500 FunctionElement method, | 1516 FunctionElement method, |
| 1501 FunctionElement setter, | 1517 FunctionElement setter, |
| 1502 op.AssignmentOperator operator, | 1518 op.AssignmentOperator operator, |
| 1503 ast.Node rhs, | 1519 ast.Node rhs, |
| 1504 _) { | 1520 _) { |
| 1505 return translateCompound( | 1521 return translateCompound( |
| 1506 getValue: () => irBuilder.buildStaticGet(method), | 1522 getValue: () => irBuilder.buildStaticFunctionGet(method), |
| 1507 operator: operator, | 1523 operator: operator, |
| 1508 rhs: rhs, | 1524 rhs: rhs, |
| 1509 setValue: (ir.Primitive result) { | 1525 setValue: (ir.Primitive result) { |
| 1510 irBuilder.buildStaticSet(setter, result); | 1526 irBuilder.buildStaticSetterSet(setter, result); |
| 1511 }); | 1527 }); |
| 1512 } | 1528 } |
| 1513 | 1529 |
| 1514 @override | 1530 @override |
| 1515 ir.Primitive handleStaticMethodSetterPostfixPrefix( | 1531 ir.Primitive handleStaticMethodSetterPostfixPrefix( |
| 1516 ast.Send node, | 1532 ast.Send node, |
| 1517 FunctionElement getter, | 1533 FunctionElement getter, |
| 1518 FunctionElement setter, | 1534 FunctionElement setter, |
| 1519 op.IncDecOperator operator, | 1535 op.IncDecOperator operator, |
| 1520 arg, | 1536 arg, |
| 1521 {bool isPrefix}) { | 1537 {bool isPrefix}) { |
| 1522 return translatePrefixPostfix( | 1538 return translatePrefixPostfix( |
| 1523 getValue: () => irBuilder.buildStaticGet(getter), | 1539 getValue: () => irBuilder.buildStaticFunctionGet(getter), |
| 1524 operator: operator, | 1540 operator: operator, |
| 1525 setValue: (ir.Primitive result) { | 1541 setValue: (ir.Primitive result) { |
| 1526 irBuilder.buildStaticSet(setter, result); | 1542 irBuilder.buildStaticSetterSet(setter, result); |
| 1527 }, | 1543 }, |
| 1528 isPrefix: isPrefix); | 1544 isPrefix: isPrefix); |
| 1529 } | 1545 } |
| 1530 | 1546 |
| 1531 @override | 1547 @override |
| 1532 ir.Primitive handleDynamicIndexPostfixPrefix( | 1548 ir.Primitive handleDynamicIndexPostfixPrefix( |
| 1533 ast.Send node, | 1549 ast.Send node, |
| 1534 ast.Node receiver, | 1550 ast.Node receiver, |
| 1535 ast.Node index, | 1551 ast.Node index, |
| 1536 op.IncDecOperator operator, | 1552 op.IncDecOperator operator, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1563 ast.Node index, | 1579 ast.Node index, |
| 1564 op.IncDecOperator operator, | 1580 op.IncDecOperator operator, |
| 1565 arg, | 1581 arg, |
| 1566 {bool isPrefix}) { | 1582 {bool isPrefix}) { |
| 1567 ir.Primitive indexValue = visit(index); | 1583 ir.Primitive indexValue = visit(index); |
| 1568 return translatePrefixPostfix( | 1584 return translatePrefixPostfix( |
| 1569 getValue: () { | 1585 getValue: () { |
| 1570 Selector selector = new Selector.index(); | 1586 Selector selector = new Selector.index(); |
| 1571 List<ir.Primitive> arguments = <ir.Primitive>[indexValue]; | 1587 List<ir.Primitive> arguments = <ir.Primitive>[indexValue]; |
| 1572 arguments = normalizeDynamicArguments(selector, arguments); | 1588 arguments = normalizeDynamicArguments(selector, arguments); |
| 1573 return irBuilder.buildSuperInvocation( | 1589 return irBuilder.buildSuperMethodInvocation( |
| 1574 indexFunction, selector, arguments); | 1590 indexFunction, selector, arguments); |
| 1575 }, | 1591 }, |
| 1576 operator: operator, | 1592 operator: operator, |
| 1577 setValue: (ir.Primitive result) { | 1593 setValue: (ir.Primitive result) { |
| 1578 Selector selector = new Selector.indexSet(); | 1594 Selector selector = new Selector.indexSet(); |
| 1579 List<ir.Primitive> arguments = <ir.Primitive>[indexValue, result]; | 1595 List<ir.Primitive> arguments = <ir.Primitive>[indexValue, result]; |
| 1580 arguments = normalizeDynamicArguments(selector, arguments); | 1596 arguments = normalizeDynamicArguments(selector, arguments); |
| 1581 irBuilder.buildSuperInvocation( | 1597 irBuilder.buildSuperMethodInvocation( |
| 1582 indexSetFunction, selector, arguments); | 1598 indexSetFunction, selector, arguments); |
| 1583 }, | 1599 }, |
| 1584 isPrefix: isPrefix); | 1600 isPrefix: isPrefix); |
| 1585 } | 1601 } |
| 1586 | 1602 |
| 1587 @override | 1603 @override |
| 1588 ir.Primitive handleStaticSetterSet( | 1604 ir.Primitive handleStaticSetterSet( |
| 1589 ast.SendSet node, | 1605 ast.SendSet node, |
| 1590 FunctionElement setter, | 1606 FunctionElement setter, |
| 1591 ast.Node rhs, | 1607 ast.Node rhs, |
| 1592 _) { | 1608 _) { |
| 1593 return irBuilder.buildStaticSet(setter, visit(rhs)); | 1609 return irBuilder.buildStaticSetterSet(setter, visit(rhs)); |
| 1594 } | 1610 } |
| 1595 | 1611 |
| 1596 @override | 1612 @override |
| 1597 ir.Primitive visitSuperFieldCompound( | 1613 ir.Primitive visitSuperFieldCompound( |
| 1598 ast.Send node, | 1614 ast.Send node, |
| 1599 FieldElement field, | 1615 FieldElement field, |
| 1600 op.AssignmentOperator operator, | 1616 op.AssignmentOperator operator, |
| 1601 ast.Node rhs, | 1617 ast.Node rhs, |
| 1602 _) { | 1618 _) { |
| 1603 return translateCompound( | 1619 return translateCompound( |
| 1604 getValue: () => irBuilder.buildSuperGet(field), | 1620 getValue: () => irBuilder.buildSuperFieldGet(field), |
| 1605 operator: operator, | 1621 operator: operator, |
| 1606 rhs: rhs, | 1622 rhs: rhs, |
| 1607 setValue: (ir.Primitive result) { | 1623 setValue: (ir.Primitive result) { |
| 1608 irBuilder.buildSuperSet(field, result); | 1624 irBuilder.buildSuperFieldSet(field, result); |
| 1609 }); | 1625 }); |
| 1610 } | 1626 } |
| 1611 | 1627 |
| 1612 @override | 1628 @override |
| 1613 ir.Primitive visitSuperFieldFieldPostfix( | 1629 ir.Primitive visitSuperFieldFieldPostfix( |
| 1614 ast.Send node, | 1630 ast.Send node, |
| 1615 FieldElement readField, | 1631 FieldElement readField, |
| 1616 FieldElement writtenField, | 1632 FieldElement writtenField, |
| 1617 op.IncDecOperator operator, | 1633 op.IncDecOperator operator, |
| 1618 _) { | 1634 _) { |
| 1619 return translatePrefixPostfix( | 1635 return translatePrefixPostfix( |
| 1620 getValue: () => irBuilder.buildSuperGet(readField), | 1636 getValue: () => irBuilder.buildSuperFieldGet(readField), |
| 1621 operator: operator, | 1637 operator: operator, |
| 1622 setValue: (ir.Primitive result) { | 1638 setValue: (ir.Primitive result) { |
| 1623 irBuilder.buildSuperSet(writtenField, result); | 1639 irBuilder.buildSuperFieldSet(writtenField, result); |
| 1624 }, | 1640 }, |
| 1625 isPrefix: false); | 1641 isPrefix: false); |
| 1626 } | 1642 } |
| 1627 | 1643 |
| 1628 @override | 1644 @override |
| 1629 ir.Primitive visitSuperFieldFieldPrefix( | 1645 ir.Primitive visitSuperFieldFieldPrefix( |
| 1630 ast.Send node, | 1646 ast.Send node, |
| 1631 FieldElement readField, | 1647 FieldElement readField, |
| 1632 FieldElement writtenField, | 1648 FieldElement writtenField, |
| 1633 op.IncDecOperator operator, | 1649 op.IncDecOperator operator, |
| 1634 _) { | 1650 _) { |
| 1635 return translatePrefixPostfix( | 1651 return translatePrefixPostfix( |
| 1636 getValue: () => irBuilder.buildSuperGet(readField), | 1652 getValue: () => irBuilder.buildSuperFieldGet(readField), |
| 1637 operator: operator, | 1653 operator: operator, |
| 1638 setValue: (ir.Primitive result) { | 1654 setValue: (ir.Primitive result) { |
| 1639 irBuilder.buildSuperSet(writtenField, result); | 1655 irBuilder.buildSuperFieldSet(writtenField, result); |
| 1640 }, | 1656 }, |
| 1641 isPrefix: true); | 1657 isPrefix: true); |
| 1642 } | 1658 } |
| 1643 | 1659 |
| 1644 @override | 1660 @override |
| 1645 ir.Primitive visitSuperFieldSetterCompound( | 1661 ir.Primitive visitSuperFieldSetterCompound( |
| 1646 ast.Send node, | 1662 ast.Send node, |
| 1647 FieldElement field, | 1663 FieldElement field, |
| 1648 FunctionElement setter, | 1664 FunctionElement setter, |
| 1649 op.AssignmentOperator operator, | 1665 op.AssignmentOperator operator, |
| 1650 ast.Node rhs, | 1666 ast.Node rhs, |
| 1651 _) { | 1667 _) { |
| 1652 return translateCompound( | 1668 return translateCompound( |
| 1653 getValue: () => irBuilder.buildSuperGet(field), | 1669 getValue: () => irBuilder.buildSuperFieldGet(field), |
| 1654 operator: operator, | 1670 operator: operator, |
| 1655 rhs: rhs, | 1671 rhs: rhs, |
| 1656 setValue: (ir.Primitive result) { | 1672 setValue: (ir.Primitive result) { |
| 1657 irBuilder.buildSuperSet(setter, result); | 1673 irBuilder.buildSuperSetterSet(setter, result); |
| 1658 }); | 1674 }); |
| 1659 } | 1675 } |
| 1660 | 1676 |
| 1661 @override | 1677 @override |
| 1662 ir.Primitive visitSuperGetterFieldCompound( | 1678 ir.Primitive visitSuperGetterFieldCompound( |
| 1663 ast.Send node, | 1679 ast.Send node, |
| 1664 FunctionElement getter, | 1680 FunctionElement getter, |
| 1665 FieldElement field, | 1681 FieldElement field, |
| 1666 op.AssignmentOperator operator, | 1682 op.AssignmentOperator operator, |
| 1667 ast.Node rhs, | 1683 ast.Node rhs, |
| 1668 _) { | 1684 _) { |
| 1669 return translateCompound( | 1685 return translateCompound( |
| 1670 getValue: () => irBuilder.buildSuperGet(getter), | 1686 getValue: () => irBuilder.buildSuperGetterGet(getter), |
| 1671 operator: operator, | 1687 operator: operator, |
| 1672 rhs: rhs, | 1688 rhs: rhs, |
| 1673 setValue: (ir.Primitive result) { | 1689 setValue: (ir.Primitive result) { |
| 1674 irBuilder.buildSuperSet(field, result); | 1690 irBuilder.buildSuperFieldSet(field, result); |
| 1675 }); | 1691 }); |
| 1676 } | 1692 } |
| 1677 | 1693 |
| 1678 @override | 1694 @override |
| 1679 ir.Primitive visitSuperGetterSetterCompound( | 1695 ir.Primitive visitSuperGetterSetterCompound( |
| 1680 ast.Send node, | 1696 ast.Send node, |
| 1681 FunctionElement getter, | 1697 FunctionElement getter, |
| 1682 FunctionElement setter, | 1698 FunctionElement setter, |
| 1683 op.AssignmentOperator operator, | 1699 op.AssignmentOperator operator, |
| 1684 ast.Node rhs, | 1700 ast.Node rhs, |
| 1685 _) { | 1701 _) { |
| 1686 return translateCompound( | 1702 return translateCompound( |
| 1687 getValue: () => irBuilder.buildSuperGet(getter), | 1703 getValue: () => irBuilder.buildSuperGetterGet(getter), |
| 1688 operator: operator, | 1704 operator: operator, |
| 1689 rhs: rhs, | 1705 rhs: rhs, |
| 1690 setValue: (ir.Primitive result) { | 1706 setValue: (ir.Primitive result) { |
| 1691 irBuilder.buildSuperSet(setter, result); | 1707 irBuilder.buildSuperSetterSet(setter, result); |
| 1692 }); | 1708 }); |
| 1693 } | 1709 } |
| 1694 | 1710 |
| 1695 @override | 1711 @override |
| 1696 ir.Primitive visitSuperMethodSetterCompound( | 1712 ir.Primitive visitSuperMethodSetterCompound( |
| 1697 ast.Send node, | 1713 ast.Send node, |
| 1698 FunctionElement method, | 1714 FunctionElement method, |
| 1699 FunctionElement setter, | 1715 FunctionElement setter, |
| 1700 op.AssignmentOperator operator, | 1716 op.AssignmentOperator operator, |
| 1701 ast.Node rhs, | 1717 ast.Node rhs, |
| 1702 _) { | 1718 _) { |
| 1703 return translateCompound( | 1719 return translateCompound( |
| 1704 getValue: () => irBuilder.buildSuperGet(method), | 1720 getValue: () => irBuilder.buildSuperMethodGet(method), |
| 1705 operator: operator, | 1721 operator: operator, |
| 1706 rhs: rhs, | 1722 rhs: rhs, |
| 1707 setValue: (ir.Primitive result) { | 1723 setValue: (ir.Primitive result) { |
| 1708 irBuilder.buildSuperSet(setter, result); | 1724 irBuilder.buildSuperSetterSet(setter, result); |
| 1709 }); | 1725 }); |
| 1710 } | 1726 } |
| 1711 | 1727 |
| 1712 @override | 1728 @override |
| 1713 ir.Primitive handleConstructorInvoke( | 1729 ir.Primitive handleConstructorInvoke( |
| 1714 ast.NewExpression node, | 1730 ast.NewExpression node, |
| 1715 ConstructorElement constructor, | 1731 ConstructorElement constructor, |
| 1716 DartType type, | 1732 DartType type, |
| 1717 ast.NodeList arguments, | 1733 ast.NodeList arguments, |
| 1718 Selector selector, _) { | 1734 Selector selector, _) { |
| (...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2329 fieldValues[field] = irBuilder.buildNullLiteral(); | 2345 fieldValues[field] = irBuilder.buildNullLiteral(); |
| 2330 } | 2346 } |
| 2331 } | 2347 } |
| 2332 }); | 2348 }); |
| 2333 // Evaluate initializing parameters, e.g. `Foo(this.x)`. | 2349 // Evaluate initializing parameters, e.g. `Foo(this.x)`. |
| 2334 constructor.functionSignature.orderedForEachParameter( | 2350 constructor.functionSignature.orderedForEachParameter( |
| 2335 (ParameterElement parameter) { | 2351 (ParameterElement parameter) { |
| 2336 if (parameter.isInitializingFormal) { | 2352 if (parameter.isInitializingFormal) { |
| 2337 InitializingFormalElement fieldParameter = parameter; | 2353 InitializingFormalElement fieldParameter = parameter; |
| 2338 fieldValues[fieldParameter.fieldElement] = | 2354 fieldValues[fieldParameter.fieldElement] = |
| 2339 irBuilder.buildLocalGet(parameter); | 2355 irBuilder.buildLocalVariableGet(parameter); |
| 2340 } | 2356 } |
| 2341 }); | 2357 }); |
| 2342 // Evaluate constructor initializers, e.g. `Foo() : x = 50`. | 2358 // Evaluate constructor initializers, e.g. `Foo() : x = 50`. |
| 2343 ast.FunctionExpression node = constructor.node; | 2359 ast.FunctionExpression node = constructor.node; |
| 2344 bool hasConstructorCall = false; // Has this() or super() initializer? | 2360 bool hasConstructorCall = false; // Has this() or super() initializer? |
| 2345 if (node != null && node.initializers != null) { | 2361 if (node != null && node.initializers != null) { |
| 2346 for(ast.Node initializer in node.initializers) { | 2362 for(ast.Node initializer in node.initializers) { |
| 2347 if (initializer is ast.SendSet) { | 2363 if (initializer is ast.SendSet) { |
| 2348 // Field initializer. | 2364 // Field initializer. |
| 2349 FieldElement field = elements[initializer]; | 2365 FieldElement field = elements[initializer]; |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2660 SourceInformation buildCall(ast.Node node) { | 2676 SourceInformation buildCall(ast.Node node) { |
| 2661 return new PositionSourceInformation( | 2677 return new PositionSourceInformation( |
| 2662 new TokenSourceLocation(sourceFile, node.getBeginToken(), name)); | 2678 new TokenSourceLocation(sourceFile, node.getBeginToken(), name)); |
| 2663 } | 2679 } |
| 2664 | 2680 |
| 2665 @override | 2681 @override |
| 2666 SourceInformationBuilder forContext(AstElement element) { | 2682 SourceInformationBuilder forContext(AstElement element) { |
| 2667 return new PositionSourceInformationBuilder(element); | 2683 return new PositionSourceInformationBuilder(element); |
| 2668 } | 2684 } |
| 2669 } | 2685 } |
| OLD | NEW |