From 80efbe1a57f6c560118d42b34119d0c46411bde3 Mon Sep 17 00:00:00 2001 From: Yes DrX Date: Tue, 4 Nov 2025 17:55:59 -0500 Subject: [PATCH 1/2] fix error when atomicArc shallowCopy is not defined --- yaml/dom.nim | 4 ++-- yaml/tojson.nim | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/yaml/dom.nim b/yaml/dom.nim index 3223eab1..5b5b2314 100644 --- a/yaml/dom.nim +++ b/yaml/dom.nim @@ -164,7 +164,7 @@ proc constructChild*( c.refs[target] = (tag: yamlTag(YamlNode), p: cast[pointer](result)) var start: Event - when defined(gcArc) or defined(gcOrc): + when defined(gcArc) or defined(gcOrc) or defined(gcAtomicArc): start = ctx.input.next() else: shallowCopy(start, ctx.input.next()) @@ -213,7 +213,7 @@ proc constructChild*( endPos: start.endPos, ) ctx.addAnchor(start.scalarProperties.anchor) - when defined(gcArc) or defined(gcOrc): + when defined(gcArc) or defined(gcOrc) or defined(gcAtomicArc): result.content = move start.scalarContent else: shallowCopy(result.content, start.scalarContent) diff --git a/yaml/tojson.nim b/yaml/tojson.nim index ec628f0f..09396303 100644 --- a/yaml/tojson.nim +++ b/yaml/tojson.nim @@ -70,7 +70,7 @@ proc jsonFromScalar( result = JsonNode(kind: JNull) else: result = JsonNode(kind: JString) - when defined(gcArc) or defined(gcOrc): + when defined(gcArc) or defined(gcOrc) or defined(gcAtomicArc): result.str = content else: shallowCopy(result.str, content) From 3bc304d906bcef869694333056f532eef4a8fbf7 Mon Sep 17 00:00:00 2001 From: Yes DrX Date: Wed, 5 Nov 2025 20:43:28 -0500 Subject: [PATCH 2/2] use when compiles to check if shallowCopy is defined (arc/orc/atomicArc) --- yaml/dom.nim | 13 +++++++------ yaml/tojson.nim | 6 +++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/yaml/dom.nim b/yaml/dom.nim index 5b5b2314..dbfdb541 100644 --- a/yaml/dom.nim +++ b/yaml/dom.nim @@ -164,10 +164,11 @@ proc constructChild*( c.refs[target] = (tag: yamlTag(YamlNode), p: cast[pointer](result)) var start: Event - when defined(gcArc) or defined(gcOrc) or defined(gcAtomicArc): - start = ctx.input.next() - else: + # instead of checking whether gcArc, gcOrc, or gcAtomicArc are defined, we use compiles to make it future proof. note that shallowCopy is only defined when for mm:arc/orc/atomicArc + when compiles(shallowCopy(start, ctx.input.next())): shallowCopy(start, ctx.input.next()) + else: + start = ctx.input.next() case start.kind of yamlStartMap: @@ -213,10 +214,10 @@ proc constructChild*( endPos: start.endPos, ) ctx.addAnchor(start.scalarProperties.anchor) - when defined(gcArc) or defined(gcOrc) or defined(gcAtomicArc): - result.content = move start.scalarContent - else: + when compiles(shallowCopy(result.content, start.scalarContent)): shallowCopy(result.content, start.scalarContent) + else: + result.content = move start.scalarContent of yamlAlias: result = cast[YamlNode](ctx.refs.getOrDefault(start.aliasTarget).p) else: internalError("Malformed YamlStream") diff --git a/yaml/tojson.nim b/yaml/tojson.nim index 09396303..9b212816 100644 --- a/yaml/tojson.nim +++ b/yaml/tojson.nim @@ -70,10 +70,10 @@ proc jsonFromScalar( result = JsonNode(kind: JNull) else: result = JsonNode(kind: JString) - when defined(gcArc) or defined(gcOrc) or defined(gcAtomicArc): - result.str = content - else: + when compiles(shallowCopy(result.str, content)): # instead of checking whether gcArc, gcOrc, or gcAtomicArc are defined, we use compiles to make it future proof. note that shallowCopy is only defined when for mm:arc/orc/atomicArc shallowCopy(result.str, content) + else: + result.str = content except ValueError as ve: var e = newException(YamlConstructionError, "Cannot parse numeric value") e.parent = ve