namespace factor
{
-factorvm *vm = new factorvm;
+factorvm *vm;
void factorvm::default_parameters(vm_parameters *p)
{
p->stack_traces = true;
}
-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;
return false;
}
-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);
}
}
-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 */
void factorvm::do_stage1_init()
{
fflush(stdout);
}
-void do_stage1_init()
-{
- return vm->do_stage1_init();
-}
-
void factorvm::init_factor(vm_parameters *p)
{
/* Kilobytes */
}
}
-VM_C_API void init_factor(vm_parameters *p)
-{
- return vm->init_factor(p);
-}
-
/* May allocate memory */
void factorvm::pass_args_to_factor(int argc, vm_char **argv)
{
userenv[ARGS_ENV] = args.elements.value();
}
-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();
unnest_stacks();
}
-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_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);
- init_parameters_from_args(&p,argc,argv);
- init_factor(&p);
- pass_args_to_factor(argc,argv);
- start_factor(&p);
-}
-
-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)
{
return callback(string);
}
-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_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_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)
+void factorvm::start_standalone_factor(int argc, vm_char **argv)
{
- return vm->factor_sleep(us);
+ vm_parameters p;
+ default_parameters(&p);
+ init_parameters_from_args(&p,argc,argv);
+ init_factor(&p);
+ pass_args_to_factor(argc,argv);
+ start_factor(&p);
}
struct startargs {
{
factorvm *newvm = new factorvm;
startargs *args = (startargs*) arg;
- vm_parameters p;
- newvm->default_parameters(&p);
- newvm->init_parameters_from_args(&p,args->argc, args->argv);
- newvm->init_factor(&p);
- newvm->pass_args_to_factor(args->argc,args->argv);
- newvm->start_factor(&p);
+ newvm->start_standalone_factor(args->argc, args->argv);
return 0;
}
+VM_C_API void start_standalone_factor(int argc, vm_char **argv)
+{
+ factorvm *newvm = new factorvm;
+ vm = newvm;
+ return newvm->start_standalone_factor(argc,argv);
+}
+
VM_C_API void start_standalone_factor_in_new_thread(int argc, vm_char **argv)
{
startargs *args = new startargs; // leaks startargs structure