| Index: pkg/yaml/lib/src/model.dart
|
| diff --git a/pkg/yaml/lib/src/model.dart b/pkg/yaml/lib/src/model.dart
|
| index 564cac6b63573e2b16d659d9fd4a82174f65a4db..f0e839c062ae64c377bbe2bca38dec6e30172018 100644
|
| --- a/pkg/yaml/lib/src/model.dart
|
| +++ b/pkg/yaml/lib/src/model.dart
|
| @@ -7,8 +7,10 @@
|
| /// representation graph.
|
| library yaml.model;
|
|
|
| +import 'package:source_maps/source_maps.dart';
|
| +
|
| +import 'equality.dart';
|
| import 'parser.dart';
|
| -import 'utils.dart';
|
| import 'visitor.dart';
|
| import 'yaml_exception.dart';
|
|
|
| @@ -80,14 +82,17 @@ abstract class Node {
|
| /// Any YAML node can have an anchor associated with it.
|
| String anchor;
|
|
|
| - Node(this.tag, [this.anchor]);
|
| + /// The source span for this node.
|
| + Span span;
|
| +
|
| + Node(this.tag, this.span, [this.anchor]);
|
|
|
| bool operator ==(other) {
|
| if (other is! Node) return false;
|
| return tag == other.tag;
|
| }
|
|
|
| - int get hashCode => hashCodeFor([tag, anchor]);
|
| + int get hashCode => tag.hashCode ^ anchor.hashCode;
|
|
|
| visit(Visitor v);
|
| }
|
| @@ -97,8 +102,8 @@ class SequenceNode extends Node {
|
| /// The nodes in the sequence.
|
| List<Node> content;
|
|
|
| - SequenceNode(String tagName, this.content)
|
| - : super(new Tag.sequence(tagName));
|
| + SequenceNode(String tagName, this.content, Span span)
|
| + : super(new Tag.sequence(tagName), span);
|
|
|
| /// Two sequences are equal if their tags and contents are equal.
|
| bool operator ==(other) {
|
| @@ -113,14 +118,15 @@ class SequenceNode extends Node {
|
|
|
| String toString() => '$tag [${content.map((e) => '$e').join(', ')}]';
|
|
|
| - int get hashCode => super.hashCode ^ hashCodeFor(content);
|
| + int get hashCode => super.hashCode ^ deepHashCode(content);
|
|
|
| visit(Visitor v) => v.visitSequence(this);
|
| }
|
|
|
| /// An alias node is a reference to an anchor.
|
| class AliasNode extends Node {
|
| - AliasNode(String anchor) : super(new Tag.scalar(Tag.yaml("str")), anchor);
|
| + AliasNode(String anchor, Span span)
|
| + : super(new Tag.scalar(Tag.yaml("str")), span, anchor);
|
|
|
| visit(Visitor v) => v.visitAlias(this);
|
| }
|
| @@ -139,9 +145,9 @@ class ScalarNode extends Node {
|
| /// be specified for a newly-parsed scalar that hasn't yet been composed.
|
| /// Value should be specified for a composed scalar, although `null` is a
|
| /// valid value.
|
| - ScalarNode(String tagName, {String content, this.value})
|
| + ScalarNode(String tagName, Span span, {String content, this.value})
|
| : _content = content,
|
| - super(new Tag.scalar(tagName));
|
| + super(new Tag.scalar(tagName), span);
|
|
|
| /// Two scalars are equal if their string representations are equal.
|
| bool operator ==(other) {
|
| @@ -225,8 +231,8 @@ class MappingNode extends Node {
|
| /// The node map.
|
| Map<Node, Node> content;
|
|
|
| - MappingNode(String tagName, this.content)
|
| - : super(new Tag.mapping(tagName));
|
| + MappingNode(String tagName, this.content, Span span)
|
| + : super(new Tag.mapping(tagName), span);
|
|
|
| /// Two mappings are equal if their tags and contents are equal.
|
| bool operator ==(other) {
|
| @@ -247,7 +253,7 @@ class MappingNode extends Node {
|
| return '$tag {$strContent}';
|
| }
|
|
|
| - int get hashCode => super.hashCode ^ hashCodeFor(content);
|
| + int get hashCode => super.hashCode ^ deepHashCode(content);
|
|
|
| visit(Visitor v) => v.visitMapping(this);
|
| }
|
|
|