Louis Gesbert
fc531777c0
Rework and normalise the Marked
interface
...
The module is renamed to `Mark`, and functions renamed to avoid redundancy:
`Marked.mark` is now `Mark.add`
`Marked.unmark` is now `Mark.remove`
`Marked.map_under_mark` is now simply `Mark.map`
etc.
`Marked.same_mark_as` is replaced by `Mark.copy`, but with the arguments
swapped (which seemed more convenient throughout)
Since a type `Mark.t` would indicate a mark, and to avoid confusion, the type
`Marked.t` is renamed to `Mark.ed` as a shorthand for `Mark.marked` ; this part
can easily be removed if that's too much quirkiness.
2023-05-17 17:37:00 +02:00
Louis Gesbert
558fcb6fef
Build: remove unnecessary ppx on dcalc, lcalc
...
we only use `visitors` for positions on the surface AST
2023-05-17 14:08:32 +02:00
Louis Gesbert
ba52aae401
Cleanup: definitions.ml
is not for values
...
A module without mli is ok as long as it only contains types
Here we already stretch it a bit with some functor applications, but having
toplevel values defeats the expectation that you can safely `open` this module.
2023-05-17 13:26:47 +02:00
Louis Gesbert
b1955bd9d4
Don't use a debug printing function for OCaml output
2023-05-02 16:48:01 +02:00
Louis Gesbert
5e26c5c83d
Yet more printer improvements
...
- Fix the printer for scopes
- Improve the printer for struct types
- Remove `Print.expr'`. Use `Expr.format` as the function with simplified arguments instead.
2023-05-02 16:33:23 +02:00
Louis Gesbert
83e7a845fe
Cleanup expr printer interface
...
- `Print.expr` no longer needs the context
- This removes the need for `expr ~debug` + `expr_debug` ;
use `Print.expr` for normal (non-debug) output,
and `Print.expr' ?debug ()` for possibly debug output.
- This improves consistency of debug expr output in many places
- Prints simplified operators (without type suffix) in non-verbose mode
(this patch also fixes some cases of `Expr.skip_wrappers` and leverages the
binder equality provided by Bindlib)
2023-05-02 13:32:16 +02:00
adelaett
ba6fb5d405
fix documentation
2023-04-24 14:00:12 +02:00
Denis Merigoux
32ee2a0c72
Various small fixes to resolve conversations
2023-04-21 14:54:07 +02:00
Denis Merigoux
22b24a8634
Fusion of all optimizations done correctly
2023-04-21 12:32:09 +02:00
Denis Merigoux
067c7b9155
Merge branch 'master' into adelaett-withoutexceptionsfix
2023-04-21 10:55:36 +02:00
Denis Merigoux
107ff95dc4
Remove dependency on ppx_expect and use alcotest instead
2023-04-21 10:37:31 +02:00
Denis Merigoux
f9a6644da3
Cleanliness and aesthetics
2023-04-18 15:45:30 +02:00
Denis Merigoux
0b0451862e
Correct temp variable names
2023-04-18 14:29:22 +02:00
Denis Merigoux
732e058712
Fix typos
2023-04-18 11:42:33 +02:00
adelaett
b642bdbc54
update optimizations
2023-04-14 17:16:01 +02:00
adelaett
cffcdd7cf9
move monad_* to lcalc/Ast.ml
2023-04-14 14:36:28 +02:00
adelaett
02eeb4ad11
Include Bindlib_ext to Expr.Box
2023-04-14 14:18:28 +02:00
adelaett
ddeaa67ff7
Expr.eid -> Expr.fun_id
2023-04-14 14:07:51 +02:00
adelaett
920bd29835
documentation and deadcode elim
2023-04-14 13:59:06 +02:00
adelaett
f21cb1ff69
adding comment
2023-04-14 12:18:28 +02:00
adelaett
6b6272b0f2
adding an nicer error message
2023-04-14 12:16:09 +02:00
adelaett
123ae9e4c1
rename functions to make the code more readable
2023-04-14 12:15:16 +02:00
adelaett
0c357d2972
adding typing information for monad_* functions
2023-04-14 12:13:33 +02:00
adelaett
167ec9189f
adding a todo related to handle_default and handle_default_opt for
...
the closure conversion.
2023-04-14 12:02:03 +02:00
adelaett
5833608179
deadcode elim
2023-04-14 10:56:15 +02:00
adelaett
a53bc27d23
documentation
2023-04-14 10:48:31 +02:00
adelaett
cc66023e51
Thunking justifications and conclusion in avoid_translation pass
2023-04-12 10:58:21 +02:00
adelaett
49e9846386
fix a bug in the translation
2023-04-11 16:14:25 +02:00
adelaett
0cfc446455
implementing the behavior of handle_exceptions_opt for the lcalc interpretor
2023-04-11 14:09:57 +02:00
adelaett
3e35d4b826
Merge branch 'master' into adelaett-withoutexceptionsfix
2023-04-11 11:49:22 +02:00
adelaett
0e8eed7ee1
program equality function
2023-04-07 12:10:08 +02:00
adelaett
6c7ac061d4
fix identation and use new formatting functions as default
2023-04-07 11:57:14 +02:00
adelaett
12d85570e8
fix printing boxes & merge issues
2023-04-07 10:51:21 +02:00
adelaett
9b63743c2f
documentation
2023-04-07 10:49:48 +02:00
alain
ec40de83fc
Merge branch 'master' into adelaett-withoutexceptionsfix
2023-04-06 13:57:22 +02:00
adelaett
7ebfb2e66a
typo
2023-04-06 13:42:40 +02:00
Louis Gesbert
0098f00512
Yet some more small improvements to the AST encoding
2023-04-05 10:32:58 +02:00
adelaett
82992e9858
documentation
2023-04-04 17:02:26 +02:00
adelaett
60f8c229d5
fix to_ocaml new handledefault and handledefault opt operator
2023-04-04 15:57:33 +02:00
adelaett
06f2e56c74
fix closure conversion non-existent variable
2023-04-04 15:57:11 +02:00
adelaett
8ef3db005f
clean deadcode
2023-04-04 15:56:49 +02:00
adelaett
b6cf552913
lcalc optimization documentation
2023-04-04 15:17:59 +02:00
adelaett
685785eaa3
adding assert_closed function
2023-04-03 11:20:19 +02:00
adelaett
e9ead93f3f
fix typing errors
2023-03-31 16:01:05 +02:00
adelaett
573df8416f
Merge branch 'master' into adelaett-withoutexceptionsfix
2023-03-31 15:52:06 +02:00
adelaett
272dc9e8b3
optimization reorg
2023-03-31 15:37:18 +02:00
adelaett
beeecce091
correcting filter definition
2023-03-31 15:31:43 +02:00
adelaett
69ac8ca929
implementation of fold, reduce, map & filter in without exceptions
...
Work in progress: not working for filter & map
2023-03-31 11:24:43 +02:00
Louis Gesbert
038861a52c
Generic mapping function across different ASTs
...
Used in lcalc/compile_with_exceptions only at the moment
2023-03-30 18:57:51 +02:00
Louis Gesbert
1208744c6b
EmptyError is no longer a literal
...
it's much simpler to handle it as an AST node, as that makes the literal
identical across all AST passes.
2023-03-30 18:54:50 +02:00
Louis Gesbert
4973c74410
Remove date rounding mode from Operator.translate
2023-03-30 15:33:00 +02:00
adelaett
61830bc348
fixing runtime merge errors
2023-03-30 11:02:35 +02:00
adelaett
6dee3874cc
Merge branch 'master' into adelaett-withoutexceptionsfix
2023-03-30 10:50:32 +02:00
adelaett
7174480153
start of the translation of fold
2023-03-30 10:39:23 +02:00
adelaett
3e8aae99fe
typo in the traslation of lets
2023-03-30 10:39:07 +02:00
adelaett
729d634744
fixing translation of arrays
2023-03-30 10:38:54 +02:00
adelaett
df740eed05
fixing with-exceptions
2023-03-28 10:07:01 +02:00
adelaett
f3abc23c32
fixings tests (90% atm)
2023-03-28 09:54:44 +02:00
adelaett
c3d9ee299f
without exception: removing thunking
2023-03-28 09:54:04 +02:00
adelaett
9806eb7e0f
format for program
2023-03-23 13:46:17 +01:00
adelaett
72ceafd67c
scopes does not return optional terms
2023-03-23 10:45:44 +01:00
adelaett
78c0842dc6
optimization tests
2023-03-21 14:31:45 +01:00
Denis Merigoux
aa8ab3be3d
Merge branch 'master' into c_backend
2023-03-21 12:14:10 +01:00
adelaett
d2da1c3e43
advancing
2023-03-17 17:24:51 +01:00
adelaett
7c39ad953b
fix iota optmi
2023-03-17 17:23:10 +01:00
adelaett
61ad00f277
unit test infrastructure for optimization
2023-03-17 17:19:50 +01:00
adelaett
850a1fdb56
more optimization on fold
2023-03-17 11:34:52 +01:00
adelaett
82af9e8305
unfolding more bugs
2023-03-16 17:14:33 +01:00
Raphaël Monat
7021c41f93
Add date rounding option within scopes
2023-03-16 16:55:55 +01:00
adelaett
26551434f2
correct monadic bind & map implementation
2023-03-14 18:36:05 +01:00
adelaett
366a0d952b
introducing new operators for handleing defaults
2023-03-14 18:30:58 +01:00
adelaett
4d3b021eef
finished the implementation, but a few issues are missing
2023-03-13 16:51:06 +01:00
adelaett
b891114b72
tentative at a fully monadic encoding
2023-03-10 15:35:03 +01:00
adelaett
6c0e04942f
corrected iota optimization
2023-03-06 16:00:41 +01:00
adelaett
78f121b44a
before any issues with mark on code_item
2023-03-03 11:39:55 +01:00
adelaett
73bd4b4064
finished to detect unpure subexpressions
2023-02-28 14:26:48 +01:00
adelaett
001a8205af
?
2023-02-28 08:39:30 +01:00
adelaett
6c3f0af9e0
invariant assertion checking
2023-02-27 11:20:59 +01:00
adelaett
9a68563488
assert_internal & skeleton for the static pass
2023-02-27 11:20:59 +01:00
adelaett
8784ae6175
unpure detection in expressions
2023-02-27 11:20:59 +01:00
adelaett
0262019d45
make app
2023-02-27 11:20:59 +01:00
adelaett
363ef39704
let case
2023-02-27 11:20:59 +01:00
adelaett
2a222f0aab
changed nix dependency from ocamlformat 24.1 to 21.0
2023-02-27 11:20:59 +01:00
adelaett
e765ee8a0c
requesting to have a typed tree
2023-02-27 11:20:59 +01:00
adelaett
44ce5a636b
fix tentative for functions applications
2023-02-27 11:20:59 +01:00
adelaett
5b33b39636
new helpers functions in lcalc's ast
2023-02-27 11:20:59 +01:00
adelaett
839a7ffd83
finished refactoring
2023-02-20 17:58:29 +01:00
Louis Gesbert
72cf477dd9
Toplevel definitions: fixes following review
...
Thanks @denismerigoux!
2023-02-15 12:40:15 +01:00
Louis Gesbert
c3af0b4097
Toplevel definitions: branch cleanup
...
- fix remaining warnings (mostly unused arguments)
- renamings throughout for consistency and clarity
2023-02-13 18:02:09 +01:00
Louis Gesbert
9b0c7583ec
Add top-level definitions
...
Only handled until before scalc at the moment.
2023-02-13 11:43:49 +01:00
Louis Gesbert
0540cd31fe
Allow ETuple, ETupleAccess on all ASTs
...
they used to be only allowed on lcalc
2023-02-13 10:51:42 +01:00
Denis Merigoux
7702949401
Better printing
2023-02-08 16:03:23 +01:00
Denis Merigoux
c78a004b53
Leave everything unresolved for now
2023-02-08 16:00:53 +01:00
Denis Merigoux
7d6abf36b2
Taking into account that closures can be input and output of scopes
2023-02-08 16:00:21 +01:00
Denis Merigoux
3577507ee9
Switch from closure-passing to environment-passing closure conversion
2023-02-08 16:00:21 +01:00
Denis Merigoux
38d5ef9715
Small improvement
2023-02-08 15:59:51 +01:00
Denis Merigoux
4521d05839
Starting to implement hoisting
2023-02-08 15:59:51 +01:00
Denis Merigoux
83e9e83909
Progressing [skip ci]
...
Testing with dune exec catala -- Lcalc -s S tests/test_func/good/closure_conversion.catala_en --avoid_exceptions -O --closure_conversion
2023-02-08 15:59:51 +01:00
Louis Gesbert
fea01cfe4c
Add overloaded operators for the common operations
...
This uses the same disambiguation mechanism put in place for
structures, calling the typer on individual rules on the desugared AST
to propagate types, in order to resolve ambiguous operators like `+`
to their strongly typed counterparts (`+!`, `+.`, `+$`, `+@`, `+$`) in
the translation to scopelang.
The patch includes some normalisation of the definition of all the
operators, and classifies them based on their typing policy instead of
their arity. It also adds a little more flexibility:
- a couple new operators, like `-` on date and duration
- optional type annotation on some aggregation constructions
The `Shared_ast` lib is also lightly restructured, with the `Expr`
module split into `Type`, `Operator` and `Expr`.
2022-12-13 11:55:24 +01:00
Louis Gesbert
3f2aa19e97
Add ambiguous StructAccess for desugared
...
to be resolved in scopelang
2022-11-28 16:38:09 +01:00