DLLEXPORT void jl_init_frontend(void) { fl_init(2*512*1024); value_t img = cvalue(iostreamtype, sizeof(ios_t)); ios_t *pi = value2c(ios_t*, img); ios_static_buffer(pi, flisp_system_image, sizeof(flisp_system_image)); if (fl_load_system_image(img)) { JL_PRINTF(JL_STDERR, "fatal error loading system image\n"); jl_exit(1); } fl_applyn(0, symbol_value(symbol("__init_globals"))); jvtype = define_opaque_type(symbol("julia_value"), sizeof(void*), NULL, NULL); assign_global_builtins(julia_flisp_ast_ext); }
int main(int argc, char *argv[]) { char fname_buf[1024]; fl_context_t *fl_ctx = &fl_global_ctx; fl_init(fl_ctx, 512*1024); fname_buf[0] = '\0'; value_t str = symbol_value(symbol(fl_ctx, "*install-dir*")); char *exedir = (char*)(str == UNBOUND ? NULL : cvalue_data(str)); if (exedir != NULL) { strcat(fname_buf, exedir); strcat(fname_buf, PATHSEPSTRING); } strcat(fname_buf, "flisp.boot"); value_t args[2]; fl_gc_handle(fl_ctx, &args[0]); fl_gc_handle(fl_ctx, &args[1]); FL_TRY_EXTERN(fl_ctx) { args[0] = cvalue_static_cstring(fl_ctx, fname_buf); args[1] = symbol(fl_ctx, ":read"); value_t f = fl_file(fl_ctx, &args[0], 2); fl_free_gc_handles(fl_ctx, 2); if (fl_load_system_image(fl_ctx, f)) return 1; (void)fl_applyn(fl_ctx, 1, symbol_value(symbol(fl_ctx, "__start")), argv_list(fl_ctx, argc, argv)); } FL_CATCH_EXTERN(fl_ctx) { ios_puts("fatal error:\n", ios_stderr); fl_print(fl_ctx, ios_stderr, fl_ctx->lasterror); ios_putc('\n', ios_stderr); return 1; } return 0; }