frontend.c (1209B)
1 #include <kit/frontend.h> 2 #include <setjmp.h> 3 #include <stdarg.h> 4 5 #include "core/core.h" 6 #include "core/metrics.h" 7 8 KitStatus kit_frontend_run(KitCompiler* c, KitFrontendRunFn fn, void* user) { 9 PanicFrame panic; 10 KitStatus rc; 11 if (!c || !fn) return KIT_INVALID; 12 compiler_panic_push(c, &panic); 13 if (setjmp(panic.env)) { 14 compiler_run_cleanups(c); 15 compiler_panic_pop(c, &panic); 16 return KIT_ERR; 17 } 18 rc = fn(c, user); 19 compiler_panic_pop(c, &panic); 20 return rc; 21 } 22 23 void kit_frontend_metrics_scope_begin(KitCompiler* c, const char* name) { 24 metrics_scope_begin((Compiler*)c, name); 25 } 26 27 void kit_frontend_metrics_scope_end(KitCompiler* c, const char* name) { 28 metrics_scope_end((Compiler*)c, name); 29 } 30 31 void kit_frontend_metrics_count(KitCompiler* c, const char* name, 32 uint64_t value) { 33 metrics_count((Compiler*)c, name, (u64)value); 34 } 35 36 void kit_frontend_fatal(KitCompiler* c, KitSrcLoc loc, const char* fmt, ...) { 37 va_list ap; 38 va_start(ap, fmt); 39 kit_frontend_vfatal(c, loc, fmt, ap); 40 } 41 42 void kit_frontend_vfatal(KitCompiler* c, KitSrcLoc loc, const char* fmt, 43 va_list ap) { 44 compiler_panicv((Compiler*)c, loc, fmt, ap); 45 }