* Renaming MiniJuvix to Juvix
* Make Ormolu happy
* Make Hlint happy
* Remove redundant imports
* Fix shell tests and add target ci to our Makefile
* Make pre-commit happy
* Embed stdlib in minijuvix library
We add a new step at the beginning of the pipeline called Setup that
registers the modules in the standard library with the Files effect. The
standard library is then used when the Scoper queries the Files effect
for modules as it resolves import statements.
Use of the standard library can be disabled using the global
`--no-stdlib` command-line option.
* CI: Checkout submodules recursively for stdlib
* Add a new `--no-stdlib` option to shell check
* Poke CI
* CI: Checkout submodules in the test job
* match inductive definitions
* progress towards builtins
* more progress towards builtin types
* add more builtins
* add some errors
* add reverse table to builtins
* Squashed commit of the following:
commit 93333de502d8dd546eb8edf697ca7eef972ea105
Author: Paul Cadman <git@paulcadman.dev>
Date: Mon Jun 27 18:21:30 2022 +0100
Use builtin names for match and project functions
Add an implementation of nat for the standalone backend
commit 868d2098ee57b7acbca84512b6e096650eeeb22d
Author: Jan Mas Rovira <janmasrovira@gmail.com>
Date: Mon Jun 27 18:15:29 2022 +0200
add builtin information to ClosureInfo
commit 32c78aceb19ee4010d66090a3c4e6025621b5c1f
Author: Paul Cadman <git@paulcadman.dev>
Date: Mon Jun 27 12:52:10 2022 +0100
Refactor BuiltinEnum to sum type of each Builtin
commit 55bb72ab12a8fb7d10070c2dee5875482453b7c6
Author: Paul Cadman <git@paulcadman.dev>
Date: Fri Jun 24 14:44:28 2022 +0100
Add Builtin information to Mono InfoTable
commit a72368f2e3af20baaf44c5e21fa7e6a469cf1ac5
Author: Paul Cadman <git@paulcadman.dev>
Date: Fri Jun 24 14:41:51 2022 +0100
Add Bitraversable to Prelude
commit afa3153d82a9509b0882e7ca99830040fad9ef65
Author: Paul Cadman <git@paulcadman.dev>
Date: Fri Jun 24 14:41:39 2022 +0100
Remove unused import
commit ea0b7848fb80970e03a0561be3fb4448486a89a9
Author: Paul Cadman <git@paulcadman.dev>
Date: Thu Jun 23 13:54:58 2022 +0100
Use projection functions instead of direct member access
* Avoid shadowing C runtime names in foreign block
* Fix formatting
* Update C names for builtin functions
* Add prim_ prefix to builtin C names
Implement builtins for standalone and libc backends
* Update ormolu action
* ci: run all tests for draft PRs
Co-authored-by: Paul Cadman <git@paulcadman.dev>
* Add support for parital application eval/apply
* include string.h in libc runtime
* Add wasm SimpleFungibleTokenImplicit to tests
* Update VP example to new syntax
* propagate types from all reachable modules
* Change prelude import ordering to workaround minic issue
* Pre-declare inductive typedefs in C backend
This generates the typedefs corresponding to each inductive type.
e.g
```
inductive Bool { .. }
```
is translated to:
```
typedef struct Bool_3_s Bool_3_t;
```
This means that C code can reference these typedefs before they have
been fully defined. (all references to inductive types go through these typedefs
names).
This fixes an issue with the ordering of delcarations when modules are included.
* Use common Lib for MiniC tests
* libc runtime: flush stdout after writing to it
* Adds MiniTicTacToe example using common example lib
In MonoJuvixToMiniC we emit the inductive type typedefs before anything
else to support includes ordering
* Adds tests for mutually recrusive functions
* Add golden tests for milestone examples
* Example: Remove commented out code
* Test error handling behaviour in MiniTicTacToe
* Fail clang compilation on warnings
* Add test for Nested list types
* Add PrettyCode instances for NonEmpty and ConcreteType
* Ignore IsImplicit field in Eq and Hashable of TypeApplication
This is to workaround a crash in Micro->Mono translation when looking up
a concrete type
* Fix formatting
* hlint fixes
* Formatting fixes not reported by local pre-commit
* Refactor MonoJuvixToMiniC
* Fix shelltest
NB: We cannot check the order of the 'Writing' lines because this
depends on the order of files returned by the FS which is
non-deterministic between systems
* Refactor Base to CBuilder
* Refactor using applyOnFunStatement
Co-authored-by: Jan Mas Rovira <janmasrovira@gmail.com>
* Updates runtime with function calls
* wip function calls
* Remove juvix_function_call macro
* Remove "new_" prefix for constructors and add _field suffix
* Rename test file
* Add example of using constructor as closure
* Test mjuvix function as function closure
* Keep track of emitted closures to avoid duplication
* Use concatMapM from MiniJuvix.Prelude
* Refactoring to split out the closure gen
* Separate passes for function sigs and closures
* Renaming functions generating functionDefs
* Rename juvix_function to minijuvix_function
* Rename DeclJuvixClosure
* Remove typeDefType'
* Remove unnecessary do
* Use Mono.getName
* Extract isNullary
* Use let-in instead of where
* [WIP] EntryPoint now has options. --no-termination is a new global opt.
* Add TerminationChecking to the pipeline
* Add TerminationChecking to the pipeline
* Keep GlobalOptions in App
* Fix reviewer's comments
* delete unnecessary parens
Co-authored-by: Jan Mas Rovira <janmasrovira@gmail.com>
* [minic] Add minic-runtime for linking without libc
The C generated by minic now depends on `minic-runtime.h`. There are two
versions of this, one that depends on libc and one that doesn't (i.e standalone).
The standalone runtime implements the minimal set of functions required for
the tests to compile and run.
The standalone runtime also contains a copy of
https://github.com/wingo/walloc, a small memory allocator that's
indended for use with WASM.
The benefit of using the standalone runtime is that the resulting
binaries are much smaller. For example the Nat example compiles to about
24k WASM binary with libc, the standalone version is 2.8k.
This commit adds a dependency on
https://hackage.haskell.org/package/file-embed for finding the path to
the minic-runtime directory in tests. It does not add any additional
transitive dependencies to the project.
* [minic] Translate TypeFunction to a C function pointer
* [minic] Add define macros for nullary functions
For example in the translation of:
inductive Nat {
zero : Nat;
suc : Nat → Nat;
};
The zero constructor is translated to a nullary C function:
static inline Nat_13_t * new_Zero_14_nullary()
and a macro:
\#define new_Zero_14 (new_Zero_14_nullary())
so that it can be referenced subsequently by the unapplied name
'new_Zero_14'.
A similar translation is applied to nullary top-level functions.
This means that uncurried higher-order functions now work.
* [chore] ormolu and hlint fixes
* [minic] Implement PR review suggestions
* [chore] Fix formatting
* [cbackend] Adds an AST for C
This should cover enough C to implement the microjuvix backend.
* [cbackend] Add C serializer using language-c library
We may decide to write our own serializer for the C AST but this
demonstrates that the C AST is sufficient at least.
* [cbackend] Declarations will always be typed
* [cbackend] Add CPP support to AST
* [cbackend] Rename some names for clarity
* [cbackend] Add translation of InductiveDef to C
* [cbackend] Add CLI for C backend
* [cbackend] Add stdbool.h to file header
* [cbackend] Allow Cpp and Verbatim code inline
* [cbackend] Add a newline after printing C
* [cbackend] Support foreign blocks
* [cbackend] Add support for axioms
* [cbackend] Remove code examples
* [cbackend] wip FunctionDef including Expressions
* [parser] Support esacping '}' inside a foreign block
* [cbackend] Add support for patterns in functions
* [cbackend] Add foreign C support to HelloWorld.mjuvix
* hlint fixes
* More hlint fixes not picked up by pre-commit
* [cbackend] Remove CompileStatement from MonoJuvix
* [cbackend] Add support for compile blocks
* [cbackend] Move compileInfo extraction to MonoJuvixResult
* [minihaskell] Fix compile block support
* [chore] Remove ununsed isBackendSupported function
* [chore] Remove unused imports
* [cbackend] Use a Reader for pattern bindings
* [cbackend] Fix compiler warnings
* [cbackend] Add support for nested patterns
* [cbackend] Use functions to instantiate argument names
* [cbackend] Add non-exhaustive pattern error message
* [cbackend] Adds test for c to WASM compile and execution
* [cbackend] Add links to test dependencies in quickstart
* [cbackend] Add test with inductive types and patterns
* [cbackend] Fix indentation
* [cbackend] Remove ExpressionTyped case
https://github.com/heliaxdev/minijuvix/issues/79
* [lexer] Fix lexing of \ inside a foreign block
* [cbackend] PR review fixes
* [chore] Remove unused import
* [cbackend] Rename CJuvix to MiniC
* [cbackend] Rename MonoJuvixToC to MonoJuvixToMiniC
* [cbackend] Add test for polymorphic function
* [cbackend] Add module for string literals