Added inexact module

This commit is contained in:
Justin Ethier 2016-01-22 21:34:19 -05:00
parent 30c5eaf34d
commit a1ae377352
5 changed files with 14 additions and 19 deletions

View file

@ -15,6 +15,7 @@ SMODULES = \
scheme/eval \
scheme/file \
scheme/load \
scheme/inexact \
scheme/process-context \
scheme/read \
scheme/time \
@ -82,6 +83,7 @@ bootstrap: icyc
cp scheme/char.c $(BOOTSTRAP_DIR)/scheme
cp scheme/eval.c $(BOOTSTRAP_DIR)/scheme
cp scheme/file.c $(BOOTSTRAP_DIR)/scheme
cp scheme/inexact.c $(BOOTSTRAP_DIR)/scheme
cp scheme/load.c $(BOOTSTRAP_DIR)/scheme
cp scheme/process-context.c $(BOOTSTRAP_DIR)/scheme
cp scheme/time.c $(BOOTSTRAP_DIR)/scheme

View file

@ -10,6 +10,7 @@
(scheme load)
(scheme read)
(scheme write)
(scheme inexact)
(scheme process-context)
(scheme time)
(scheme eval))

View file

@ -83,6 +83,16 @@ object Cyc_global_set(void *thd, object *glo, object value);
} \
}
#define return_inexact_double_op(data, cont, OP, z) \
make_double(d, 0.0); \
Cyc_check_num(data, z); \
if (type_of(z) == integer_tag) { \
d.value = OP(((integer_type *)z)->value); \
} else { \
d.value = OP(((double_type *)z)->value); \
} \
return_closcall1(data, cont, &d)
/* Prototypes for primitive functions. */
extern object Cyc_global_variables;

View file

@ -5,12 +5,5 @@
(begin
(define-c sin
"(void *data, int argc, closure _, object k, object z)"
" make_double(d, 0.0);
Cyc_check_num(data, z);
if (type_of(z) == integer_tag) {
d.value = sin(((integer_type *)z)->value);
} else {
d.value = sin(((double_type *)z)->value);
}
return_closcall1(data, k, &d); ")
" return_inexact_double_op(data, k, sin, z);")
))

View file

@ -3,7 +3,6 @@
current-second
current-jiffy
jiffies-per-second
sin ;; just temporary, will be relocated
)
(import (scheme base)
)
@ -25,14 +24,4 @@
"(void *data, int argc, closure _, object k)"
" make_int(box, CLOCKS_PER_SEC);
return_closcall1(data, k, &box); ")
(define-c sin
"(void *data, int argc, closure _, object k, object z)"
" make_double(d, 0.0);
Cyc_check_num(data, z);
if (type_of(z) == integer_tag) {
d.value = sin(((integer_type *)z)->value);
} else {
d.value = sin(((double_type *)z)->value);
}
return_closcall1(data, k, &d); ")
))