diff --git a/eo-printer/src/main/resources/org/eolang/printer/print/inline-cactoos.xsl b/eo-printer/src/main/resources/org/eolang/printer/print/inline-cactoos.xsl index 33125872fa2..3f014d14792 100644 --- a/eo-printer/src/main/resources/org/eolang/printer/print/inline-cactoos.xsl +++ b/eo-printer/src/main/resources/org/eolang/printer/print/inline-cactoos.xsl @@ -310,9 +310,21 @@ never moved its value anywhere: dropping it deletes the declaration from the printed source, so a private helper formation or const cache that nothing reads yet would silently vanish (#5914). + + The name is atomized once here, before any of those functions is asked + (#6669). Each declares its `$name` as `xs:string`, so handing over the + `@name` node left the conversion to the function conversion rules, and Saxon + is free to bind the parameter to a closure over the argument expression + rather than over its converted value. The node then arrives inside the + function, where `eo:resolved-name(@base) = $name` has already been compiled + to a `ValueComparison` on the strength of the declared types — it casts + straight to `AtomicValue` and the sheet dies with "DOMNodeWrapper cannot be + cast to AtomicValue". A string leaves the conversion with nothing to lose, + as at the `eo:signature` call in "to-eo-tree". --> - + +