OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 yaml.loader; | |
6 | |
7 import 'package:charcode/ascii.dart'; | 5 import 'package:charcode/ascii.dart'; |
8 import 'package:source_span/source_span.dart'; | 6 import 'package:source_span/source_span.dart'; |
9 | 7 |
10 import 'equality.dart'; | 8 import 'equality.dart'; |
11 import 'event.dart'; | 9 import 'event.dart'; |
12 import 'parser.dart'; | 10 import 'parser.dart'; |
13 import 'yaml_document.dart'; | 11 import 'yaml_document.dart'; |
14 import 'yaml_exception.dart'; | 12 import 'yaml_exception.dart'; |
15 import 'yaml_node.dart'; | 13 import 'yaml_node.dart'; |
16 | 14 |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 return node; | 140 return node; |
143 } | 141 } |
144 | 142 |
145 /// Composes a mapping node. | 143 /// Composes a mapping node. |
146 YamlNode _loadMapping(MappingStartEvent firstEvent) { | 144 YamlNode _loadMapping(MappingStartEvent firstEvent) { |
147 if (firstEvent.tag != "!" && firstEvent.tag != null && | 145 if (firstEvent.tag != "!" && firstEvent.tag != null && |
148 firstEvent.tag != "tag:yaml.org,2002:map") { | 146 firstEvent.tag != "tag:yaml.org,2002:map") { |
149 throw new YamlException("Invalid tag for mapping.", firstEvent.span); | 147 throw new YamlException("Invalid tag for mapping.", firstEvent.span); |
150 } | 148 } |
151 | 149 |
152 var children = deepEqualsMap(); | 150 var children = deepEqualsMap/*<dynamic, YamlNode>*/(); |
153 var node = new YamlMap.internal( | 151 var node = new YamlMap.internal( |
154 children, firstEvent.span, firstEvent.style); | 152 children, firstEvent.span, firstEvent.style); |
155 _registerAnchor(firstEvent.anchor, node); | 153 _registerAnchor(firstEvent.anchor, node); |
156 | 154 |
157 var event = _parser.parse(); | 155 var event = _parser.parse(); |
158 while (event.type != EventType.MAPPING_END) { | 156 while (event.type != EventType.MAPPING_END) { |
159 var key = _loadNode(event); | 157 var key = _loadNode(event); |
160 var value = _loadNode(_parser.parse()); | 158 var value = _loadNode(_parser.parse()); |
| 159 if (children.containsKey(key)) { |
| 160 throw new YamlException("Duplicate mapping key.", key.span); |
| 161 } |
| 162 |
161 children[key] = value; | 163 children[key] = value; |
162 event = _parser.parse(); | 164 event = _parser.parse(); |
163 } | 165 } |
164 | 166 |
165 setSpan(node, firstEvent.span.expand(event.span)); | 167 setSpan(node, firstEvent.span.expand(event.span)); |
166 return node; | 168 return node; |
167 } | 169 } |
168 | 170 |
169 /// Parses a scalar according to its tag name. | 171 /// Parses a scalar according to its tag name. |
170 YamlScalar _parseByTag(ScalarEvent scalar) { | 172 YamlScalar _parseByTag(ScalarEvent scalar) { |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 case ".nan": | 352 case ".nan": |
351 case ".NaN": | 353 case ".NaN": |
352 case ".NAN": | 354 case ".NAN": |
353 return double.NAN; | 355 return double.NAN; |
354 } | 356 } |
355 } | 357 } |
356 | 358 |
357 return null; | 359 return null; |
358 } | 360 } |
359 } | 361 } |
OLD | NEW |