This error occurs when building with stack:
```
Run stack install --system-ghc --ghc-options='-split-sections -optl-static'
4
Preventing creation of stack root '/github/home/.stack/'. Parent directory '/github/home/' is owned by someone else.
5
Error: Process completed with exit code 1.
```
https://github.com/commercialhaskell/stack/issues/2187
Now that integer literals have the builtin int type we need an actual
IOUnit value to use in the IO sequence implementation.
This commit also adds the TicTacToe web example to the test suite. It is
a typecheck / C generation only test because it uses the Wasm browser APIs.
Allow _ in Wasm exported names
The Anoma validity predicate Wasm signature is:
"_validate_tx": [I64, I64, I64, I64, I64, I64, I64, I64] -> [I64]
So we need to allow exported names containing '_'.
This PR adds a Juvix module that exports a function with this signature
and a test that the resulting Wasm function can be called.
* Add a Web version of TicTacToe
The web version demonstrates injecting host functions into the WASM
import table and call exported Juvix functions from JS.
The web version and the CLI version of the TicTacToe game use the same
game logic backend Juvix module.
* Build and publish web apps in documentation
* Add a link to the TicTacToe web app in example documentation
* Update Makefile to match the new format
* import all non-compile axioms with alphanum names in entrypoint
This commit adds `__attribute__((input_name(<name>)))` to the type
signature of all axioms that do not have a compile block. This indicates
to the compiler that this function should be added to the input table of
the WASM binary.
Adds a test that an imported function can be called from Juvix.
* test: Run node command in same directory as WASM output
* Don't generate importName for non-alphnum axioms
* Add a tutorial on Juvix module to JS interop via Wasm
The `juvix internal doc` command generates 2 files per Juvix module.
One for the main documentation and one for the HTML source file.
The HTML source file is given the prefix `-src` and so links have this
prefix.
However when HTML is generated using `juvix html` only one file is
generated per Juvix module. The filenames do not have the `-src` suffix
and so the links should not have this suffix either.
* Export all functions with alphanum names in entrypoint
Set the export_name attribute on every function signature that has a
fully alpha numeric name.
* Adds a non-WASI target to compile command
WASM libraries we want to run in the browser and in Anoma VM do not have
access to the WASI runtime. For this usecase we need a target runtime
that does not use the WASI runtime.
A `wasi-` prefix is added to existing compile targets and introduce a new
standalone target. This target does not have IO functions like
`putStrLn` and `exit` calls `__builtin_trap` which corresponds to the
`unreachable` WASM instruction.
In the non-exhaustive case error a debug message is emitted to tell the
user which function had the error. This is now abstracted to a `debug`
function in the runtime which calls `putStrLn` in the case of WASI and
is no-op in the case of non-WASI.
Tests are added which check that exported names can be called with the
correct name and result.
* Moves walloc to a common directory
An axiom without a compile block generates a C function signature
without a corresponding body. This allows implementations to be injected
at link time (JS, Anoma).