Commit Graph

4070 Commits

Author SHA1 Message Date
Louis Gesbert
0e05c75028 Internal typing: print the faulty program when debug is enabled
Since the typing error happened on generated code, it's hard to debug without
printing it.
2024-06-21 12:23:01 +02:00
Louis Gesbert
70c01749b2 Fix regression on internal typing errors reported as user errors 2024-06-21 12:23:01 +02:00
Louis Gesbert
712fc1e279 Support closure calls across modules
First I was disappointed that we couldn't convert closure environment properly
because of their opaque nature (native/interpreted conversion is based on the
Catala types) ; but after more thought it's actually unnecessary to convert them
at all since we are guaranteed that they can't be consumed outside of their
realm.
2024-06-21 12:23:01 +02:00
Louis Gesbert
d871b95447 Basic support for closure conversion in the OCaml backend 2024-06-21 12:23:01 +02:00
Louis Gesbert
dd3285bb66 Closure conversion: empty tuples are OK
it's much simpler to handle down the line if they have a uniform structure;
empty tuples are easily converted into unit types when translating to OCaml.
2024-06-21 12:23:01 +02:00
Louis Gesbert
676edef101 Closure conversion: handle externals like globals 2024-06-21 12:23:01 +02:00
Louis Gesbert
8881fee37f Allow catala ocaml --closure-conversion
it's probably not useful per se, but will be handy for debugging
2024-06-21 12:23:01 +02:00
Louis Gesbert
09bdc3b4da Printer: print closures as functions
This avoids differences in test results depending on wether closure conversion
is enabled or not: the functional values within structure are a different type
internally but with this patch they are printed the same.
2024-06-21 12:23:01 +02:00
Louis Gesbert
f5b0c7ca7d Closure conversion: quickfix to avoid name clashes
This will need a more serious solution, but this will allow us to continue for now.
2024-06-21 12:23:01 +02:00
Louis Gesbert
71fdaab262 Clerk reports: add -I flags to repro commands 2024-06-21 12:23:01 +02:00
Louis Gesbert
21cea5c968 Closure conversion fix
Support for manipulating toplevel functions as values was buggy, because the
recursion after eta-expansion would fall into the pattern for a `let..in` and
not do the expected transformation.

The patch explicitely builds the closure in that case, avoiding such issues with
recursion.
2024-06-21 12:23:01 +02:00
Louis Gesbert
23b196aace Types printer: use commas rather than * for tuples 2024-06-21 12:16:49 +02:00
Louis Gesbert
69e862a9d1 Clerk report: avoid Seq.Forced_twice error on incomplete test input 2024-06-21 12:16:49 +02:00
vbot
b11b9f4918
Refactor suggestions mechanism (#636) 2024-06-21 11:43:52 +02:00
vbot
c26d3fdf4a
Refactor and improve suggestions' pretty-printing 2024-06-21 11:11:53 +02:00
vbot
441dd54ec3
Refactor suggestions 2024-06-20 15:59:54 +02:00
vbot
41caecef63
Add verbose error test 2024-06-20 15:59:54 +02:00
vbot
435794d70a
Add error messages numbering (#634) 2024-06-20 15:41:55 +02:00
Denis Merigoux
c438aa1a68
Fix spurious clerk rebuilds (#635) 2024-06-20 15:41:06 +02:00
Louis Gesbert
b83f613dce Fix spurious clerk rebuilds
Hm apparently not everyone has an OCaml compiler that unconditionally generates
`cmt` files ;)
2024-06-20 14:41:57 +02:00
Louis Gesbert
ad15984d0b More space between multiple errors, no numbers if just one 2024-06-20 11:15:53 +02:00
vbot
a7094fe52d
Add messages numbering 2024-06-19 18:06:03 +02:00
Louis Gesbert
8c0d5f006f
Generate tests reports from 'clerk test' (#632) 2024-06-19 16:50:01 +02:00
Louis Gesbert
859a602c0b
Clerk reports: add verbosity flags
`--summary`
`--short`
`--failures` (default)
`--verbose`

(`--debug` also adds some detail, e.g. the commands to reproduce non-failing
tests, or the files without failures in the default mode)
2024-06-19 16:10:26 +02:00
Louis Gesbert
80400d838a
Messages: improve string padding processing 2024-06-19 16:10:26 +02:00
Louis Gesbert
45b0feaf20
Generate tests reports from 'clerk test'
This is a proper replacement for the previous shell-based placeholder hack.

Here is a summary:

- `clerk runtest` (normally run by ninja) is much extended:
  * besides generating the test@out file, it checks individual tests for success
    and can write a report file containing their status, and the positions for
    their (expected/current) outputs (this uses `Marshal`)
  * it now handles out-tests directly in addition to inline-tests, for which
    it generates the separate output file ; they are included in the report

- ninja is now tasked with building all the test reports (which shouldn't fail);
  for directories, individual reports are concatenated (as before).
  Removing intermediate report rules, and out-test rules means that the ninja
  file is much simplified.

- then, clerk takes back control, reads the final reports and formats them in a
  user-friendly way. Printing the reports may imply running `diff` internally.
  In particular, the commands to easily reproduce each test are provided.
  Resetting the test results if required is also done directly by clerk, at this
  stage.

A few switches are available to customise the output, but I am waiting for some
feedback before deciding what to make available from the CLI.

The `clerk report` command is available to manually explore test reports, but
normally the processing is done directly at the end of `clerk test` (i.e. ninja
will no longer call that command)
2024-06-19 16:10:26 +02:00
Louis Gesbert
b4a14bb102
Small code cleanups 2024-06-19 16:10:15 +02:00
vbot
0e88a375a2
Multiple typing errors reporting (#631) 2024-06-19 15:43:28 +02:00
vbot
9622ac4172
Add an option to stop on the first delayed error encountered 2024-06-19 14:52:32 +02:00
vbot
a2c023c24c
Add multiple typing error test 2024-06-19 14:52:32 +02:00
vbot
6d3239376f
Adapt existing tests output 2024-06-19 14:52:31 +02:00
vbot
e7beb0daad
Fix typing error message consistency 2024-06-19 14:52:31 +02:00
vbot
b2449f7b4c
Add multiple typing errors using delayed errors 2024-06-19 14:52:31 +02:00
Denis Merigoux
e96a72f6e3
Add PR policies in CONTRIBUTING.md (#633) 2024-06-19 14:15:43 +02:00
vbot
b7b978247d
Add PR policies in contributing 2024-06-19 12:02:51 +02:00
Louis Gesbert
1fe15eb22b
Multiple parsing errors reporting (#630) 2024-06-18 18:18:17 +02:00
vbot
62470d0db8
Replace failwith by internal errors 2024-06-18 16:28:20 +02:00
vbot
37945f189b
Add simple parsing tests 2024-06-17 15:39:56 +02:00
vbot
0b6eebd96b
Adapt existing test results 2024-06-17 15:38:41 +02:00
vbot
4a44698fe7
Add multiple parsing error support 2024-06-17 15:38:33 +02:00
vbot
421d281fc1
Add delayed errors in Message 2024-06-17 15:36:38 +02:00
Denis Merigoux
01b03b69a0
Fix error message typo (#629) 2024-06-05 16:07:17 +02:00
vbot
8c95971f1e
Fix error message typo 2024-06-05 15:19:12 +02:00
Denis Merigoux
a0c982a6c3
Typing across closure conversion (#627) 2024-06-03 09:39:17 +02:00
Denis Merigoux
5da46ff7be
Remove extra space 2024-06-03 09:06:57 +02:00
Louis Gesbert
4436d50011 C backend: To/FromClosureEnv are no-ops
Let them pass through.
2024-05-31 16:23:26 +02:00
Louis Gesbert
79e0dcecda Forbid reformatting in tests/
this seems to be confusing the CI with expected test outputs reformatted by
dune/ocamlformat.
2024-05-30 17:09:13 +02:00
Louis Gesbert
035dff35a3 Preserve and propagate types through closure conversion
some of the types (in particular, in hoisted closures) could not be
reconstructed afterwards. This properly propagates the types, including to
closure deconstruction time, giving additional insurance; and allowing
monomorphisation not to choke on the result.
2024-05-30 17:00:07 +02:00
Louis Gesbert
4acf321309 C backend: make error raising more concise 2024-05-30 16:59:55 +02:00
Louis Gesbert
eea30381a2 C backend: use switches for matches 2024-05-30 16:19:55 +02:00