/* * the catskill transpiled-source runtime. * wraps the catskill source entry point in a normal c main function, * and provides some basic runtime startup and exit functionality. * * Copyright (c) 2025, Mel G. * * SPDX-License-Identifier: MPL-2.0 */ // catskill programs that use the runtime are expected to // provide a `main` which can have the following signatures: // * main = fun () {} // * main = fun (args [string]) {} // the transpiler will define the macro `CATSKILL_MAIN_TAKES_ARGS` // to indicate that the main function takes arguments. // exit codes are returned with the use of the `exit` function. #ifdef CATSKILL_MAIN_TAKES_ARGS void catskill_main(Array(struct String) args); #else void catskill_main(void); #endif // the main function that wraps the catskill main function // and provides the runtime startup and exit functionality. int main(int argc, char* argv[]) { #ifdef CATSKILL_MAIN_TAKES_ARGS Array(struct String) args = array_new(struct String); for (int i = 0; i < argc; i++) { struct String arg = string_from(argv[i]); array_push(&args, &arg); } catskill_main(args); ARRAY_FREE_ELEMENTS(struct String, args, string_free); array_free(&args); #else catskill_main(); (void)argc; (void)argv; #endif // on error catskill_main will call `exit` with a non-zero code. return 0; }