1
1
mirror of https://github.com/anoma/juvix.git synced 2024-12-15 01:52:11 +03:00
Commit Graph

697 Commits

Author SHA1 Message Date
Roman
1b18ee736e
Update link to Anoma discord (#264) 2022-07-11 18:26:45 +02:00
Jonathan Cubides
a7e34a124e
Improve handling of location information for different objs (#263)
* Add loc for literal and refactor a bit

* w.i.p making symbol a synonym for WithLoc Text

* Finish with symbol

* Update standard library
2022-07-11 17:00:38 +02:00
Jonathan Cubides
40154fcf94
Add issues and PR templates (#261)
* New issues templates

* Create pull_request_template.md

* Make pre-commit happy
2022-07-08 15:19:07 +02:00
Paul Cadman
46132ad187
Include open import statements when generating HTML (#260)
If an `open import` statement is encountered in the traversal of a
module and its dependencies and the referenced module is a top module
then we record it and recurse over the referenced module
2022-07-08 14:57:43 +02:00
Jonathan Cubides
3b3ea45da9
Rename MiniJuvix to Juvix (#259)
* 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
2022-07-08 13:59:45 +02:00
Paul Cadman
84732b281f
Updates tests to use the updated standard library (#253)
* Updates tests to use the updated stdlib

* Update to minijuvix-stdlib main
2022-07-07 15:35:56 +02:00
Łukasz Czajka
4d5aaa6b32
Enforce C99 standard in the generated C files (#252)
Add '-std=c99' to clang options
2022-07-07 12:13:03 +02:00
Paul Cadman
e557f24b1d
Restore mascot images to the minijuvix book (#250) 2022-07-06 14:23:13 +02:00
janmasrovira
9e6d43dd60
Allow jumping to another module in emacs (#249)
allow jumping to another module in emacs
2022-07-06 12:21:04 +01:00
Paul Cadman
f59df1f329
Restore Juvix mascot image to README (#248)
* Restore Juvix mascot to README

* Excludes assets/ from end-of-file-fixer commit hook
2022-07-06 11:49:58 +02:00
Paul Cadman
66d7d1beef
Add emacs option minijuvix-disable-embedded-stdlib (#247)
When developing the stdlib or any other project that doesn't use the
embedded standard library, the `--no-stdlib` flag must be set on the
compiler commands.

This PR adds a config option `minijuvix-disable-embedded-stdlib` to set
`--no-stdlib` for highlight and flycheck.
2022-07-05 17:55:19 +01:00
Łukasz Czajka
56e75e58f9
Remove the 'eval' and 'print' keywords (#214) (#242) 2022-07-05 16:17:02 +02:00
Łukasz Czajka
5a9dfe23bb
Remove the 'match' keyword (#238)
Remove the 'match' keyword (#215)

Since lambda-expressions will support pattern matching, explicit 'match' is redundant.
2022-07-05 16:09:13 +02:00
Paul Cadman
89ccef3da4
Throw error when reading a file that conflicts with embedded stdlib (#243)
* Throw error when reading a file that conflicts with stdlib

The Files effect first tries to read a file from the embedded stdlib. If
this succeeds and the file also exists in the project then an error is
thrown.

This error can be thrown either at the parsing stage, if the entrypoint
file conflicts with the standard library, or at the scoping stage if an
imported file conflicts.

* Fix module name in test file
2022-07-05 15:54:01 +02:00
Łukasz Czajka
dee2357214
Removes the minihaskell command from CLI (#244)
The command is internal now.
2022-07-05 15:39:45 +02:00
janmasrovira
228c031f55
Add option to disable minijuvix input method (#239) 2022-07-05 11:18:57 +02:00
janmasrovira
57edf1077b
Unify MicroJuvix ASTs representation of types and expressions (#188)
* improve and add Universe to MicroJuvix expressions

* continue with the refactor

* refactor typechecker and aritychecker

* refactor Abstract to Micro

* format

* refactor type calls builder and monojuvix translation

* complete abstract translation

* traversals have betrayed me

* fix monomorphisation and traversals

* update tests

* format

* rename Function2

* remove obsolete comments

* fix comment
2022-07-04 18:15:35 +02:00
Łukasz Czajka
292f2400d6
Merge pull request #236 from lukaszcz/main
Removed tests/positive/HelloWorld.mjuvix and specified clang version in the documentation
2022-07-04 18:04:21 +02:00
Łukasz Czajka
ff0e87d310
Merge branch 'main' into main 2022-07-04 17:53:17 +02:00
Łukasz Czajka
f1921bbf91
Fix a bug with the path to walloc.c (#237) 2022-07-04 17:53:06 +02:00
Łukasz Czajka
3ad678049b
Merge branch 'main' into main 2022-07-04 17:29:30 +02:00
Lukasz Czajka
7d330df947 remove HelloWorld test 2022-07-04 17:21:11 +02:00
janmasrovira
82d1f3ecf7
Filter symbol entries properly in the scoper (#234) 2022-07-04 16:40:10 +02:00
Lukasz Czajka
5cf65704c1 Removed tests/positive/HelloWorld.mjuvix and specified clang version in the documentation 2022-07-04 14:27:24 +02:00
Paul Cadman
109f3cf472
Use the ModulesCache for open statements in ScopedToAbstract pass (#224)
* Use the ModulesCache for `open` statements

* Refactor using suggestion from Jan
2022-07-03 16:16:46 +01:00
Paul Cadman
1c74c02c83
Perform ScopedToAbstract exactly once for each module (#223)
This commit introduces a cache of Abstract.TopModule that is queried for
each ImportStatement.

Before this change, `registerBuiltin` could be called multiple times for
a module, if it was imported multiple times.
2022-07-01 15:59:52 +01:00
Paul Cadman
d384bd9a89
README: Include --recursive in git clone command to fetch stdlib (#211)
docs: Include `--recursive` in git clone command to fetch stdlib
2022-06-30 18:11:04 +02:00
Jonathan Cubides
2e7d5b4ca2
Update project description v0.2.0 (#209)
* Update README.org

* update corresponding org file descr.

* make pre-commit happy

* cosmetics

* make pre-commit happy

* Github doesn't render correctly the todo list items
2022-06-30 16:33:23 +02:00
Paul Cadman
ed78f2636b
Embed standard library in the minijuvix binary (#210)
* 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
2022-06-30 11:31:08 +02:00
Jonathan Cubides
72b4c267a3
v0.2.0 (#198)
* Update package.yaml v0.2

* Update Changelog

* Update CLI version shellcheck to 0.2.0

Co-authored-by: Paul Cadman <git@paulcadman.dev>
2022-06-28 16:31:02 +02:00
janmasrovira
6eb16c74c1
Add support for built in types (#192)
* 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>
2022-06-28 13:31:31 +02:00
Paul Cadman
40287efabb
Support partial application and closure passing in C backend (#190)
* 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>
2022-06-28 10:25:43 +02:00
Jonathan Cubides
a78847843b
Fix: proper error handling for typechecker errors (#189)
* Fix: proper error handling for typechecker errors

* Improve error messages
2022-06-22 11:42:59 +02:00
Jonathan Cubides
9e817a62fa
Fix: Add check for constructor return types (#182)
* Checking indtype declar (return type)

* Add missing semicolon

* Fix typo
2022-06-21 17:53:35 +02:00
Jonathan Cubides
a749575734
Add minijuvix version info and date to HTML output (#186)
* Add minijuvix version info and date to HTML output

* Fix pre-commit
2022-06-21 17:03:22 +02:00
Jonathan Cubides
cc4566f4a6
Add an option to specify the path where to put the HTML output (#179)
* Add --output-dir option for html generation

* minor

* Add html test for output-dir flag with (no) recursive gen
2022-06-20 18:12:45 +02:00
janmasrovira
b43c16dadc
Upgrade to ghc-9.2.3 (#178)
* upgrade to ghc-9.2.3

* [ci] build with ghc 9.2.3

* Remove the gcc alises added by LLVM install

The GHC installer (initiated by stack in the test step) requires access
to GCC because it uses the GCC specific `--gc-sections` linker flag.

We remove the gcc -> clang symlink, our tests use the clang binary
directly and so do not require the symlink.

* Run GCC PATH fixup step on macOS only

* Fixes YAML quote marks

* Install GHC via stack setup before installing LLVM

Having both macOS LLVM and stock LLVM on the PATH causes the GHC
installation to fail.

Co-authored-by: Jonathan Cubides <jonathan.cubides@uib.no>
Co-authored-by: Paul Cadman <git@paulcadman.dev>
2022-06-20 12:53:31 +02:00
janmasrovira
6b6da9fd09
Use Abstract name in Abstract syntax and Micro/MonoJuvix (#181) 2022-06-20 09:19:57 +02:00
janmasrovira
94ea0da4a8
Remove ExpressionTyped from MicroJuvix language (#143) 2022-06-16 16:38:07 +02:00
Paul Cadman
45cda63307
Replace dead link with a link to the MiniJuvix book (#177) 2022-06-16 15:03:00 +01:00
Paul Cadman
21794365fa
Embed HTML assets in the minijuvix binary (#176) 2022-06-16 12:50:53 +01:00
janmasrovira
d8cc6bec04
Allow open import statements (#175) 2022-06-16 12:50:11 +02:00
janmasrovira
bcb6335c1d
Fix: Identifiers with a keyword prefix cannot be parsed (#171) 2022-06-16 10:13:13 +02:00
janmasrovira
c8f283b4f1
ignore implicit patterns and arguments in termination checking (#172) 2022-06-16 10:04:28 +02:00
janmasrovira
5fa3594bfa
remove TypeAny and adapt typechecking of literals (#173) 2022-06-16 09:54:43 +02:00
Paul Cadman
69a7bf4b95
Update validity predicate milestone example to 0.2 syntax (#167)
* Update VP example to new syntax

* Ignore html folders and include assets for html rendering

Co-authored-by: Jonathan Cubides <jonathan.cubides@uib.no>
2022-06-15 13:04:14 +02:00
janmasrovira
117020215c
Improve filepath equality (#170)
* improve filepath equality

* replace makeAbsolute by canonicalizePath
2022-06-15 12:38:24 +02:00
janmasrovira
b7a0a3668b
Allow holes to be refined into function types (#165)
* fix loop in the typechecker

* Allow refinement of holes into function types

* format

* extend positive test for implicit arguments

* fix signature
2022-06-15 12:01:59 +02:00
Paul Cadman
32ebe3a892
Fix links in documentation and update to new syntax (#163)
* [docs] Use minijuvix compile in tutorial

* [doc] Update PolyFungibleToken example in docs

* [docs] Fix links in summary

* [docs] Add a Installing dependencies

* [docs] Link to Installing dependencies docs from the README
2022-06-15 10:19:55 +02:00
janmasrovira
1779ae66e1
Update stdlib to work with version 0.2 (#160) 2022-06-14 13:34:17 +02:00