pic_return -> pic_values
This commit is contained in:
parent
637047fa83
commit
e7953146c3
|
@ -18,13 +18,13 @@ pic_number_floor2(pic_state *pic)
|
||||||
? i / j
|
? i / j
|
||||||
: (i / j) - 1;
|
: (i / j) - 1;
|
||||||
|
|
||||||
return pic_return(pic, 2, pic_int_value(pic, k), pic_int_value(pic, i - k * j));
|
return pic_values(pic, 2, pic_int_value(pic, k), pic_int_value(pic, i - k * j));
|
||||||
} else {
|
} else {
|
||||||
double q, r;
|
double q, r;
|
||||||
|
|
||||||
q = floor((double)i/j);
|
q = floor((double)i/j);
|
||||||
r = i - j * q;
|
r = i - j * q;
|
||||||
return pic_return(pic, 2, pic_float_value(pic, q), pic_float_value(pic, r));
|
return pic_values(pic, 2, pic_float_value(pic, q), pic_float_value(pic, r));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,14 +37,14 @@ pic_number_trunc2(pic_state *pic)
|
||||||
pic_get_args(pic, "II", &i, &e1, &j, &e2);
|
pic_get_args(pic, "II", &i, &e1, &j, &e2);
|
||||||
|
|
||||||
if (e1 && e2) {
|
if (e1 && e2) {
|
||||||
return pic_return(pic, 2, pic_int_value(pic, i/j), pic_int_value(pic, i - (i/j) * j));
|
return pic_values(pic, 2, pic_int_value(pic, i/j), pic_int_value(pic, i - (i/j) * j));
|
||||||
} else {
|
} else {
|
||||||
double q, r;
|
double q, r;
|
||||||
|
|
||||||
q = trunc((double)i/j);
|
q = trunc((double)i/j);
|
||||||
r = i - j * q;
|
r = i - j * q;
|
||||||
|
|
||||||
return pic_return(pic, 2, pic_float_value(pic, q), pic_float_value(pic, r));
|
return pic_values(pic, 2, pic_float_value(pic, q), pic_float_value(pic, r));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,7 @@ pic_regexp_regexp_match(pic_state *pic)
|
||||||
matches = pic_reverse(pic, matches);
|
matches = pic_reverse(pic, matches);
|
||||||
positions = pic_reverse(pic, positions);
|
positions = pic_reverse(pic, positions);
|
||||||
}
|
}
|
||||||
return pic_return(pic, 2, matches, positions);
|
return pic_values(pic, 2, matches, positions);
|
||||||
}
|
}
|
||||||
|
|
||||||
static pic_value
|
static pic_value
|
||||||
|
|
40
lib/cont.c
40
lib/cont.c
|
@ -144,6 +144,19 @@ pic_alloca_cont(pic_state *pic)
|
||||||
return pic_alloca(pic, sizeof(struct cont));
|
return pic_alloca(pic, sizeof(struct cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static pic_value
|
||||||
|
values(pic_state *pic, int argc, pic_value *argv)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < argc; ++i) {
|
||||||
|
pic->sp[i] = argv[i];
|
||||||
|
}
|
||||||
|
pic->ci->retc = argc;
|
||||||
|
|
||||||
|
return argc == 0 ? pic_undef_value(pic) : pic->sp[0];
|
||||||
|
}
|
||||||
|
|
||||||
static pic_value
|
static pic_value
|
||||||
pic_callcc(pic_state *pic, pic_value proc)
|
pic_callcc(pic_state *pic, pic_value proc)
|
||||||
{
|
{
|
||||||
|
@ -151,7 +164,7 @@ pic_callcc(pic_state *pic, pic_value proc)
|
||||||
volatile struct cont *cont = pic_alloca_cont(pic);
|
volatile struct cont *cont = pic_alloca_cont(pic);
|
||||||
|
|
||||||
if (PIC_SETJMP(pic, jmp)) {
|
if (PIC_SETJMP(pic, jmp)) {
|
||||||
return pic_valuesk(pic, cont->retc, cont->retv);
|
return values(pic, cont->retc, cont->retv);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pic_value val;
|
pic_value val;
|
||||||
|
@ -167,19 +180,19 @@ pic_callcc(pic_state *pic, pic_value proc)
|
||||||
}
|
}
|
||||||
|
|
||||||
pic_value
|
pic_value
|
||||||
pic_return(pic_state *pic, int n, ...)
|
pic_values(pic_state *pic, int n, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
pic_value ret;
|
pic_value ret;
|
||||||
|
|
||||||
va_start(ap, n);
|
va_start(ap, n);
|
||||||
ret = pic_vreturn(pic, n, ap);
|
ret = pic_vvalues(pic, n, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
pic_value
|
pic_value
|
||||||
pic_vreturn(pic_state *pic, int n, va_list ap)
|
pic_vvalues(pic_state *pic, int n, va_list ap)
|
||||||
{
|
{
|
||||||
pic_value *retv = pic_alloca(pic, sizeof(pic_value) * n);
|
pic_value *retv = pic_alloca(pic, sizeof(pic_value) * n);
|
||||||
int i;
|
int i;
|
||||||
|
@ -187,20 +200,7 @@ pic_vreturn(pic_state *pic, int n, va_list ap)
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i) {
|
||||||
retv[i] = va_arg(ap, pic_value);
|
retv[i] = va_arg(ap, pic_value);
|
||||||
}
|
}
|
||||||
return pic_valuesk(pic, n, retv);
|
return values(pic, n, retv);
|
||||||
}
|
|
||||||
|
|
||||||
pic_value
|
|
||||||
pic_valuesk(pic_state *pic, int argc, pic_value *argv)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < argc; ++i) {
|
|
||||||
pic->sp[i] = argv[i];
|
|
||||||
}
|
|
||||||
pic->ci->retc = argc;
|
|
||||||
|
|
||||||
return argc == 0 ? pic_undef_value(pic) : pic->sp[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -247,7 +247,7 @@ pic_cont_values(pic_state *pic)
|
||||||
|
|
||||||
pic_get_args(pic, "*", &argc, &argv);
|
pic_get_args(pic, "*", &argc, &argv);
|
||||||
|
|
||||||
return pic_valuesk(pic, argc, argv);
|
return values(pic, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static pic_value
|
static pic_value
|
||||||
|
@ -273,9 +273,7 @@ pic_init_cont(pic_state *pic)
|
||||||
{
|
{
|
||||||
pic_defun(pic, "call-with-current-continuation", pic_cont_callcc);
|
pic_defun(pic, "call-with-current-continuation", pic_cont_callcc);
|
||||||
pic_defun(pic, "call/cc", pic_cont_callcc);
|
pic_defun(pic, "call/cc", pic_cont_callcc);
|
||||||
pic_defun(pic, "escape", pic_cont_callcc);
|
|
||||||
pic_defun(pic, "dynamic-wind", pic_cont_dynamic_wind);
|
pic_defun(pic, "dynamic-wind", pic_cont_dynamic_wind);
|
||||||
|
|
||||||
pic_defun(pic, "values", pic_cont_values);
|
pic_defun(pic, "values", pic_cont_values);
|
||||||
pic_defun(pic, "call-with-values", pic_cont_call_with_values);
|
pic_defun(pic, "call-with-values", pic_cont_call_with_values);
|
||||||
}
|
}
|
||||||
|
|
|
@ -349,9 +349,8 @@ pic_value pic_make_var(pic_state *, pic_value init, pic_value conv);
|
||||||
void pic_defun(pic_state *, const char *name, pic_func_t f);
|
void pic_defun(pic_state *, const char *name, pic_func_t f);
|
||||||
void pic_defvar(pic_state *, const char *name, pic_value v);
|
void pic_defvar(pic_state *, const char *name, pic_value v);
|
||||||
pic_value pic_funcall(pic_state *, const char *lib, const char *name, int n, ...);
|
pic_value pic_funcall(pic_state *, const char *lib, const char *name, int n, ...);
|
||||||
pic_value pic_return(pic_state *, int n, ...);
|
pic_value pic_values(pic_state *, int n, ...);
|
||||||
pic_value pic_vreturn(pic_state *, int n, va_list);
|
pic_value pic_vvalues(pic_state *, int n, va_list);
|
||||||
pic_value pic_valuesk(pic_state *, int n, pic_value *retv);
|
|
||||||
int pic_receive(pic_state *, int n, pic_value *retv);
|
int pic_receive(pic_state *, int n, pic_value *retv);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue