Commit Graph

9 Commits

Author SHA1 Message Date
Benedikt Peetz c6dc9db2e8
docs(grammar.pdf): Regenerate with new landscape ebnf2pdf script 2024-05-20 15:33:50 +02:00
Benedikt Peetz 650d577b3b
fix(src/parsing): Remove the extra `error` attribute keyword
This keyword marked an enum as being an error, which is exactly what
`derive(Error)` already does. Thus this extra attribute keyword has been
removed and the `error` name has been used to rename the `msg` attribute
keyword, to be in-line with what `thiserror` does.
2024-05-20 15:33:49 +02:00
Benedikt Peetz 9a0720e5e9
fix(docs/generate_docs): Cd into the correct directory to make ebnf2pdf work 2024-03-27 10:21:50 +01:00
Benedikt Peetz 838181c116
docs(grammar.ebnf): Don't reimplement already specified rules 2024-03-27 10:21:06 +01:00
Benedikt Peetz 5ab2bbb8fd
chore(treewide): Update license header 2024-03-26 20:11:23 +01:00
Benedikt Peetz 2b4599592c
chore(treewide): Add or update license header 2024-03-26 19:58:24 +01:00
Benedikt Peetz 3646e4aee8
fix(scripts/renew_copyright_header): Correctly handle shebangs 2024-03-26 19:58:22 +01:00
Benedikt Peetz a653dec211
chore(docs/generate_docs): Add a `.sh` extension, so scripts recognize the ft 2024-03-26 19:58:19 +01:00
Benedikt Peetz eb7a901d09
refactor(treewide): Rework file structure in `src/macros`
This might be a big diff, but I _hope_ that it does not change much
functionally (hopefully it changes nothing generation specific).

What has changed?
-----------------
- I had to merge the three crates into one, to allow `macros` to impl
  functions on Types defined in `parser`.
- As mentioned in the point above, the conversion function are now
  inherent to the type they convert (i. e. `r#type.to_rust()` instead of
  `type_to_rust(r#type)`).
- The conversion function have been sorted, by what they convert to:
   - `to_rust()` converts a type to be used in rust *host* code.
   - `to_c()` converts a type to be used in c *host* code.
   - `to_auxiliary_c()` converts a type to be used in c *auxiliary*
     code.
- The top-most `generate` method of `TrixyConfig` now returns a
  `FileTree` instead of writing the files directly. The `FileTree` can
  still be materialize with the `materialize` method. But this change
  facilitates moving non-generation focused code out of the `generate`
  method.

What is the difference between _host_ and _auxiliary_ code?
-----------------------------------------------------------
Auxiliary code is always written in the language it is generated for. So
auxiliary code for c would be written in c (or at least in a subset of c),
as it represents c header files.
Host code is always written in rust. This is the code that is
responsible for implementing the actual ffi stuff. In our case these are
the `extern "C"` functions and the types, defined in trixy.
The rust host code is generating the native rust representations of
these types.
2024-03-26 17:35:21 +01:00