From a1ae377352a3515505a5c075fc3215d2699ff151 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 22 Jan 2016 21:34:19 -0500 Subject: [PATCH] Added inexact module --- Makefile | 2 ++ icyc.scm | 1 + include/cyclone/runtime.h | 10 ++++++++++ scheme/inexact.sld | 9 +-------- scheme/time.sld | 11 ----------- 5 files changed, 14 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index baa69b8f..cfdf5d9a 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/icyc.scm b/icyc.scm index 3aa51888..3be3fd26 100644 --- a/icyc.scm +++ b/icyc.scm @@ -10,6 +10,7 @@ (scheme load) (scheme read) (scheme write) + (scheme inexact) (scheme process-context) (scheme time) (scheme eval)) diff --git a/include/cyclone/runtime.h b/include/cyclone/runtime.h index 9e4a6f09..9f748f10 100644 --- a/include/cyclone/runtime.h +++ b/include/cyclone/runtime.h @@ -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; diff --git a/scheme/inexact.sld b/scheme/inexact.sld index 2fede415..3007d1e4 100644 --- a/scheme/inexact.sld +++ b/scheme/inexact.sld @@ -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);") )) diff --git a/scheme/time.sld b/scheme/time.sld index bf28fc1e..c7d11c43 100644 --- a/scheme/time.sld +++ b/scheme/time.sld @@ -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); ") ))