OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library fasta.scope; | 5 library fasta.scope; |
6 | 6 |
7 import 'builder/builder.dart' show Builder, MixedAccessor; | 7 import 'builder/builder.dart' show Builder, MixedAccessor; |
8 | 8 |
9 import 'errors.dart' show internalError; | 9 import 'errors.dart' show internalError; |
10 | 10 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 if (isModifiable) { | 157 if (isModifiable) { |
158 local[name] = member; | 158 local[name] = member; |
159 } else { | 159 } else { |
160 internalError("Can't extend an unmodifiable scope."); | 160 internalError("Can't extend an unmodifiable scope."); |
161 } | 161 } |
162 } | 162 } |
163 | 163 |
164 void forEach(f(String name, Builder member)) { | 164 void forEach(f(String name, Builder member)) { |
165 local.forEach(f); | 165 local.forEach(f); |
166 } | 166 } |
| 167 |
| 168 String get debugString { |
| 169 StringBuffer buffer = new StringBuffer(); |
| 170 int nestingLevel = writeOn(buffer); |
| 171 for (int i = nestingLevel; i >= 0; i--) { |
| 172 buffer.writeln("${' ' * i}}"); |
| 173 } |
| 174 return "$buffer"; |
| 175 } |
| 176 |
| 177 int writeOn(StringSink sink) { |
| 178 int nestingLevel = (parent?.writeOn(sink) ?? -1) + 1; |
| 179 String indent = " " * nestingLevel; |
| 180 sink.writeln("$indent{"); |
| 181 local.forEach((String name, Builder member) { |
| 182 sink.writeln("$indent $name"); |
| 183 }); |
| 184 setters.forEach((String name, Builder member) { |
| 185 sink.writeln("$indent $name="); |
| 186 }); |
| 187 return nestingLevel; |
| 188 } |
167 } | 189 } |
168 | 190 |
169 abstract class ProblemBuilder extends Builder { | 191 abstract class ProblemBuilder extends Builder { |
170 final String name; | 192 final String name; |
171 | 193 |
172 final Builder builder; | 194 final Builder builder; |
173 | 195 |
174 ProblemBuilder(this.name, this.builder, int charOffset, Uri fileUri) | 196 ProblemBuilder(this.name, this.builder, int charOffset, Uri fileUri) |
175 : super(null, charOffset, fileUri); | 197 : super(null, charOffset, fileUri); |
176 | 198 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 | 236 |
215 String get message => "Access error: '$name'."; | 237 String get message => "Access error: '$name'."; |
216 } | 238 } |
217 | 239 |
218 class AmbiguousBuilder extends ProblemBuilder { | 240 class AmbiguousBuilder extends ProblemBuilder { |
219 AmbiguousBuilder(String name, Builder builder, int charOffset, Uri fileUri) | 241 AmbiguousBuilder(String name, Builder builder, int charOffset, Uri fileUri) |
220 : super(name, builder, charOffset, fileUri); | 242 : super(name, builder, charOffset, fileUri); |
221 | 243 |
222 String get message => "Duplicated named: '$name'."; | 244 String get message => "Duplicated named: '$name'."; |
223 } | 245 } |
OLD | NEW |