Index: pkg/front_end/lib/src/fasta/builder/library_builder.dart |
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart |
index efd77e5ed09bd5163be43e75e380fbb7566bfff5..e3067aa8ccbf980457e61dbfc39343eb82734d3b 100644 |
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart |
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart |
@@ -19,8 +19,9 @@ import '../util/relativize.dart' show relativizeUri; |
import 'builder.dart' |
show |
Builder, |
- DynamicTypeBuilder, |
ClassBuilder, |
+ DynamicTypeBuilder, |
+ PrefixBuilder, |
Scope, |
ScopeBuilder, |
TypeBuilder, |
@@ -88,7 +89,24 @@ abstract class LibraryBuilder<T extends TypeBuilder, R> extends Builder { |
} |
} |
- bool addToExportScope(String name, Builder member); |
+ /// Returns true if the export scope was modified. |
+ bool addToExportScope(String name, Builder member) { |
+ if (name.startsWith("_")) return false; |
+ if (member is PrefixBuilder) return false; |
+ Map<String, Builder> map = |
+ member.isSetter ? exports.setters : exports.local; |
+ Builder existing = map[name]; |
+ if (existing == member) return false; |
+ if (existing != null) { |
+ Builder result = |
+ buildAmbiguousBuilder(name, existing, member, -1, isExport: true); |
+ map[name] = result; |
+ return result != existing; |
+ } else { |
+ map[name] = member; |
+ } |
+ return true; |
+ } |
void addToScope(String name, Builder member, int charOffset, bool isImport); |