the exit primitive is now called (exit) and exit calls shutdown hooks.
add a stop_factor function to the vm to allow calling the shutdown quotationdb4
parent
6b6e56a179
commit
110b310c54
|
@ -432,7 +432,7 @@ tuple
|
||||||
{ "set-datastack" "kernel" (( ds -- )) }
|
{ "set-datastack" "kernel" (( ds -- )) }
|
||||||
{ "set-retainstack" "kernel" (( rs -- )) }
|
{ "set-retainstack" "kernel" (( rs -- )) }
|
||||||
{ "set-callstack" "kernel" (( cs -- )) }
|
{ "set-callstack" "kernel" (( cs -- )) }
|
||||||
{ "exit" "system" (( n -- )) }
|
{ "(exit)" "system" (( n -- )) }
|
||||||
{ "data-room" "memory" (( -- cards decks generations )) }
|
{ "data-room" "memory" (( -- cards decks generations )) }
|
||||||
{ "code-room" "memory" (( -- code-total code-used code-free largest-free-block )) }
|
{ "code-room" "memory" (( -- code-total code-used code-free largest-free-block )) }
|
||||||
{ "micros" "system" (( -- us )) }
|
{ "micros" "system" (( -- us )) }
|
||||||
|
|
|
@ -47,7 +47,7 @@ load-help? off
|
||||||
"Cannot find " write write "." print
|
"Cannot find " write write "." print
|
||||||
"Please move " write image write " to the same directory as the Factor sources," print
|
"Please move " write image write " to the same directory as the Factor sources," print
|
||||||
"and try again." print
|
"and try again." print
|
||||||
1 exit
|
1 (exit)
|
||||||
] if
|
] if
|
||||||
] %
|
] %
|
||||||
] [ ] make
|
] [ ] make
|
||||||
|
|
|
@ -10,12 +10,12 @@ SYMBOL: shutdown-hooks
|
||||||
startup-hooks global [ drop V{ } clone ] cache drop
|
startup-hooks global [ drop V{ } clone ] cache drop
|
||||||
shutdown-hooks global [ drop V{ } clone ] cache drop
|
shutdown-hooks global [ drop V{ } clone ] cache drop
|
||||||
|
|
||||||
: do-hooks ( assoc -- )
|
: do-hooks ( symbol -- )
|
||||||
[ nip call( -- ) ] assoc-each ;
|
get [ nip call( -- ) ] assoc-each ;
|
||||||
|
|
||||||
: do-startup-hooks ( -- ) startup-hooks get do-hooks ;
|
: do-startup-hooks ( -- ) startup-hooks do-hooks ;
|
||||||
|
|
||||||
: do-shutdown-hooks ( -- ) shutdown-hooks get do-hooks ;
|
: do-shutdown-hooks ( -- ) shutdown-hooks do-hooks ;
|
||||||
|
|
||||||
: add-startup-hook ( quot name -- )
|
: add-startup-hook ( quot name -- )
|
||||||
startup-hooks get
|
startup-hooks get
|
||||||
|
@ -30,3 +30,9 @@ shutdown-hooks global [ drop V{ } clone ] cache drop
|
||||||
: boot-quot ( -- quot ) 20 getenv ;
|
: boot-quot ( -- quot ) 20 getenv ;
|
||||||
|
|
||||||
: set-boot-quot ( quot -- ) 20 setenv ;
|
: set-boot-quot ( quot -- ) 20 setenv ;
|
||||||
|
|
||||||
|
: shutdown-quot ( -- quot ) 67 getenv ;
|
||||||
|
|
||||||
|
: set-shutdown-quot ( quot -- ) 67 setenv ;
|
||||||
|
|
||||||
|
[ do-shutdown-hooks ] set-shutdown-quot
|
||||||
|
|
|
@ -56,3 +56,5 @@ PRIVATE>
|
||||||
: embedded? ( -- ? ) 15 getenv ;
|
: embedded? ( -- ? ) 15 getenv ;
|
||||||
|
|
||||||
: millis ( -- ms ) micros 1000 /i ;
|
: millis ( -- ms ) micros 1000 /i ;
|
||||||
|
|
||||||
|
: exit ( n -- ) do-shutdown-hooks (exit) ;
|
||||||
|
|
|
@ -185,6 +185,13 @@ void factor_vm::start_factor(vm_parameters *p)
|
||||||
unnest_stacks();
|
unnest_stacks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void factor_vm::stop_factor()
|
||||||
|
{
|
||||||
|
nest_stacks(NULL);
|
||||||
|
c_to_factor_toplevel(userenv[SHUTDOWN_ENV]);
|
||||||
|
unnest_stacks();
|
||||||
|
}
|
||||||
|
|
||||||
char *factor_vm::factor_eval_string(char *string)
|
char *factor_vm::factor_eval_string(char *string)
|
||||||
{
|
{
|
||||||
char *(*callback)(char *) = (char *(*)(char *))alien_offset(userenv[EVAL_CALLBACK_ENV]);
|
char *(*callback)(char *) = (char *(*)(char *))alien_offset(userenv[EVAL_CALLBACK_ENV]);
|
||||||
|
|
|
@ -90,6 +90,7 @@ enum special_object {
|
||||||
THREADS_ENV = 64,
|
THREADS_ENV = 64,
|
||||||
RUN_QUEUE_ENV = 65,
|
RUN_QUEUE_ENV = 65,
|
||||||
SLEEP_QUEUE_ENV = 66,
|
SLEEP_QUEUE_ENV = 66,
|
||||||
|
SHUTDOWN_ENV = 67,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FIRST_SAVE_ENV BOOT_ENV
|
#define FIRST_SAVE_ENV BOOT_ENV
|
||||||
|
|
|
@ -668,6 +668,7 @@ struct factor_vm
|
||||||
void init_factor(vm_parameters *p);
|
void init_factor(vm_parameters *p);
|
||||||
void pass_args_to_factor(int argc, vm_char **argv);
|
void pass_args_to_factor(int argc, vm_char **argv);
|
||||||
void start_factor(vm_parameters *p);
|
void start_factor(vm_parameters *p);
|
||||||
|
void stop_factor();
|
||||||
void start_embedded_factor(vm_parameters *p);
|
void start_embedded_factor(vm_parameters *p);
|
||||||
void start_standalone_factor(int argc, vm_char **argv);
|
void start_standalone_factor(int argc, vm_char **argv);
|
||||||
char *factor_eval_string(char *string);
|
char *factor_eval_string(char *string);
|
||||||
|
|
Loading…
Reference in New Issue