From 2e556e4a3a77ff477d1d5ddb83773de8d20393bc Mon Sep 17 00:00:00 2001 From: Cameron Ross Date: Sun, 7 Apr 2019 05:45:54 -0230 Subject: [PATCH] don't create null anchors (#245) don't create null anchors merged-on-behalf-of: Basile-z --- source/dyaml/event.d | 1 + source/dyaml/serializer.d | 79 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/source/dyaml/event.d b/source/dyaml/event.d index cd7a927..f4a747f 100644 --- a/source/dyaml/event.d +++ b/source/dyaml/event.d @@ -113,6 +113,7 @@ struct Event */ Event event(EventID id)(const Mark start, const Mark end, const string anchor = null) @safe + in(!(id == EventID.alias_ && anchor == ""), "Missing anchor for alias event") { Event result; result.startMark = start; diff --git a/source/dyaml/serializer.d b/source/dyaml/serializer.d index 8cf1830..34b96f8 100644 --- a/source/dyaml/serializer.d +++ b/source/dyaml/serializer.d @@ -156,7 +156,7 @@ struct Serializer return; } - anchors_[node] = null; + anchors_.remove(node); final switch (node.nodeID) { case NodeID.mapping: @@ -243,3 +243,80 @@ struct Serializer } } } + +// Issue #244 +@safe unittest +{ + import dyaml.dumper : dumper; + auto node = Node([ + Node.Pair( + Node(""), + Node([ + Node([ + Node.Pair( + Node("d"), + Node([ + Node([ + Node.Pair( + Node("c"), + Node("") + ), + Node.Pair( + Node("b"), + Node("") + ), + Node.Pair( + Node(""), + Node("") + ) + ]) + ]) + ), + ]), + Node([ + Node.Pair( + Node("d"), + Node([ + Node(""), + Node(""), + Node([ + Node.Pair( + Node("c"), + Node("") + ), + Node.Pair( + Node("b"), + Node("") + ), + Node.Pair( + Node(""), + Node("") + ) + ]) + ]) + ), + Node.Pair( + Node("z"), + Node("") + ), + Node.Pair( + Node(""), + Node("") + ) + ]), + Node("") + ]) + ), + Node.Pair( + Node("g"), + Node("") + ), + Node.Pair( + Node("h"), + Node("") + ), + ]); + + auto stream = appender!string(); + dumper().dump(stream, node); +}