Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(418)

Unified Diff: pkg/front_end/lib/src/fasta/builder/scope.dart

Issue 2794533002: Move scope.dart. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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'.";
-}
« no previous file with comments | « pkg/front_end/lib/src/fasta/builder/procedure_builder.dart ('k') | pkg/front_end/lib/src/fasta/builder/type_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698