OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 resolution; | 5 part of resolution; |
6 | 6 |
7 class TypeDefinitionVisitor extends MappingVisitor<DartType> { | 7 class TypeDefinitionVisitor extends MappingVisitor<DartType> { |
8 Scope scope; | 8 Scope scope; |
9 final TypeDeclarationElement enclosingElement; | 9 final TypeDeclarationElement enclosingElement; |
10 TypeDeclarationElement get element => enclosingElement; | 10 TypeDeclarationElement get element => enclosingElement; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 Map arguments = {'constructorName': ''}; | 158 Map arguments = {'constructorName': ''}; |
159 // TODO(ahe): Why is this a compile-time error? Or if it is an error, | 159 // TODO(ahe): Why is this a compile-time error? Or if it is an error, |
160 // why do we bother to registerThrowNoSuchMethod below? | 160 // why do we bother to registerThrowNoSuchMethod below? |
161 compiler.reportError(node, kind, arguments); | 161 compiler.reportError(node, kind, arguments); |
162 superMember = new ErroneousElementX( | 162 superMember = new ErroneousElementX( |
163 kind, arguments, '', element); | 163 kind, arguments, '', element); |
164 registry.registerThrowNoSuchMethod(); | 164 registry.registerThrowNoSuchMethod(); |
165 } else { | 165 } else { |
166 ConstructorElement superConstructor = superMember; | 166 ConstructorElement superConstructor = superMember; |
167 Selector callToMatch = new Selector.call("", element.library, 0); | 167 Selector callToMatch = new Selector.call("", element.library, 0); |
168 superConstructor.computeSignature(compiler); | 168 superConstructor.computeType(compiler); |
169 if (!callToMatch.applies(superConstructor, compiler.world)) { | 169 if (!callToMatch.applies(superConstructor, compiler.world)) { |
170 MessageKind kind = MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT; | 170 MessageKind kind = MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT; |
171 compiler.reportError(node, kind); | 171 compiler.reportError(node, kind); |
172 superMember = new ErroneousElementX(kind, {}, '', element); | 172 superMember = new ErroneousElementX(kind, {}, '', element); |
173 } | 173 } |
174 } | 174 } |
175 FunctionElement constructor = | 175 FunctionElement constructor = |
176 new SynthesizedConstructorElementX.forDefault(superMember, element); | 176 new SynthesizedConstructorElementX.forDefault(superMember, element); |
177 if (superMember.isErroneous) { | 177 if (superMember.isErroneous) { |
178 compiler.elementsWithCompileTimeErrors.add(constructor); | 178 compiler.elementsWithCompileTimeErrors.add(constructor); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 mixinApplication.computeThisAndRawType(compiler, typeVariables); | 289 mixinApplication.computeThisAndRawType(compiler, typeVariables); |
290 // Substitute in synthetic type variables in super and mixin types. | 290 // Substitute in synthetic type variables in super and mixin types. |
291 supertype = supertype.subst(typeVariables, element.typeVariables); | 291 supertype = supertype.subst(typeVariables, element.typeVariables); |
292 mixinType = mixinType.subst(typeVariables, element.typeVariables); | 292 mixinType = mixinType.subst(typeVariables, element.typeVariables); |
293 | 293 |
294 doApplyMixinTo(mixinApplication, supertype, mixinType); | 294 doApplyMixinTo(mixinApplication, supertype, mixinType); |
295 mixinApplication.resolutionState = STATE_DONE; | 295 mixinApplication.resolutionState = STATE_DONE; |
296 mixinApplication.supertypeLoadState = STATE_DONE; | 296 mixinApplication.supertypeLoadState = STATE_DONE; |
297 // Replace the synthetic type variables by the original type variables in | 297 // Replace the synthetic type variables by the original type variables in |
298 // the returned type (which should be the type actually extended). | 298 // the returned type (which should be the type actually extended). |
299 InterfaceType mixinThisType = mixinApplication.computeType(compiler); | 299 InterfaceType mixinThisType = mixinApplication.thisType; |
300 return mixinThisType.subst(element.typeVariables, | 300 return mixinThisType.subst(element.typeVariables, |
301 mixinThisType.typeArguments); | 301 mixinThisType.typeArguments); |
302 } | 302 } |
303 | 303 |
304 bool isDefaultConstructor(FunctionElement constructor) { | 304 bool isDefaultConstructor(FunctionElement constructor) { |
305 return constructor.name == '' && | 305 if (constructor.name != '') return false; |
306 constructor.computeSignature(compiler).parameterCount == 0; | 306 constructor.computeType(compiler); |
| 307 return constructor.functionSignature.parameterCount == 0; |
307 } | 308 } |
308 | 309 |
309 FunctionElement createForwardingConstructor(ConstructorElement target, | 310 FunctionElement createForwardingConstructor(ConstructorElement target, |
310 ClassElement enclosing) { | 311 ClassElement enclosing) { |
311 return new SynthesizedConstructorElementX.notForDefault( | 312 return new SynthesizedConstructorElementX.notForDefault( |
312 target.name, target, enclosing); | 313 target.name, target, enclosing); |
313 } | 314 } |
314 | 315 |
315 void doApplyMixinTo(MixinApplicationElementX mixinApplication, | 316 void doApplyMixinTo(MixinApplicationElementX mixinApplication, |
316 DartType supertype, | 317 DartType supertype, |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 Identifier selector = node.selector.asIdentifier(); | 630 Identifier selector = node.selector.asIdentifier(); |
630 var e = prefixElement.lookupLocalMember(selector.source); | 631 var e = prefixElement.lookupLocalMember(selector.source); |
631 if (e == null || !e.impliesType) { | 632 if (e == null || !e.impliesType) { |
632 error(node.selector, MessageKind.CANNOT_RESOLVE_TYPE, | 633 error(node.selector, MessageKind.CANNOT_RESOLVE_TYPE, |
633 {'typeName': node.selector}); | 634 {'typeName': node.selector}); |
634 return; | 635 return; |
635 } | 636 } |
636 loadSupertype(e, node); | 637 loadSupertype(e, node); |
637 } | 638 } |
638 } | 639 } |
OLD | NEW |