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

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

Issue 1183283004: Check for deferred access in static assignments. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 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 | no next file » | 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) 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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698