# Development Notes

## Test Wrappers

Meson provides a `--wrapper` flag to run tests through arbitrary programs, for instance:

    $ meson test --wrapper 'valgrind --error-exitcode=1 --leak-check=full'

Full output can be obtained by also passing `--verbose`.

If you encounter segfaults happening at random, catch them by repeating unit tests multiple times with GDB attached:

    $ meson test --repeat 1000000 --gdb

## Printing and Debugging

An AST printer for the [Dot Format](https://en.wikipedia.org/wiki/DOT_(graph_description_language)) is provided.
Together with [Graphviz](https://graphviz.gitlab.io/), ASTs can be visualised.

    $ ./mc_ast_to_dot ../test/integration/fib/fib.mc | xdot -

or

    $ ./mc_ast_to_dot ../test/integration/fib/fib.mc | dot -Tpng > fib_ast.png
    $ xdg-open fib_ast.png

## `mcc` Stub

A stub for the mC compiler is provided to ease infrastructure development.
It can already be used with the integration test runner.

    $ MCC=../scripts/mcc_stub ../scripts/run_integration_tests