From f88eaa0df3577e72210ee285363c6dc7c89cb9d2 Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Mon, 17 Aug 2009 21:37:09 +0100 Subject: [PATCH] moved factor.cpp functions to vm --- vm/factor.cpp | 91 +++++++++++++++++++++++++++++++++++++++++++-------- vm/vm.hpp | 15 +++++++++ 2 files changed, 93 insertions(+), 13 deletions(-) diff --git a/vm/factor.cpp b/vm/factor.cpp index 5dd88402bc..6a7180ccd7 100755 --- a/vm/factor.cpp +++ b/vm/factor.cpp @@ -5,7 +5,7 @@ namespace factor factorvm *vm; -VM_C_API void default_parameters(vm_parameters *p) +void factorvm::default_parameters(vm_parameters *p) { p->image_path = NULL; @@ -45,7 +45,12 @@ VM_C_API void default_parameters(vm_parameters *p) p->stack_traces = true; } -static bool factor_arg(const vm_char* str, const vm_char* arg, cell* value) +VM_C_API void default_parameters(vm_parameters *p) +{ + return vm->default_parameters(p); +} + +bool factorvm::factor_arg(const vm_char* str, const vm_char* arg, cell* value) { int val; if(SSCANF(str,arg,&val) > 0) @@ -57,7 +62,12 @@ static bool factor_arg(const vm_char* str, const vm_char* arg, cell* value) return false; } -VM_C_API void init_parameters_from_args(vm_parameters *p, int argc, vm_char **argv) +bool factor_arg(const vm_char* str, const vm_char* arg, cell* value) +{ + return vm->factor_arg(str,arg,value); +} + +void factorvm::init_parameters_from_args(vm_parameters *p, int argc, vm_char **argv) { default_parameters(p); p->executable_path = argv[0]; @@ -82,8 +92,13 @@ VM_C_API void init_parameters_from_args(vm_parameters *p, int argc, vm_char **ar } } +VM_C_API void init_parameters_from_args(vm_parameters *p, int argc, vm_char **argv) +{ + return vm->init_parameters_from_args(p,argc,argv); +} + /* Do some initialization that we do once only */ -static void do_stage1_init() +void factorvm::do_stage1_init() { print_string("*** Stage 2 early init... "); fflush(stdout); @@ -95,7 +110,12 @@ static void do_stage1_init() fflush(stdout); } -VM_C_API void init_factor(vm_parameters *p) +void do_stage1_init() +{ + return vm->do_stage1_init(); +} + +void factorvm::init_factor(vm_parameters *p) { vm = new factorvm; /* Kilobytes */ @@ -152,8 +172,13 @@ VM_C_API void init_factor(vm_parameters *p) } } +VM_C_API void init_factor(vm_parameters *p) +{ + return vm->init_factor(p); +} + /* May allocate memory */ -VM_C_API void pass_args_to_factor(int argc, vm_char **argv) +void factorvm::pass_args_to_factor(int argc, vm_char **argv) { growable_array args; int i; @@ -165,7 +190,12 @@ VM_C_API void pass_args_to_factor(int argc, vm_char **argv) userenv[ARGS_ENV] = args.elements.value(); } -static void start_factor(vm_parameters *p) +VM_C_API void pass_args_to_factor(int argc, vm_char **argv) +{ + return vm->pass_args_to_factor(argc,argv); +} + +void factorvm::start_factor(vm_parameters *p) { if(p->fep) factorbug(); @@ -174,13 +204,23 @@ static void start_factor(vm_parameters *p) unnest_stacks(); } -VM_C_API void start_embedded_factor(vm_parameters *p) +void start_factor(vm_parameters *p) +{ + return vm->start_factor(p); +} + +void factorvm::start_embedded_factor(vm_parameters *p) { userenv[EMBEDDED_ENV] = T; start_factor(p); } -VM_C_API void start_standalone_factor(int argc, vm_char **argv) +VM_C_API void start_embedded_factor(vm_parameters *p) +{ + return vm->start_embedded_factor(p); +} + +void factorvm::start_standalone_factor(int argc, vm_char **argv) { vm_parameters p; default_parameters(&p); @@ -190,27 +230,52 @@ VM_C_API void start_standalone_factor(int argc, vm_char **argv) start_factor(&p); } -VM_C_API char *factor_eval_string(char *string) +VM_C_API void start_standalone_factor(int argc, vm_char **argv) +{ + return vm->start_standalone_factor(argc,argv); +} + +char *factorvm::factor_eval_string(char *string) { char *(*callback)(char *) = (char *(*)(char *))alien_offset(userenv[EVAL_CALLBACK_ENV]); return callback(string); } -VM_C_API void factor_eval_free(char *result) +VM_C_API char *factor_eval_string(char *string) +{ + return vm->factor_eval_string(string); +} + +void factorvm::factor_eval_free(char *result) { free(result); } -VM_C_API void factor_yield() +VM_C_API void factor_eval_free(char *result) +{ + return vm->factor_eval_free(result); +} + +void factorvm::factor_yield() { void (*callback)() = (void (*)())alien_offset(userenv[YIELD_CALLBACK_ENV]); callback(); } -VM_C_API void factor_sleep(long us) +VM_C_API void factor_yield() +{ + return vm->factor_yield(); +} + +void factorvm::factor_sleep(long us) { void (*callback)(long) = (void (*)(long))alien_offset(userenv[SLEEP_CALLBACK_ENV]); callback(us); } +VM_C_API void factor_sleep(long us) +{ + return vm->factor_sleep(us); +} + } diff --git a/vm/vm.hpp b/vm/vm.hpp index 7b23f07ba8..2c4cf21144 100644 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -497,6 +497,21 @@ struct factorvm { void *inline_cache_miss(cell return_address); inline void vmprim_reset_inline_cache_stats(); inline void vmprim_inline_cache_stats(); + + //factor + void default_parameters(vm_parameters *p); + bool factor_arg(const vm_char* str, const vm_char* arg, cell* value); + void init_parameters_from_args(vm_parameters *p, int argc, vm_char **argv); + void do_stage1_init(); + void init_factor(vm_parameters *p); + void pass_args_to_factor(int argc, vm_char **argv); + void start_factor(vm_parameters *p); + void start_embedded_factor(vm_parameters *p); + void start_standalone_factor(int argc, vm_char **argv); + char *factor_eval_string(char *string); + void factor_eval_free(char *result); + void factor_yield(); + void factor_sleep(long us); // next method here: