| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 part of ssa; | 5 part of ssa; |
| 6 | 6 |
| 7 class SsaFunctionCompiler implements FunctionCompiler { | 7 class SsaFunctionCompiler implements FunctionCompiler { |
| 8 SsaCodeGeneratorTask generator; | 8 SsaCodeGeneratorTask generator; |
| 9 SsaBuilderTask builder; | 9 SsaBuilderTask builder; |
| 10 SsaOptimizerTask optimizer; | 10 SsaOptimizerTask optimizer; |
| (...skipping 5809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5820 _) { | 5820 _) { |
| 5821 generateNonInstanceSetter(node, function, visitAndPop(rhs)); | 5821 generateNonInstanceSetter(node, function, visitAndPop(rhs)); |
| 5822 } | 5822 } |
| 5823 | 5823 |
| 5824 @override | 5824 @override |
| 5825 void visitTopLevelFieldSet( | 5825 void visitTopLevelFieldSet( |
| 5826 ast.SendSet node, | 5826 ast.SendSet node, |
| 5827 FieldElement field, | 5827 FieldElement field, |
| 5828 ast.Node rhs, | 5828 ast.Node rhs, |
| 5829 _) { | 5829 _) { |
| 5830 generateIsDeferredLoadedCheckOfSend(node); |
| 5830 generateNonInstanceSetter(node, field, visitAndPop(rhs)); | 5831 generateNonInstanceSetter(node, field, visitAndPop(rhs)); |
| 5831 } | 5832 } |
| 5832 | 5833 |
| 5833 @override | 5834 @override |
| 5834 void visitFinalTopLevelFieldSet( | 5835 void visitFinalTopLevelFieldSet( |
| 5835 ast.SendSet node, | 5836 ast.SendSet node, |
| 5836 FieldElement field, | 5837 FieldElement field, |
| 5837 ast.Node rhs, | 5838 ast.Node rhs, |
| 5838 _) { | 5839 _) { |
| 5840 generateIsDeferredLoadedCheckOfSend(node); |
| 5839 generateNonInstanceSetter(node, field, visitAndPop(rhs)); | 5841 generateNonInstanceSetter(node, field, visitAndPop(rhs)); |
| 5840 } | 5842 } |
| 5841 | 5843 |
| 5842 @override | 5844 @override |
| 5843 void visitTopLevelGetterSet( | 5845 void visitTopLevelGetterSet( |
| 5844 ast.SendSet node, | 5846 ast.SendSet node, |
| 5845 GetterElement getter, | 5847 GetterElement getter, |
| 5846 ast.Node rhs, | 5848 ast.Node rhs, |
| 5847 _) { | 5849 _) { |
| 5850 generateIsDeferredLoadedCheckOfSend(node); |
| 5848 generateNonInstanceSetter(node, getter, visitAndPop(rhs)); | 5851 generateNonInstanceSetter(node, getter, visitAndPop(rhs)); |
| 5849 } | 5852 } |
| 5850 | 5853 |
| 5851 @override | 5854 @override |
| 5852 void visitTopLevelSetterSet( | 5855 void visitTopLevelSetterSet( |
| 5853 ast.SendSet node, | 5856 ast.SendSet node, |
| 5854 SetterElement setter, | 5857 SetterElement setter, |
| 5855 ast.Node rhs, | 5858 ast.Node rhs, |
| 5856 _) { | 5859 _) { |
| 5860 generateIsDeferredLoadedCheckOfSend(node); |
| 5857 generateNonInstanceSetter(node, setter, visitAndPop(rhs)); | 5861 generateNonInstanceSetter(node, setter, visitAndPop(rhs)); |
| 5858 } | 5862 } |
| 5859 | 5863 |
| 5860 @override | 5864 @override |
| 5861 void visitTopLevelFunctionSet( | 5865 void visitTopLevelFunctionSet( |
| 5862 ast.SendSet node, | 5866 ast.SendSet node, |
| 5863 MethodElement function, | 5867 MethodElement function, |
| 5864 ast.Node rhs, | 5868 ast.Node rhs, |
| 5865 _) { | 5869 _) { |
| 5870 generateIsDeferredLoadedCheckOfSend(node); |
| 5866 generateNonInstanceSetter(node, function, visitAndPop(rhs)); | 5871 generateNonInstanceSetter(node, function, visitAndPop(rhs)); |
| 5867 } | 5872 } |
| 5868 | 5873 |
| 5869 @override | 5874 @override |
| 5870 void visitStaticFieldSet( | 5875 void visitStaticFieldSet( |
| 5871 ast.SendSet node, | 5876 ast.SendSet node, |
| 5872 FieldElement field, | 5877 FieldElement field, |
| 5873 ast.Node rhs, | 5878 ast.Node rhs, |
| 5874 _) { | 5879 _) { |
| 5880 generateIsDeferredLoadedCheckOfSend(node); |
| 5875 generateNonInstanceSetter(node, field, visitAndPop(rhs)); | 5881 generateNonInstanceSetter(node, field, visitAndPop(rhs)); |
| 5876 } | 5882 } |
| 5877 | 5883 |
| 5878 @override | 5884 @override |
| 5879 void visitFinalStaticFieldSet( | 5885 void visitFinalStaticFieldSet( |
| 5880 ast.SendSet node, | 5886 ast.SendSet node, |
| 5881 FieldElement field, | 5887 FieldElement field, |
| 5882 ast.Node rhs, | 5888 ast.Node rhs, |
| 5883 _) { | 5889 _) { |
| 5890 generateIsDeferredLoadedCheckOfSend(node); |
| 5884 generateNonInstanceSetter(node, field, visitAndPop(rhs)); | 5891 generateNonInstanceSetter(node, field, visitAndPop(rhs)); |
| 5885 } | 5892 } |
| 5886 | 5893 |
| 5887 @override | 5894 @override |
| 5888 void visitStaticGetterSet( | 5895 void visitStaticGetterSet( |
| 5889 ast.SendSet node, | 5896 ast.SendSet node, |
| 5890 GetterElement getter, | 5897 GetterElement getter, |
| 5891 ast.Node rhs, | 5898 ast.Node rhs, |
| 5892 _) { | 5899 _) { |
| 5900 generateIsDeferredLoadedCheckOfSend(node); |
| 5893 generateNonInstanceSetter(node, getter, visitAndPop(rhs)); | 5901 generateNonInstanceSetter(node, getter, visitAndPop(rhs)); |
| 5894 } | 5902 } |
| 5895 | 5903 |
| 5896 @override | 5904 @override |
| 5897 void visitStaticSetterSet( | 5905 void visitStaticSetterSet( |
| 5898 ast.SendSet node, | 5906 ast.SendSet node, |
| 5899 SetterElement setter, | 5907 SetterElement setter, |
| 5900 ast.Node rhs, | 5908 ast.Node rhs, |
| 5901 _) { | 5909 _) { |
| 5910 generateIsDeferredLoadedCheckOfSend(node); |
| 5902 generateNonInstanceSetter(node, setter, visitAndPop(rhs)); | 5911 generateNonInstanceSetter(node, setter, visitAndPop(rhs)); |
| 5903 } | 5912 } |
| 5904 | 5913 |
| 5905 @override | 5914 @override |
| 5906 void visitStaticFunctionSet( | 5915 void visitStaticFunctionSet( |
| 5907 ast.SendSet node, | 5916 ast.SendSet node, |
| 5908 MethodElement function, | 5917 MethodElement function, |
| 5909 ast.Node rhs, | 5918 ast.Node rhs, |
| 5910 _) { | 5919 _) { |
| 5920 generateIsDeferredLoadedCheckOfSend(node); |
| 5911 generateNonInstanceSetter(node, function, visitAndPop(rhs)); | 5921 generateNonInstanceSetter(node, function, visitAndPop(rhs)); |
| 5912 } | 5922 } |
| 5913 | 5923 |
| 5914 @override | 5924 @override |
| 5915 void visitUnresolvedSet( | 5925 void visitUnresolvedSet( |
| 5916 ast.SendSet node, | 5926 ast.SendSet node, |
| 5917 Element element, | 5927 Element element, |
| 5918 ast.Node rhs, | 5928 ast.Node rhs, |
| 5919 _) { | 5929 _) { |
| 5920 if (node.isSuperCall) { | 5930 if (node.isSuperCall) { |
| 5921 // TODO(johnniwinther): Remove this when final super field assignment is | 5931 // TODO(johnniwinther): Remove this when final super field assignment is |
| 5922 // not an unresolved set. | 5932 // not an unresolved set. |
| 5923 handleSuperSendSet(node); | 5933 handleSuperSendSet(node); |
| 5924 } else { | 5934 } else { |
| 5935 generateIsDeferredLoadedCheckOfSend(node); |
| 5925 generateNonInstanceSetter(node, element, visitAndPop(rhs)); | 5936 generateNonInstanceSetter(node, element, visitAndPop(rhs)); |
| 5926 } | 5937 } |
| 5927 } | 5938 } |
| 5928 | 5939 |
| 5929 @override | 5940 @override |
| 5930 void visitClassTypeLiteralSet( | 5941 void visitClassTypeLiteralSet( |
| 5931 ast.SendSet node, | 5942 ast.SendSet node, |
| 5932 TypeConstantExpression constant, | 5943 TypeConstantExpression constant, |
| 5933 ast.Node rhs, | 5944 ast.Node rhs, |
| 5934 _) { | 5945 _) { |
| (...skipping 2165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8100 if (unaliased is TypedefType) throw 'unable to unalias $type'; | 8111 if (unaliased is TypedefType) throw 'unable to unalias $type'; |
| 8101 unaliased.accept(this, builder); | 8112 unaliased.accept(this, builder); |
| 8102 } | 8113 } |
| 8103 | 8114 |
| 8104 void visitDynamicType(DynamicType type, SsaBuilder builder) { | 8115 void visitDynamicType(DynamicType type, SsaBuilder builder) { |
| 8105 JavaScriptBackend backend = builder.compiler.backend; | 8116 JavaScriptBackend backend = builder.compiler.backend; |
| 8106 ClassElement cls = backend.findHelper('DynamicRuntimeType'); | 8117 ClassElement cls = backend.findHelper('DynamicRuntimeType'); |
| 8107 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld))); | 8118 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld))); |
| 8108 } | 8119 } |
| 8109 } | 8120 } |
| OLD | NEW |