Chromium Code Reviews| Index: pkg/fasta/lib/src/builder/function_type_alias_builder.dart |
| diff --git a/pkg/fasta/lib/src/builder/function_type_alias_builder.dart b/pkg/fasta/lib/src/builder/function_type_alias_builder.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..78e95782a1a04b03d923006eac4ed9eecadeb339 |
| --- /dev/null |
| +++ b/pkg/fasta/lib/src/builder/function_type_alias_builder.dart |
| @@ -0,0 +1,49 @@ |
| +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +library fasta.function_type_alias_builder; |
| + |
| +import 'builder.dart' show |
| + FormalParameterBuilder, |
| + LibraryBuilder, |
| + MetadataBuilder, |
| + TypeBuilder, |
| + TypeDeclarationBuilder, |
| + TypeVariableBuilder; |
| + |
| +import 'scope.dart' show |
| + Scope; |
| + |
| +abstract class FunctionTypeAliasBuilder<T extends TypeBuilder, R> |
| + extends TypeDeclarationBuilder<T, R> { |
| + final T returnType; |
| + |
| + final List<TypeVariableBuilder> typeVariables; |
| + |
| + final List<FormalParameterBuilder> formals; |
| + |
| + FunctionTypeAliasBuilder( |
| + List<MetadataBuilder> metadata, this.returnType, |
| + String name, this.typeVariables, this.formals, List<T> types, |
| + LibraryBuilder parent) |
| + : super(metadata, null, name, types, parent); |
| + |
| + LibraryBuilder get parent => super.parent; |
| + |
| + int resolveTypes(LibraryBuilder library) { |
| + assert(library == parent || library == parent.partOfLibrary); |
| + Scope scope = library.scope.createNestedScope(); |
|
Johnni Winther
2017/01/16 13:01:19
Only create the nested scope if `typeVariable != n
ahe
2017/01/16 15:26:33
I've added a TODO. It may work in this case, but f
|
| + if (typeVariables != null) { |
| + for (TypeVariableBuilder t in typeVariables) { |
| + scope[t.name] = t; |
| + } |
| + } |
| + if (types != null) { |
| + for (T t in types) { |
| + t.resolveIn(scope); |
| + } |
| + } |
| + return types.length; |
| + } |
| +} |