OLD | NEW |
---|---|
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 /// ----------------------------------------------------------------------- | 5 /// ----------------------------------------------------------------------- |
6 /// ERROR HANDLING | 6 /// ERROR HANDLING |
7 /// ----------------------------------------------------------------------- | 7 /// ----------------------------------------------------------------------- |
8 /// | 8 /// |
9 /// As a rule of thumb, errors that can be detected statically are handled by | 9 /// As a rule of thumb, errors that can be detected statically are handled by |
10 /// the frontend, typically by translating the erroneous code into a 'throw' or | 10 /// the frontend, typically by translating the erroneous code into a 'throw' or |
(...skipping 3058 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3069 } | 3069 } |
3070 } | 3070 } |
3071 | 3071 |
3072 /// Expression of the form `MakeClosure(f, c, t)` where `f` is a name of a | 3072 /// Expression of the form `MakeClosure(f, c, t)` where `f` is a name of a |
3073 /// closed top-level function, `c` is a Vector representing closure context, and | 3073 /// closed top-level function, `c` is a Vector representing closure context, and |
3074 /// `t` is the type of the resulting closure. | 3074 /// `t` is the type of the resulting closure. |
3075 class ClosureCreation extends Expression { | 3075 class ClosureCreation extends Expression { |
3076 Reference topLevelFunctionReference; | 3076 Reference topLevelFunctionReference; |
3077 Expression contextVector; | 3077 Expression contextVector; |
3078 FunctionType functionType; | 3078 FunctionType functionType; |
3079 List<DartType> typeArgs; | |
3079 | 3080 |
3080 ClosureCreation(Member topLevelFunction, Expression contextVector, | 3081 ClosureCreation(Member topLevelFunction, Expression contextVector, |
3081 FunctionType functionType) | 3082 FunctionType functionType, List<DartType> typeArgs) |
3082 : this.byReference( | 3083 : this.byReference(getMemberReference(topLevelFunction), contextVector, |
3083 getMemberReference(topLevelFunction), contextVector, functionType); | 3084 functionType, typeArgs); |
3084 | 3085 |
3085 ClosureCreation.byReference( | 3086 ClosureCreation.byReference(this.topLevelFunctionReference, |
3086 this.topLevelFunctionReference, this.contextVector, this.functionType) { | 3087 this.contextVector, this.functionType, this.typeArgs) { |
3087 contextVector?.parent = this; | 3088 contextVector?.parent = this; |
3088 } | 3089 } |
3089 | 3090 |
3090 Procedure get topLevelFunction => topLevelFunctionReference?.asProcedure; | 3091 Procedure get topLevelFunction => topLevelFunctionReference?.asProcedure; |
3091 | 3092 |
3092 void set topLevelFunction(Member topLevelFunction) { | 3093 void set topLevelFunction(Member topLevelFunction) { |
3093 topLevelFunctionReference = getMemberReference(topLevelFunction); | 3094 topLevelFunctionReference = getMemberReference(topLevelFunction); |
3094 } | 3095 } |
3095 | 3096 |
3096 accept(ExpressionVisitor v) => v.visitClosureCreation(this); | 3097 accept(ExpressionVisitor v) => v.visitClosureCreation(this); |
3097 accept1(ExpressionVisitor1 v, arg) => v.visitClosureCreation(this, arg); | 3098 accept1(ExpressionVisitor1 v, arg) => v.visitClosureCreation(this, arg); |
3098 | 3099 |
3099 visitChildren(Visitor v) { | 3100 visitChildren(Visitor v) { |
3100 contextVector?.accept(v); | 3101 contextVector?.accept(v); |
karlklose
2017/07/25 09:38:23
I think this method should call visitList(typeArgu
sjindel
2017/07/25 13:11:48
I added visitList and functionType ones. But why t
| |
3101 } | 3102 } |
3102 | 3103 |
3103 transformChildren(Transformer v) { | 3104 transformChildren(Transformer v) { |
3104 if (contextVector != null) { | 3105 if (contextVector != null) { |
3105 contextVector = contextVector.accept(v); | 3106 contextVector = contextVector.accept(v); |
3106 contextVector?.parent = this; | 3107 contextVector?.parent = this; |
3107 } | 3108 } |
3108 } | 3109 } |
3109 | 3110 |
3110 DartType getStaticType(TypeEnvironment types) { | 3111 DartType getStaticType(TypeEnvironment types) { |
(...skipping 1556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4667 if (typedef_.canonicalName == null) { | 4668 if (typedef_.canonicalName == null) { |
4668 throw '$typedef_ has no canonical name'; | 4669 throw '$typedef_ has no canonical name'; |
4669 } | 4670 } |
4670 return typedef_.canonicalName; | 4671 return typedef_.canonicalName; |
4671 } | 4672 } |
4672 | 4673 |
4673 /// Annotation describing information which is not part of Dart semantics; in | 4674 /// Annotation describing information which is not part of Dart semantics; in |
4674 /// other words, if this information (or any information it refers to) changes, | 4675 /// other words, if this information (or any information it refers to) changes, |
4675 /// static analysis and runtime behavior of the library are unaffected. | 4676 /// static analysis and runtime behavior of the library are unaffected. |
4676 const informative = null; | 4677 const informative = null; |
OLD | NEW |