Index: pkg/compiler/lib/src/parser/element_listener.dart |
diff --git a/pkg/compiler/lib/src/parser/element_listener.dart b/pkg/compiler/lib/src/parser/element_listener.dart |
index 00ec535ea92748c46ced28bd7b7369f16dd2370c..8473d0343ef597e1670fc9274a449618493b7755 100644 |
--- a/pkg/compiler/lib/src/parser/element_listener.dart |
+++ b/pkg/compiler/lib/src/parser/element_listener.dart |
@@ -37,7 +37,8 @@ import '../tokens/token_constants.dart' as Tokens show |
EOF_TOKEN; |
import '../tree/tree.dart'; |
import '../util/util.dart' show |
- Link; |
+ Link, |
+ LinkBuilder; |
import 'partial_elements.dart' show |
PartialClassElement, |
@@ -69,7 +70,8 @@ class ElementListener extends Listener { |
Link<Node> nodes = const Link<Node>(); |
- Link<MetadataAnnotation> metadata = const Link<MetadataAnnotation>(); |
+ LinkBuilder<MetadataAnnotation> metadata = |
+ new LinkBuilder<MetadataAnnotation>(); |
/// Records a stack of booleans for each member parsed (a stack is used to |
/// support nested members which isn't currently possible, but it also serves |
@@ -212,9 +214,9 @@ class ElementListener extends Listener { |
void endTopLevelDeclaration(Token token) { |
if (!metadata.isEmpty) { |
- recoverableError(metadata.head.beginToken, |
+ recoverableError(metadata.first.beginToken, |
'Metadata not supported here.'); |
- metadata = const Link<MetadataAnnotation>(); |
+ metadata.clear(); |
} |
} |
@@ -595,19 +597,15 @@ class ElementListener extends Listener { |
compilationUnitElement.addMember(element, listener); |
} |
- Link<MetadataAnnotation> popMetadata(ElementX element) { |
- var result = const Link<MetadataAnnotation>(); |
- for (Link link = metadata; !link.isEmpty; link = link.tail) { |
- element.addMetadata(link.head); |
- // Reverse the list as is implicitly done by addMetadata. |
- result = result.prepend(link.head); |
- } |
- metadata = const Link<MetadataAnnotation>(); |
+ List<MetadataAnnotation> popMetadata(ElementX element) { |
+ List<MetadataAnnotation> result = metadata.toList(); |
+ element.metadata = result; |
+ metadata.clear(); |
return result; |
} |
void pushMetadata(MetadataAnnotation annotation) { |
- metadata = metadata.prepend(annotation); |
+ metadata.addLast(annotation); |
} |
void addLibraryTag(LibraryTag tag) { |