| 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
|
| index 159d2ba66905d6c0076b4c7c0191503fe5ab7811..10e5c39c864c2817993f03e92f5700b05b310062 100644
|
| --- a/pkg/front_end/lib/src/fasta/builder/scope.dart
|
| +++ b/pkg/front_end/lib/src/fasta/builder/scope.dart
|
| @@ -22,6 +22,8 @@ class Scope {
|
|
|
| Map<String, Builder> labels;
|
|
|
| + Map<String, Builder> forwardDeclaredLabels;
|
| +
|
| Scope(this.local, this.parent, {this.isModifiable: true});
|
|
|
| Scope createNestedScope({bool isModifiable: true}) {
|
| @@ -99,6 +101,23 @@ class Scope {
|
| }
|
| }
|
|
|
| + void forwardDeclareLabel(String name, Builder target) {
|
| + declareLabel(name, target);
|
| + forwardDeclaredLabels ??= <String, Builder>{};
|
| + forwardDeclaredLabels[name] = target;
|
| + }
|
| +
|
| + void claimLabel(String name) {
|
| + 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);
|
| }
|
|
|