#include <stdio.h>
#include <stdlib.h>
#include "stoffellang.h"
int main(int argc, char** argv) {
// Source code to compile
const char* source =
"def add(a: int64, b: int64) -> int64:\n"
" return a + b\n"
"\n"
"main main() -> int64:\n"
" var result = add(10, 20)\n"
" print(\"Result computed\")\n"
" return result\n";
// Configure compiler
CCompilerOptions opts = {
.optimize = true,
.optimization_level = 2,
.print_ir = false
};
// Compile to binary
CBinaryResult* result = stoffel_compile_to_binary(
source,
"example.stfl",
opts
);
if (!result->success) {
fprintf(stderr, "Compilation failed:\n");
for (size_t i = 0; i < result->num_errors; i++) {
CCompilerError* err = &result->errors[i];
fprintf(stderr, "%s:%u:%u: %s\n",
err->filename,
err->line,
err->column,
err->message);
if (err->hint) {
fprintf(stderr, " Hint: %s\n", err->hint);
}
}
stoffel_free_binary_result(result);
return 1;
}
printf("Compilation successful!\n");
printf("Binary size: %zu bytes\n", result->binary_len);
// Write to file
FILE* f = fopen("example.stfbin", "wb");
if (f) {
fwrite(result->binary_data, 1, result->binary_len, f);
fclose(f);
printf("Written to example.stfbin\n");
}
stoffel_free_binary_result(result);
return 0;
}