nitg: add class CodeWriter

thus extract the parts of files from the visitors

Signed-off-by: Jean Privat <jean@pryen.org>
nitg: new class CodeFile to regroup CodeWriter into autonomous files

Signed-off-by: Jean Privat <jean@pryen.org>
nitg: compile extern files separately

file names does not depends on the program name.

Signed-off-by: Jean Privat <jean@pryen.org>
ngall.sh: accepts options

Signed-off-by: Jean Privat <jean@pryen.org>
nitg: move add_extern to the visitor

So add_extern could be made contextual.

Signed-off-by: Jean Privat <jean@pryen.org>
nitg-s&e: remove many structs and some casts

In separated compilation, the module knows that a given class or
type will exist but the associated C struct cannot contains some global
information like a size of a table.

Thus, use abstract structs to statically type those.
The specific structs then become useless and can be removed.

Moreover, some C casts become irrelevant.

The commit also manage NativeArray instances in a specific way
in `compile_class_to_c`.

Signed-off-by: Jean Privat <jean@pryen.org>
nitg: write_and_make skips empty writers

Signed-off-by: Jean Privat <jean@pryen.org>
nitg: separate compiler writes class-related colors in the *.class.c files

Signed-off-by: Jean Privat <jean@pryen.org>
nitg:  global compiler do not write definition in the header

Signed-off-by: Jean Privat <jean@pryen.org>
nitg: the header writer is a full-declaration header file

Signed-off-by: Jean Privat <jean@pryen.org>
nitg: name of the header file is specific for each engine

Signed-off-by: Jean Privat <jean@pryen.org>
nitg: new `provide_declaration` and `require_declaration`

They allows a more separated C compilation since C-compiled modules only
depends on what they use. Therefore modifying unrelated thing in
super-modules should not triggers a new C-compilation of client modules.

Signed-off-by: Jean Privat <jean@pryen.org>
nitg: use`*_declaration` to include extern #incudes once

And only in files that request them.

Signed-off-by: Jean Privat <jean@pryen.org>
Merge branch 'sepcomp'