The library is R6RS portable yet so hard to run. As far as I know, there are only a few implementations which can run the test without raising an unexpected error (Racket and Vicare, I've tested). Now, it's time to add Sagittarius to the list.
Conclusion first, this is the result: https://gist.github.com/ktakashi/d6232d5ac7ae6a5d6fc1
To run the test, I need to patch some libraries. One is
getenvand the other one is adding required argument otherwise Sagittarius compiler would raise an error during the compilation. There are couple of failures but these are either too specific test or enhancement of Sagittarius. The error of
catch-syntax-violationcan be consider test case's bug and some are Sagittarius enhancement. Sagittarius actually doesn't check duplicated bindings on
letrec. Some are because of
evaldoesn't inherit current environment. (So the class
<t>can't be seen). The test case itself expects specific value of
subformslot. It might be better to have some convension but R6RS doesn't specify this. The same goes
catch-assertiontest cases. The fixnum issue is that on 64 bit environment, Sagittarius uses 62 bits as fixnum (this seems the same on Vicare, so it fails as well).
I've also made an execution option that given script runs strict R6RS mode. Which basically reads all expression ahead and wrap with special syntax so that compiler can expand macro first and compile the expressions.
# Run the `script.scm` on strict R6RS mode $ sagittarius -r6 script.scmThis mode is similar with the behaviour of Andre van Tonder's expander. Thus the script can contain
libraryin it. Be careful,
define-librarycan't be in it.
Now, I believe I can say, Sagittarius is also the R6RS implementation :) (unless otherwise there's a bug which is always the case.)