Fixes made to: ada, c, chuck, clojure, coffee, common-lisp, cpp,
crystal, d, dart, elm, erlang, es6, factor, fsharp, gnu-smalltalk,
groovy, guile, haxe, hy, js, livescript, matlab, miniMAL, nasm, nim,
objc, objpascal, ocaml, perl, perl6, php, plsql, ps, python, r,
rpython, ruby, scheme, swift3, tcl, ts, vb, vimscript, wasm, yorick.
Catchless try* test is an optional test. Not all implementations
support catchless try* but a number were fixed so they at least don't
crash on catchless try*.
- Add */run script for every implementation.
- Refactor Clojure build to allow individual jar files for each step.
- Update FFI version for es6 and miniMAL to work with newer node
versions.
The run scripts for the following could use some additional
refactoring:
- java: build individual step jar, use java -jar instead of mvn to run
- plpgsql: maybe combine plpgsql/run and plpgsql/wrap.sh
- vhdl: combine vhdl/run and vhdl/run_vhdl.sh
- vimscript: combine vimscript/run and vimscript/run_vimscript.sh
Instead of shelling out to `date`, implement time-ms as a C function in
the vimextras.c library (which was already used for readline()).
Since Vim numbers can only hold numbers up to 32-bit, we return the
number of milliseconds since 2000 and not since 1970.
- Remove most of the step5 excludes in the Makefile except for ones
which don't have TCO capability at all (or the implementation is too
slow): bash, make, mal, matlab.
- Make perf_EXCLUDES consistent with other excludes.
- Add a print-FOO target which prints the resolved value of Makefile
variable FOO. For example, `make print-IMPLS` to print the list of
implementations.
Also in this commit:
- fix *ARGV* setup in erlang and racket.
- print startup message in fsharp
Dist/packaging support for most implementations and also generate
a */mal standalone app for most languages. The following
implementations still have ability to generate a single */mal
standalone application:
- guile
- julia
- matlab (mkoctfile doesn't actually package up source files)
- swift
- vb (mkbundle error)
Also, the following are mostly packaged into a single file but need
some module dependencies
- coffee: requires node_modules/ffi
- es6: requires node_modules/ffi
- js: requires node_modules/ffi
- lua: module 'readline' not found
- miniMAL: cannot find module '/mal/node_readline.js'
- r: needs lib directory
TODO: unfortunately, this relies on external data command (probably
UNIX only). However, this won't break the implementation on other
platforms, it just means the time-ms command won't work there.