| 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 library fasta.class_builder; | 5 library fasta.class_builder; |
| 6 | 6 |
| 7 import '../errors.dart' show internalError; | 7 import '../errors.dart' show internalError; |
| 8 | 8 |
| 9 import 'builder.dart' | 9 import 'builder.dart' |
| 10 show | 10 show |
| 11 Builder, | 11 Builder, |
| 12 ConstructorReferenceBuilder, | 12 ConstructorReferenceBuilder, |
| 13 LibraryBuilder, | 13 LibraryBuilder, |
| 14 MemberBuilder, |
| 14 MetadataBuilder, | 15 MetadataBuilder, |
| 15 MixinApplicationBuilder, | 16 MixinApplicationBuilder, |
| 16 NamedTypeBuilder, | 17 NamedTypeBuilder, |
| 17 TypeBuilder, | 18 TypeBuilder, |
| 18 TypeDeclarationBuilder, | 19 TypeDeclarationBuilder, |
| 19 TypeVariableBuilder; | 20 TypeVariableBuilder; |
| 20 | 21 |
| 21 import '../scope.dart' show AccessErrorBuilder, AmbiguousBuilder, Scope; | 22 import '../scope.dart' show AccessErrorBuilder, AmbiguousBuilder, Scope; |
| 22 | 23 |
| 23 abstract class ClassBuilder<T extends TypeBuilder, R> | 24 abstract class ClassBuilder<T extends TypeBuilder, R> |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 } | 68 } |
| 68 return constructorReferences.length; | 69 return constructorReferences.length; |
| 69 } | 70 } |
| 70 | 71 |
| 71 Scope computeInstanceScope(Scope parent) { | 72 Scope computeInstanceScope(Scope parent) { |
| 72 if (typeVariables != null) { | 73 if (typeVariables != null) { |
| 73 Map<String, Builder> local = <String, Builder>{}; | 74 Map<String, Builder> local = <String, Builder>{}; |
| 74 for (TypeVariableBuilder t in typeVariables) { | 75 for (TypeVariableBuilder t in typeVariables) { |
| 75 local[t.name] = t; | 76 local[t.name] = t; |
| 76 } | 77 } |
| 77 parent = new Scope(local, parent, isModifiable: false); | 78 parent = new Scope(local, null, parent, isModifiable: false); |
| 78 } | 79 } |
| 79 return new Scope(membersInScope, parent, isModifiable: false); | 80 return new Scope(membersInScope, null, parent, isModifiable: false); |
| 80 } | 81 } |
| 81 | 82 |
| 82 /// Used to lookup a static member of this class. | 83 /// Used to lookup a static member of this class. |
| 83 Builder findStaticBuilder(String name, int charOffset, Uri fileUri, | 84 Builder findStaticBuilder(String name, int charOffset, Uri fileUri, |
| 84 {bool isSetter: false}) { | 85 {bool isSetter: false}) { |
| 85 Builder builder = members[name]; | 86 Builder builder = members[name]; |
| 86 if (builder?.next != null) { | 87 if (builder?.next != null) { |
| 87 Builder getterBuilder; | 88 Builder getterBuilder; |
| 88 Builder setterBuilder; | 89 Builder setterBuilder; |
| 89 Builder current = builder; | 90 Builder current = builder; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 116 } | 117 } |
| 117 if (builder == null) { | 118 if (builder == null) { |
| 118 return null; | 119 return null; |
| 119 } else if (isSetter && builder.isGetter) { | 120 } else if (isSetter && builder.isGetter) { |
| 120 return null; | 121 return null; |
| 121 } else { | 122 } else { |
| 122 return builder.isInstanceMember ? null : builder; | 123 return builder.isInstanceMember ? null : builder; |
| 123 } | 124 } |
| 124 } | 125 } |
| 125 | 126 |
| 126 Builder findConstructorOrFactory(String name); | 127 Builder findConstructorOrFactory(String name, int charOffset, Uri uri) { |
| 128 return constructors[name]; |
| 129 } |
| 127 | 130 |
| 128 /// Returns a map which maps the type variables of [superclass] to their | 131 /// Returns a map which maps the type variables of [superclass] to their |
| 129 /// respective values as defined by the superclass clause of this class (and | 132 /// respective values as defined by the superclass clause of this class (and |
| 130 /// its superclasses). | 133 /// its superclasses). |
| 131 /// | 134 /// |
| 132 /// It's assumed that [superclass] is a superclass of this class. | 135 /// It's assumed that [superclass] is a superclass of this class. |
| 133 /// | 136 /// |
| 134 /// For example, given: | 137 /// For example, given: |
| 135 /// | 138 /// |
| 136 /// class Box<T> {} | 139 /// class Box<T> {} |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 argument = argument.subst(substitutionMap); | 184 argument = argument.subst(substitutionMap); |
| 182 } | 185 } |
| 183 directSubstitutionMap[variables[i]] = argument; | 186 directSubstitutionMap[variables[i]] = argument; |
| 184 } | 187 } |
| 185 substitutionMap = directSubstitutionMap; | 188 substitutionMap = directSubstitutionMap; |
| 186 } | 189 } |
| 187 } | 190 } |
| 188 return substitutionMap; | 191 return substitutionMap; |
| 189 } | 192 } |
| 190 | 193 |
| 194 void forEach(void f(String name, MemberBuilder builder)) { |
| 195 members.forEach(f); |
| 196 } |
| 197 |
| 198 /// Don't use for scope lookup. Only use when an element is known to exist |
| 199 /// (and isn't a setter). |
| 200 MemberBuilder operator [](String name) { |
| 201 // TODO(ahe): Rename this to getLocalMember. |
| 202 return members[name] ?? internalError("Not found: '$name'."); |
| 203 } |
| 204 |
| 191 void addCompileTimeError(int charOffset, String message) { | 205 void addCompileTimeError(int charOffset, String message) { |
| 192 library.addCompileTimeError(charOffset, message, fileUri: fileUri); | 206 library.addCompileTimeError(charOffset, message, fileUri: fileUri); |
| 193 } | 207 } |
| 194 | 208 |
| 195 void addWarning(int charOffset, String message) { | 209 void addWarning(int charOffset, String message) { |
| 196 library.addWarning(charOffset, message, fileUri: fileUri); | 210 library.addWarning(charOffset, message, fileUri: fileUri); |
| 197 } | 211 } |
| 198 | 212 |
| 199 void addNit(int charOffset, String message) { | 213 void addNit(int charOffset, String message) { |
| 200 library.addNit(charOffset, message, fileUri: fileUri); | 214 library.addNit(charOffset, message, fileUri: fileUri); |
| 201 } | 215 } |
| 202 } | 216 } |
| OLD | NEW |