Commit Graph

35 Commits

Author SHA1 Message Date
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
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
Louis Gesbert
403156b36e Computation and checking of module hashes
This includes a few separate changes:

- pass visibility information of declarations (depending on wether the
  declaration was in a ```catala-metadata block or not)

- add reasonable hash computation functions to discriminate the interfaces. In
  particular:
  * Uids have a `hash` function that depends on their string, but not on their
    actual uid (which is not stable between runs of the compiler) ; the existing
    `hash` function and its uses have been renamed to `id`.
  * The `Hash` module provides the tools to properly combine hashes, etc. While
    we rely on `Hashtbl.hash` for the atoms, we take care not to use it on any
    recursive structure (it relies on a bounded traversal).

- insert the hashes in the artefacts, and properly check and report those (for
  OCaml)

**Remains to do**:

- Record and check the hashes in the other backends

- Provide a way to get stable inline-test outputs in the presence of module
  hashes

- Provide a way to write external modules that don't break at every Catala
  update.
2024-05-28 11:43:50 +02:00
Louis Gesbert
cee8e57d02 More precise positions for operators throughout 2024-04-30 16:35:08 +02:00
Louis Gesbert
9d07015864 Unify runtime error handling
- Clearly distinguish Exceptions from Errors. The only catchable exception
  available in our AST is `EmptyError`, so the corresponding nodes are made less
  generic, and a node `FatalError` is added

- Runtime errors are defined as a specific type in the OCaml runtime, with a
  carrier exception and printing functions. These are used throughout, and
  consistently by the interpreter. They always carry a position, that can be
  converted to be printed with the fancy compiler location printer, or in a
  simpler way from the backends.

- All operators that might be subject to an error take a position as argument,
  in order to print an informative message without relying on backtraces from
  the backend
2024-04-26 18:31:26 +02:00
Louis Gesbert
97d007f1e7 Rename EmptyError to Empty
It's not an error! It happens in the normal control flow :)

This is to distinguish from the other runtime exceptions which are actually
fatal errors.
2024-04-25 14:39:15 +02:00
Louis Gesbert
20288bcb26 Protect the interpreter against exceptions from custom code 2024-04-15 14:13:33 +02:00
Louis Gesbert
98fc97a241 Rewriting message calls to use the new intf 2024-04-10 19:26:23 +02:00
Denis Merigoux
ad5dd6f2f6 Fix R compilation 2024-03-03 18:36:50 +01:00
Louis Gesbert
ba9fc85b84 Make exception output consistent across the interpreters 2024-02-26 14:56:43 +01:00
Louis Gesbert
97ae62384e Add externals to scalc, working test with Python backend 2024-02-26 14:56:43 +01:00
Denis Merigoux
b48fb0e223
Array compilation to C is OK 2024-01-26 20:15:32 +01:00
Denis Merigoux
3e807ae071
Remove warnings 2024-01-26 17:53:49 +01:00
Denis Merigoux
8a139f6a3c
Work on arrays 2024-01-22 16:49:58 +01:00
Denis Merigoux
50d3164f36
Restore C compilation 2024-01-17 17:26:41 +01:00
Denis Merigoux
9f03b6b931
Merge branch 'master' into c_backend
Some tests still failing...
2024-01-15 17:19:17 +01:00
Denis Merigoux
35f829cd65
Fix default optimisation 2023-12-18 14:42:58 +01:00
Denis Merigoux
1f91c16e43
Fix little bug 2023-12-13 16:40:22 +01:00
Denis Merigoux
5c49581207
Compiling simple program correctly to C 2023-12-13 11:07:08 +01:00
Denis Merigoux
827fcef469
More progress but enums also require no struct literals 2023-12-12 18:21:20 +01:00
Denis Merigoux
adfb9297d3
Progress on compiling 2023-12-12 16:25:02 +01:00
Denis Merigoux
d88f67bb2c
Progress 2023-12-12 16:08:40 +01:00
Denis Merigoux
7e221b29eb
Gets C89 struct initialization right 2023-12-11 17:28:32 +01:00
Denis Merigoux
37ab4187bd
Almost there with structs 2023-12-11 17:08:32 +01:00
Denis Merigoux
aca1d0e712
Fields in AST nodes 2023-12-11 15:59:47 +01:00
Denis Merigoux
3711026a4f
Beginning to compile 2023-12-11 14:47:09 +01:00
Denis Merigoux
4e8d2ef219
Beginning to compile specially HandleDefaultOp, Map, Fold, etc. for C 2023-12-11 11:31:51 +01:00
Denis Merigoux
4f7b678cd7
Making progress and fixing bugs 2023-12-11 11:31:51 +01:00
Denis Merigoux
192e50540b
Correctly compile function pointer types 2023-12-11 11:31:51 +01:00
Denis Merigoux
4d969e13c5
Enum type 2023-12-11 11:31:51 +01:00
Denis Merigoux
2eaac39bb1
Some progress 2023-12-11 11:31:51 +01:00
Denis Merigoux
ad3e140e88
Progress on C backend 2023-12-11 11:31:51 +01:00
Denis Merigoux
6652dc8df2
Add C backend command 2023-12-11 11:31:45 +01:00