DLLEXPORT void *jl_eval_string(char *str) { #ifdef COPY_STACKS int outside_task = (jl_root_task->stackbase == NULL); if (outside_task) { JL_SET_STACK_BASE; } #endif jl_value_t *r; JL_TRY { jl_value_t *ast = jl_parse_input_line(str); JL_GC_PUSH1(&ast); r = jl_toplevel_eval(ast); JL_GC_POP(); jl_exception_clear(); } JL_CATCH { //jl_show(jl_stderr_obj(), jl_exception_in_transit); r = NULL; } #ifdef COPY_STACKS if (outside_task) { jl_root_task->stackbase = NULL; } #endif return r; }
// First argument is the usr/lib directory where libjulia is, or NULL to guess. // if that doesn't work, try the full path to the "lib" directory that // contains lib/julia/sys.ji // Second argument is the path of a system image file (*.ji) relative to the // first argument path, or relative to the default julia home dir. The default // is something like ../lib/julia/sys.ji DLLEXPORT void jl_init_with_image(const char *julia_home_dir, const char *image_relative_path) { if (jl_is_initialized()) return; libsupport_init(); jl_options.julia_home = julia_home_dir; if (image_relative_path != NULL) jl_options.image_file = image_relative_path; julia_init(JL_IMAGE_JULIA_HOME); jl_exception_clear(); }
//try load julia DataArrays and DataFrames packages SEXP Julia_LoadDataArrayFrame() { jl_eval_string("using DataArrays,DataFrames"); if (jl_exception_occurred()) { jl_show(jl_stderr_obj(), jl_exception_occurred()); Rprintf("\n"); jl_exception_clear(); } else DataArrayFrameInited = 1; return R_NilValue; }
DLLEXPORT jl_value_t *jl_call1(jl_function_t *f, jl_value_t *a) { jl_value_t *v; JL_TRY { JL_GC_PUSH2(&f,&a); v = jl_apply(f, &a, 1); JL_GC_POP(); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
JL_DLLEXPORT jl_value_t *jl_call0(jl_function_t *f) { jl_value_t *v; JL_TRY { JL_GC_PUSH1(&f); v = jl_apply(&f, 1); JL_GC_POP(); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
JL_DLLEXPORT jl_value_t *jl_get_field(jl_value_t *o, const char *fld) { jl_value_t *v; JL_TRY { jl_value_t *s = (jl_value_t*)jl_symbol(fld); int i = jl_field_index((jl_datatype_t*)jl_typeof(o), (jl_sym_t*)s, 1); v = jl_get_nth_field(o, i); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
DLLEXPORT jl_value_t *jl_call3(jl_function_t *f, jl_value_t *a, jl_value_t *b, jl_value_t *c) { jl_value_t *v; JL_TRY { JL_GC_PUSH4(&f,&a,&b,&c); jl_value_t *args[3] = {a,b,c}; v = jl_apply(f, args, 3); JL_GC_POP(); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
DLLEXPORT jl_value_t *jl_call2(jl_function_t *f, jl_value_t *a, jl_value_t *b) { jl_value_t *v; JL_TRY { JL_GC_PUSH3(&f,&a,&b); jl_value_t *args[2] = {a,b}; v = jl_apply(f, args, 2); JL_GC_POP(); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
// First argument is the usr/lib directory where libjulia is, or NULL to guess. // if that doesn't work, try the full path to the "lib" directory that // contains lib/julia/sys.ji // Second argument is the path of a system image file (*.ji) relative to the // first argument path, or relative to the default julia home dir. The default // is something like ../lib/julia/sys.ji DLLEXPORT void jl_init_with_image(const char *julia_home_dir, const char *image_relative_path) { if (jl_is_initialized()) return; libsupport_init(); jl_compileropts.julia_home = julia_home_dir; if (image_relative_path != NULL) jl_compileropts.image_file = image_relative_path; julia_init(JL_IMAGE_JULIA_HOME); //TODO: these should be part of Multi.__init__() //currently, we have them here since we may not want them //getting unconditionally set from Base.__init__() jl_eval_string("Base.init_parallel()"); jl_eval_string("Base.init_bind_addr(ARGS)"); jl_eval_string("Base.init_head_sched()"); jl_exception_clear(); }
// First argument is the usr/lib directory where libjulia is, or NULL to guess. // if that doesn't work, try the full path to the "lib" directory that // contains lib/julia/sys.ji // Second argument is the path of a system image file (*.ji) relative to the // first argument path, or relative to the default julia home dir. The default // is something like ../lib/julia/sys.ji DLLEXPORT void jl_init_with_image(char *julia_home_dir, char *image_relative_path) { if (jl_is_initialized()) return; libsupport_init(); if (image_relative_path == NULL) image_relative_path = JL_SYSTEM_IMAGE_PATH; char *image_file = jl_locate_sysimg(julia_home_dir, image_relative_path); julia_init(image_file); jl_set_const(jl_core_module, jl_symbol("JULIA_HOME"), jl_cstr_to_string(julia_home)); jl_module_export(jl_core_module, jl_symbol("JULIA_HOME")); jl_eval_string("Base.early_init()"); jl_eval_string("Base.init_head_sched()"); jl_eval_string("Base.init_load_path()"); jl_exception_clear(); }
//first pass creat array then convert it to DataArray //second pass assign NA to element static jl_value_t *TransArrayToDataArray(jl_array_t *mArray, jl_array_t *mboolArray, const char *VarName) { char evalcmd[evalsize]; jl_set_global(jl_main_module, jl_symbol("TransVarName"), (jl_value_t *)mArray); jl_set_global(jl_main_module, jl_symbol("TransVarNamebool"), (jl_value_t *)mboolArray); snprintf(evalcmd, evalsize, "%s=DataArray(TransVarName,TransVarNamebool)", VarName); jl_value_t *ret = jl_eval_string(evalcmd); if (jl_exception_occurred()) { jl_show(jl_stderr_obj(), jl_exception_occurred()); Rprintf("\n"); jl_exception_clear(); return (jl_value_t *) jl_nothing; } return ret; }
DLLEXPORT void *jl_eval_string(const char *str) { jl_value_t *r; JL_TRY { jl_value_t *ast = jl_parse_input_line(str); JL_GC_PUSH1(&ast); r = jl_toplevel_eval(ast); JL_GC_POP(); jl_exception_clear(); } JL_CATCH { //jl_show(jl_stderr_obj(), jl_exception_in_transit); r = NULL; } return r; }
JL_DLLEXPORT jl_value_t *jl_call2(jl_function_t *f, jl_value_t *a, jl_value_t *b) { jl_value_t *v; JL_TRY { jl_value_t **argv; JL_GC_PUSHARGS(argv, 3); argv[0] = f; argv[1] = a; argv[2] = b; v = jl_apply(argv, 3); JL_GC_POP(); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
JL_DLLEXPORT jl_value_t *jl_call0(jl_function_t *f) { jl_value_t *v; JL_TRY { JL_GC_PUSH1(&f); size_t last_age = jl_get_ptls_states()->world_age; jl_get_ptls_states()->world_age = jl_get_world_counter(); v = jl_apply(&f, 1); jl_get_ptls_states()->world_age = last_age; JL_GC_POP(); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
JL_DLLEXPORT jl_value_t *jl_eval_string(const char *str) { jl_value_t *r; JL_TRY { char *filename = "none"; jl_value_t *ast = jl_parse_input_line(str, strlen(str), filename, strlen(filename)); JL_GC_PUSH1(&ast); r = jl_toplevel_eval(ast); JL_GC_POP(); jl_exception_clear(); } JL_CATCH { //jl_show(jl_stderr_obj(), jl_exception_in_transit); r = NULL; } return r; }
JL_DLLEXPORT jl_value_t *jl_call(jl_function_t *f, jl_value_t **args, int32_t nargs) { jl_value_t *v; JL_TRY { jl_value_t **argv; JL_GC_PUSHARGS(argv, nargs+1); argv[0] = (jl_value_t*)f; for(int i=1; i<nargs+1; i++) argv[i] = args[i-1]; v = jl_apply(argv, nargs+1); JL_GC_POP(); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
JL_DLLEXPORT jl_value_t *jl_call2(jl_function_t *f, jl_value_t *a, jl_value_t *b) { jl_value_t *v; JL_TRY { jl_value_t **argv; JL_GC_PUSHARGS(argv, 3); argv[0] = f; argv[1] = a; argv[2] = b; size_t last_age = jl_get_ptls_states()->world_age; jl_get_ptls_states()->world_age = jl_get_world_counter(); v = jl_apply(argv, 3); jl_get_ptls_states()->world_age = last_age; JL_GC_POP(); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
JL_DLLEXPORT jl_value_t *jl_eval_string(const char *str) { jl_value_t *r; JL_TRY { const char *filename = "none"; jl_value_t *ast = jl_parse_input_line(str, strlen(str), filename, strlen(filename)); JL_GC_PUSH1(&ast); size_t last_age = jl_get_ptls_states()->world_age; jl_get_ptls_states()->world_age = jl_get_world_counter(); r = jl_toplevel_eval_in(jl_main_module, ast); jl_get_ptls_states()->world_age = last_age; JL_GC_POP(); jl_exception_clear(); } JL_CATCH { r = NULL; } return r; }
//basically factor in R is 1-dim INTSXP and contain levels static jl_value_t *TransArrayToPoolDataArray(jl_array_t *mArray, jl_array_t *mpoolArray, size_t len, const char *VarName) { char evalcmd[evalsize]; jl_set_global(jl_main_module, jl_symbol("varpools"), (jl_value_t *)mpoolArray); jl_set_global(jl_main_module, jl_symbol("varrefs"), (jl_value_t *)mArray); snprintf(evalcmd, evalsize, "%s=PooledDataArray(ASCIIString,Uint32,%d)", VarName, len); jl_eval_string(evalcmd); snprintf(evalcmd, evalsize, "%s.pool=%s", VarName, "varpools"); jl_eval_string(evalcmd); snprintf(evalcmd, evalsize, "%s.refs=%s", VarName, "varrefs"); jl_eval_string(evalcmd); jl_value_t *ret = jl_eval_string((char *)VarName); if (jl_exception_occurred()) { jl_show(jl_stderr_obj(), jl_exception_occurred()); Rprintf("\n"); jl_exception_clear(); return (jl_value_t *) jl_nothing; } return ret; }
JL_DLLEXPORT jl_value_t *jl_call(jl_function_t *f, jl_value_t **args, int32_t nargs) { jl_value_t *v; JL_TRY { jl_value_t **argv; JL_GC_PUSHARGS(argv, nargs+1); argv[0] = (jl_value_t*)f; for(int i=1; i<nargs+1; i++) argv[i] = args[i-1]; size_t last_age = jl_get_ptls_states()->world_age; jl_get_ptls_states()->world_age = jl_get_world_counter(); v = jl_apply(argv, nargs+1); jl_get_ptls_states()->world_age = last_age; JL_GC_POP(); jl_exception_clear(); } JL_CATCH { v = NULL; } return v; }
static jl_value_t *R_Julia_MD_NA_DataFrame(SEXP Var, const char *VarName) { SEXP names = getAttrib(Var, R_NamesSymbol); size_t len = LENGTH(Var); if (TYPEOF(Var) != VECSXP || len == 0 || names == R_NilValue) return (jl_value_t *) jl_nothing; char evalcmd[evalsize]; char eltcmd[eltsize]; const char *onename; SEXP elt; for (size_t i = 0; i < len; i++) { snprintf(eltcmd, eltsize, "%sdfelt%d", VarName, i + 1); elt = VECTOR_ELT(Var, i); //vector is factor or not if (getAttrib(elt, R_LevelsSymbol) != R_NilValue) R_Julia_MD_NA_Factor(elt, eltcmd); else R_Julia_MD_NA(elt, eltcmd); onename = CHAR(STRING_ELT(names, i)); if (i == 0) snprintf(evalcmd, evalsize, "%s=DataFrame(%s =%s)", VarName, onename, eltcmd); else snprintf(evalcmd, evalsize, "%s[symbol(\"%s\")]=%s", VarName, onename, eltcmd); //Rprintf("%s\n",evalcmd); jl_eval_string(evalcmd); if (jl_exception_occurred()) { jl_show(jl_stderr_obj(), jl_exception_occurred()); Rprintf("\n"); jl_exception_clear(); return (jl_value_t *) jl_nothing; } } return (jl_value_t *) jl_nothing;; }
static NOINLINE int true_main(int argc, char *argv[]) { if (jl_core_module != NULL) { jl_array_t *args = (jl_array_t*)jl_get_global(jl_core_module, jl_symbol("ARGS")); if (args == NULL) { args = jl_alloc_cell_1d(0); JL_GC_PUSH1(&args); jl_set_const(jl_core_module, jl_symbol("ARGS"), (jl_value_t*)args); JL_GC_POP(); } assert(jl_array_len(args) == 0); jl_array_grow_end(args, argc); int i; for (i=0; i < argc; i++) { jl_value_t *s = (jl_value_t*)jl_cstr_to_string(argv[i]); jl_set_typeof(s,jl_utf8_string_type); jl_arrayset(args, s, i); } } jl_function_t *start_client = jl_base_module ? (jl_function_t*)jl_get_global(jl_base_module, jl_symbol("_start")) : NULL; if (start_client) { jl_apply(&start_client, 1); return 0; } // run program if specified, otherwise enter REPL if (argc > 0) { if (strcmp(argv[0], "-")) { return exec_program(argv[0]); } } ios_puts("WARNING: Base._start not defined, falling back to economy mode repl.\n", ios_stdout); if (!jl_errorexception_type) ios_puts("WARNING: jl_errorexception_type not defined; any errors will be fatal.\n", ios_stdout); while (!ios_eof(ios_stdin)) { char *volatile line = NULL; JL_TRY { ios_puts("\njulia> ", ios_stdout); ios_flush(ios_stdout); line = ios_readline(ios_stdin); jl_value_t *val = (jl_value_t*)jl_eval_string(line); if (jl_exception_occurred()) { jl_printf(JL_STDERR, "error during run:\n"); jl_static_show(JL_STDERR, jl_exception_in_transit); jl_exception_clear(); } else if (val) { jl_static_show(JL_STDOUT, val); } jl_printf(JL_STDOUT, "\n"); free(line); line = NULL; uv_run(jl_global_event_loop(),UV_RUN_NOWAIT); } JL_CATCH { if (line) { free(line); line = NULL; } jl_printf(JL_STDERR, "\nparser error:\n"); jl_static_show(JL_STDERR, jl_exception_in_transit); jl_printf(JL_STDERR, "\n"); jlbacktrace(); } } return 0; }