Here is a quick and dirty patch for arc3.1, it postpones string-copy and let it run by eval.
Not sure if it will cause some other problem.
< (unescape-ats s))
< (string-copy s))) ; avoid immutable strings
> `(string-copy ,(unescape-ats s)))
> `(string-copy ,s))) ; avoid immutable strings
Thanks for finding the bug, and the great idea for fixing it.
BTW, I think `(unescape-ats s)` also needs to be treated as the same.
So that it will not fail when atstrings is set.
I'd like to run some tests to make sure it does not cause much problem.
I found this one:
But it failed with following error when using arc3.1.
arc> (load "unit-test.arc")
Error: "_dfn: undefined;\n cannot reference undefined identifier"
I've added a few piecemeal tests over the years (all the .t files in the repo), and there's also some tests in my curated repo (http://github.com/akkartik/arc). All those seem ok..
Looks like dfn is a rainbow innovation: http://arclanguage.org/item?id=10539
Update 1 hour later: almost all rainbow tests pass! I had to disable the dfn tests, and the ssyntax tests at the bottom of core-evaluation-test were hanging. Other than that it's all good.
I'll make a pull request later.
I've also added/plagiarized rainbow's tests to the repo: https://github.com/arclanguage/anarki/commit/68be3c0f4d. Joys of the perl artistic license.
There's still a couple of syntax tests that are failing, likely because of test harness issues. And I'd like to unify all the different tests into a single framework. For future work..
Update 43 minutes later: it turns out rainbow's ssyntax precedence rules were different. Perhaps anarki changed at some point. Those tests are now fixed.