Index: pkg/front_end/lib/src/fasta/builder/scope.dart |
diff --git a/pkg/front_end/lib/src/fasta/builder/scope.dart b/pkg/front_end/lib/src/fasta/builder/scope.dart |
deleted file mode 100644 |
index 2fe432982ec4967adb96df71a4679cf0306fe0a4..0000000000000000000000000000000000000000 |
--- a/pkg/front_end/lib/src/fasta/builder/scope.dart |
+++ /dev/null |
@@ -1,190 +0,0 @@ |
-// 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.scope; |
- |
-import 'builder.dart' show Builder, MixedAccessor; |
- |
-import '../errors.dart' show internalError; |
- |
-class Scope { |
- /// Names declared in this scope. |
- final Map<String, Builder> local; |
- |
- /// The scope that this scope is nested within, or `null` if this is the top |
- /// level scope. |
- final Scope parent; |
- |
- /// Indicates whether an attempt to declare new names in this scope should |
- /// succeed. |
- final bool isModifiable; |
- |
- Map<String, Builder> labels; |
- |
- Map<String, Builder> forwardDeclaredLabels; |
- |
- Scope(this.local, this.parent, {this.isModifiable: true}); |
- |
- Scope createNestedScope({bool isModifiable: true}) { |
- return new Scope(<String, Builder>{}, this, isModifiable: isModifiable); |
- } |
- |
- Builder lookup(String name, int charOffset, Uri fileUri) { |
- Builder builder = local[name]; |
- if (builder != null) { |
- if (builder.next != null) { |
- return lookupAmbiguous(name, builder, false, charOffset, fileUri); |
- } |
- return builder.isSetter |
- ? new AccessErrorBuilder(name, builder, charOffset, fileUri) |
- : builder; |
- } else { |
- return parent?.lookup(name, charOffset, fileUri); |
- } |
- } |
- |
- Builder lookupSetter(String name, int charOffset, Uri fileUri) { |
- Builder builder = local[name]; |
- if (builder != null) { |
- if (builder.next != null) { |
- return lookupAmbiguous(name, builder, true, charOffset, fileUri); |
- } |
- if (builder.isField) { |
- if (builder.isFinal) { |
- return new AccessErrorBuilder(name, builder, charOffset, fileUri); |
- } else { |
- return builder; |
- } |
- } else if (builder.isSetter) { |
- return builder; |
- } else { |
- return new AccessErrorBuilder(name, builder, charOffset, fileUri); |
- } |
- } else { |
- return parent?.lookupSetter(name, charOffset, fileUri); |
- } |
- } |
- |
- Builder lookupAmbiguous( |
- String name, Builder builder, bool setter, int charOffset, Uri fileUri) { |
- assert(builder.next != null); |
- if (builder is MixedAccessor) { |
- return setter ? builder.setter : builder.getter; |
- } |
- Builder setterBuilder; |
- Builder getterBuilder; |
- Builder current = builder; |
- while (current != null) { |
- if (current.isGetter && getterBuilder == null) { |
- getterBuilder = current; |
- } else if (current.isSetter && setterBuilder == null) { |
- setterBuilder = current; |
- } else { |
- return new AmbiguousBuilder(name, builder, charOffset, fileUri); |
- } |
- current = current.next; |
- } |
- assert(getterBuilder != null); |
- assert(setterBuilder != null); |
- return setter ? setterBuilder : getterBuilder; |
- } |
- |
- bool hasLocalLabel(String name) => labels != null && labels.containsKey(name); |
- |
- void declareLabel(String name, Builder target) { |
- if (isModifiable) { |
- labels ??= <String, Builder>{}; |
- labels[name] = target; |
- } else { |
- internalError("Can't extend an unmodifiable scope."); |
- } |
- } |
- |
- void forwardDeclareLabel(String name, Builder target) { |
- declareLabel(name, target); |
- forwardDeclaredLabels ??= <String, Builder>{}; |
- forwardDeclaredLabels[name] = target; |
- } |
- |
- void claimLabel(String name) { |
- if (forwardDeclaredLabels == null) return; |
- forwardDeclaredLabels.remove(name); |
- if (forwardDeclaredLabels.length == 0) { |
- forwardDeclaredLabels = null; |
- } |
- } |
- |
- Map<String, Builder> get unclaimedForwardDeclarations { |
- return forwardDeclaredLabels; |
- } |
- |
- Builder lookupLabel(String name) { |
- return (labels == null ? null : labels[name]) ?? parent?.lookupLabel(name); |
- } |
- |
- // TODO(ahe): Rename to extend or something. |
- void operator []=(String name, Builder member) { |
- if (isModifiable) { |
- local[name] = member; |
- } else { |
- internalError("Can't extend an unmodifiable scope."); |
- } |
- } |
-} |
- |
-abstract class ProblemBuilder extends Builder { |
- final String name; |
- |
- final Builder builder; |
- |
- ProblemBuilder(this.name, this.builder, int charOffset, Uri fileUri) |
- : super(null, charOffset, fileUri); |
- |
- get target => null; |
- |
- bool get hasProblem => true; |
- |
- String get message; |
- |
- @override |
- String get fullNameForErrors => name; |
-} |
- |
-/// Represents a [builder] that's being accessed incorrectly. For example, an |
-/// attempt to write to a final field, or to read from a setter. |
-class AccessErrorBuilder extends ProblemBuilder { |
- AccessErrorBuilder(String name, Builder builder, int charOffset, Uri fileUri) |
- : super(name, builder, charOffset, fileUri); |
- |
- Builder get parent => builder; |
- |
- bool get isFinal => builder.isFinal; |
- |
- bool get isField => builder.isField; |
- |
- bool get isRegularMethod => builder.isRegularMethod; |
- |
- bool get isGetter => !builder.isGetter; |
- |
- bool get isSetter => !builder.isSetter; |
- |
- bool get isInstanceMember => builder.isInstanceMember; |
- |
- bool get isStatic => builder.isStatic; |
- |
- bool get isTopLevel => builder.isTopLevel; |
- |
- bool get isTypeDeclaration => builder.isTypeDeclaration; |
- |
- bool get isLocal => builder.isLocal; |
- |
- String get message => "Access error: '$name'."; |
-} |
- |
-class AmbiguousBuilder extends ProblemBuilder { |
- AmbiguousBuilder(String name, Builder builder, int charOffset, Uri fileUri) |
- : super(name, builder, charOffset, fileUri); |
- |
- String get message => "Duplicated named: '$name'."; |
-} |