The unpac monorepo manager self-hosting as a monorepo using unpac
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Implement caml_sys_modify_argv to match #2279

+20 -28
+1 -2
runtime/caml/startup_aux.h
··· 26 26 /* readonly after startup */ 27 27 struct caml_params { 28 28 const char* exe_name; 29 - const char* const* main_argv; 30 29 31 30 /* for meta.c */ 32 31 const char* section_table; ··· 68 67 If [pooling] is 0, [caml_stat_*] functions will not be backed by a pool. */ 69 68 extern int caml_startup_aux (int pooling); 70 69 71 - void caml_init_argv(const char* exe_name, char** main_argv); 70 + void caml_init_exe_name(const char* exe_name); 72 71 void caml_init_section_table(const char* section_table, 73 72 asize_t section_table_size); 74 73 value caml_maybe_print_stats (value v);
-2
runtime/caml/sys.h
··· 43 43 extern double caml_sys_time_unboxed(value); 44 44 CAMLextern value caml_sys_get_argv(value unit); 45 45 46 - extern char_os * caml_exe_name; 47 - 48 46 #ifdef __cplusplus 49 47 } 50 48 #endif
+1 -2
runtime/startup_aux.c
··· 178 178 shutdown_happened = 1; 179 179 } 180 180 181 - void caml_init_argv(const char* exe_name, char** main_argv) 181 + void caml_init_exe_name(const char* exe_name) 182 182 { 183 183 params.exe_name = exe_name; 184 - params.main_argv = (const char* const*)main_argv; 185 184 } 186 185 187 186 void caml_init_section_table(const char* section_table,
+5 -3
runtime/startup_byt.c
··· 323 323 break; 324 324 } 325 325 } 326 - caml_init_argv(exe_name, argv + pos); 327 326 328 327 /* Read the table of contents (section descriptors) */ 329 328 caml_read_section_descriptors(fd, &trail); ··· 352 351 caml_seek_section(fd, &trail, "DATA"); 353 352 chan = caml_open_descriptor_in(fd); 354 353 caml_modify_root(caml_global_data, caml_input_val(chan)); 355 - caml_minor_collection(); /* ensure all globals are in major heap */ 356 354 caml_close_channel(chan); /* this also closes fd */ 357 355 caml_stat_free(trail.section); 356 + /* Initialize system libraries */ 357 + caml_sys_init(exe_name, argv + pos); 358 + /* ensure all globals are in major heap */ 359 + caml_minor_collection(); 358 360 #ifdef _WIN32 359 361 /* Start a thread to handle signals */ 360 362 if (caml_secure_getenv(_T("CAMLSIGPIPE"))) ··· 410 412 exe_name = caml_executable_name(); 411 413 if (exe_name == NULL) exe_name = caml_search_exe_in_path(argv[0]); 412 414 Caml_state->external_raise = NULL; 413 - caml_init_argv(exe_name, argv); 415 + caml_sys_init(exe_name, argv); 414 416 if (caml_params->backtrace_enabled_init) caml_record_backtrace(Val_int(1)); 415 417 Caml_state->external_raise = NULL; 416 418 /* Initialize the interpreter */
+1 -1
runtime/startup_nat.c
··· 129 129 exe_name = proc_self_exe; 130 130 else 131 131 exe_name = caml_search_exe_in_path(exe_name); 132 - caml_init_argv(exe_name, argv); 132 + caml_sys_init(exe_name, argv); 133 133 if (sigsetjmp(caml_termination_jmpbuf.buf, 0)) { 134 134 if (caml_termination_hook != NULL) caml_termination_hook(NULL); 135 135 return Val_unit;
+12 -18
runtime/sys.c
··· 382 382 return val; 383 383 } 384 384 385 + static caml_root main_argv; 386 + 385 387 CAMLprim value caml_sys_get_argv(value unit) 386 388 { 387 389 CAMLparam0 (); /* unit is unused */ 388 - CAMLlocal3 (exe_name, argv, res); 390 + CAMLlocal2 (exe_name, res); 389 391 exe_name = caml_copy_string_of_os(caml_params->exe_name); 390 - argv = 391 - caml_alloc_array((void *)caml_copy_string_of_os, 392 - (char const **)caml_params->main_argv); 393 392 res = caml_alloc_small(2, 0); 394 - Field(res, 0) = exe_name; 395 - Field(res, 1) = argv; 393 + caml_initialize_field(res, 0, exe_name); 394 + caml_initialize_field(res, 1, caml_read_root(main_argv)); 396 395 CAMLreturn(res); 397 396 } 398 397 399 398 CAMLprim value caml_sys_argv(value unit) 400 399 { 401 - CAMLparam0 (); /* unit is unused */ 402 - CAMLlocal1 (argv); 403 - argv = 404 - caml_alloc_array((void *)caml_copy_string_of_os, 405 - (char const **)caml_params->main_argv); 406 - CAMLreturn(argv); 400 + return caml_read_root(main_argv); 407 401 } 408 402 409 403 CAMLprim value caml_sys_modify_argv(value new_argv) 410 404 { 411 - caml_failwith ("caml_sys_modify_argv: not implemented"); 405 + caml_modify_root(main_argv, new_argv); 412 406 return Val_unit; 413 407 } 414 408 ··· 419 413 420 414 void caml_sys_init(char_os * exe_name, char_os **argv) 421 415 { 422 - caml_failwith ("caml_sys_init: not implemented"); 423 - #if 0 416 + value v; 424 417 #ifdef _WIN32 425 418 /* Initialises the caml_win32_* globals on Windows with the version of 426 419 Windows which is running */ ··· 429 422 caml_setup_win32_terminal(); 430 423 #endif 431 424 #endif 432 - caml_exe_name = exe_name; 433 - caml_main_argv = argv; 434 - #endif 425 + caml_init_exe_name(exe_name); 426 + v = caml_alloc_array((void *)caml_copy_string_of_os, 427 + (char const **) argv); 428 + main_argv = caml_create_root(v); 435 429 } 436 430 437 431 #ifdef _WIN32