~ chicken-core (chicken-5) a5bd817ac2dff19a94af6a4cc6b483a46f882a57


commit a5bd817ac2dff19a94af6a4cc6b483a46f882a57
Author:     Peter Bex <peter@more-magic.net>
AuthorDate: Sat Feb 7 15:45:45 2015 +0100
Commit:     Peter Bex <peter@more-magic.net>
CommitDate: Sun May 31 14:20:16 2015 +0200

    Change procedures that deal with UNIX timestamps so they return exact integers

diff --git a/chicken.h b/chicken.h
index a4b0e811..a48a418e 100644
--- a/chicken.h
+++ b/chicken.h
@@ -1166,7 +1166,6 @@ extern double trunc(double);
 #define C_bignum_mutate_size(b,s)  (C_block_header(b) = (C_BIGNUM_TYPE | C_wordstobytes((s)+1)))
 #define C_fitsinfixnump(n)         (((n) & C_INT_SIGN_BIT) == (((n) & C_INT_TOP_BIT) << 1))
 #define C_ufitsinfixnump(n)        (((n) & (C_INT_SIGN_BIT | (C_INT_SIGN_BIT >> 1))) == 0)
-#define C_quickflonumtruncate(n)   (C_fix((C_word)C_flonum_magnitude(n)))
 #define C_and(x, y)                (C_truep(x) ? (y) : C_SCHEME_FALSE)
 #define C_c_bytevector(x)          ((unsigned char *)C_data_pointer(x))
 #define C_c_bytevector_or_null(x)  ((unsigned char *)C_data_pointer_or_null(x))
@@ -1735,7 +1734,7 @@ extern double trunc(double);
 #define C_u_i_flonum_infinitep(x)       C_mk_bool(C_isinf(C_flonum_magnitude(x)))
 #define C_u_i_flonum_finitep(x)         C_mk_bool(C_isfinite(C_flonum_magnitude(x)))
 
-#define C_a_i_current_milliseconds(ptr, c, dummy) C_flonum(ptr, C_milliseconds())
+#define C_a_i_current_milliseconds(ptr, c, dummy) C_uint64_to_num(ptr, C_milliseconds())
 
 #define C_i_noop1(dummy)               ((dummy), C_SCHEME_UNDEFINED)
 #define C_i_noop2(dummy1, dummy2)      ((dummy1), (dummy2), C_SCHEME_UNDEFINED)
@@ -2157,8 +2156,8 @@ C_fctexport C_word C_fcall C_a_i_flonum_gcd(C_word **p, C_word n, C_word x, C_wo
 C_fctexport C_word C_fcall C_i_getprop(C_word sym, C_word prop, C_word def) C_regparm;
 C_fctexport C_word C_fcall C_putprop(C_word **a, C_word sym, C_word prop, C_word val) C_regparm;
 C_fctexport C_word C_fcall C_i_get_keyword(C_word key, C_word args, C_word def) C_regparm;
-C_fctexport double C_fcall C_milliseconds(void) C_regparm;
-C_fctexport double C_fcall C_cpu_milliseconds(void) C_regparm;
+C_fctexport C_u64 C_fcall C_milliseconds(void) C_regparm;
+C_fctexport C_u64 C_fcall C_cpu_milliseconds(void) C_regparm;
 C_fctexport double C_fcall C_bignum_to_double(C_word bignum) C_regparm;
 
 
diff --git a/extras.scm b/extras.scm
index dec70d23..1b209398 100644
--- a/extras.scm
+++ b/extras.scm
@@ -57,7 +57,7 @@
 
 (define (randomize . n)
   (let ((nn (if (null? n)
-		(##sys#flo2fix (fp/ (current-seconds) 1000.0)) ; wall clock time
+		(quotient (current-seconds) 1000) ; wall clock time
 		(car n))))
     (##sys#check-fixnum nn 'randomize)
     (##core#inline "C_randomize" nn) ) )
diff --git a/library.scm b/library.scm
index 5e7b9c55..4218aa2c 100644
--- a/library.scm
+++ b/library.scm
@@ -64,7 +64,7 @@
 
 #define C_direct_continuation(dummy)  t1
 
-#define C_a_get_current_seconds(ptr, c, dummy)  C_flonum(ptr, time(NULL))
+#define C_a_get_current_seconds(ptr, c, dummy)  C_int64_to_num(ptr, time(NULL))
 #define C_peek_c_string_at(ptr, i)    ((C_char *)(((C_char **)ptr)[ i ]))
 
 static C_word
@@ -217,7 +217,6 @@ EOF
 (define ##sys#void void)
 (define ##sys#undefined-value (##core#undefined))
 (define (##sys#halt msg) (##core#inline "C_halt" msg))
-(define (##sys#flo2fix n) (##core#inline "C_quickflonumtruncate" n))
 (define ##sys#become! (##core#primitive "C_become"))
 (define (##sys#block-ref x i) (##core#inline "C_i_block_ref" x i))
 (define ##sys#apply-values (##core#primitive "C_apply_values"))
diff --git a/posix-common.scm b/posix-common.scm
index 245f6e21..65e77b92 100644
--- a/posix-common.scm
+++ b/posix-common.scm
@@ -81,7 +81,7 @@ static char C_time_string [TIME_STRING_MAXLENGTH + 1];
 
 #define C_strftime(v, f, tm) \
         (strftime(C_time_string, sizeof(C_time_string), C_c_string(f), C_tm_set((v), (tm))) ? C_time_string : NULL)
-#define C_a_mktime(ptr, c, v, tm)  C_flonum(ptr, mktime(C_tm_set((v), C_data_pointer(tm))))
+#define C_a_mktime(ptr, c, v, tm)  C_int64_to_num(ptr, mktime(C_tm_set((v), C_data_pointer(tm))))
 #define C_asctime(v, tm)    (asctime(C_tm_set((v), (tm))))
 
 #define C_fdopen(a, n, fd, m) C_mpointer(a, fdopen(C_unfix(fd), C_c_string(m)))
@@ -97,9 +97,9 @@ static char C_time_string [TIME_STRING_MAXLENGTH + 1];
 #define C_foundfile(e,b,l)    (C_strlcpy(C_c_string(b), ((struct dirent *) C_block_item(e, 0))->d_name, l), C_fix(strlen(((struct dirent *) C_block_item(e, 0))->d_name)))
 
 /* It is assumed that 'int' is-a 'long' */
-#define C_ftell(p)          C_fix(ftell(C_port_file(p)))
-#define C_fseek(p, n, w)    C_mk_nbool(fseek(C_port_file(p), C_num_to_int(n), C_unfix(w)))
-#define C_lseek(fd, o, w)     C_fix(lseek(C_unfix(fd), C_unfix(o), C_unfix(w)))
+#define C_ftell(a, n, p)    C_int64_to_num(a, ftell(C_port_file(p)))
+#define C_fseek(p, n, w)    C_mk_nbool(fseek(C_port_file(p), C_num_to_int64(n), C_unfix(w)))
+#define C_lseek(fd, o, w)     C_fix(lseek(C_unfix(fd), C_num_to_int64(o), C_unfix(w)))
 
 #ifdef HAVE_SETENV
 # define C_unsetenv(s)      (unsetenv((char *)C_data_pointer(s)), C_SCHEME_TRUE)
@@ -192,9 +192,9 @@ EOF
 (define-foreign-variable _stat_st_nlink unsigned-int "C_statbuf.st_nlink")
 (define-foreign-variable _stat_st_gid unsigned-int "C_statbuf.st_gid")
 (define-foreign-variable _stat_st_size integer64 "C_statbuf.st_size")
-(define-foreign-variable _stat_st_mtime double "C_statbuf.st_mtime")
-(define-foreign-variable _stat_st_atime double "C_statbuf.st_atime")
-(define-foreign-variable _stat_st_ctime double "C_statbuf.st_ctime")
+(define-foreign-variable _stat_st_mtime integer64 "C_statbuf.st_mtime")
+(define-foreign-variable _stat_st_atime integer64 "C_statbuf.st_atime")
+(define-foreign-variable _stat_st_ctime integer64 "C_statbuf.st_ctime")
 (define-foreign-variable _stat_st_uid unsigned-int "C_statbuf.st_uid")
 (define-foreign-variable _stat_st_mode unsigned-int "C_statbuf.st_mode")
 (define-foreign-variable _stat_st_dev unsigned-int "C_statbuf.st_dev")
@@ -251,7 +251,7 @@ EOF
    (lambda (f)
      (##sys#stat f #f #t 'file-modification-time) _stat_st_mtime)
    (lambda (f t)
-     (##sys#check-number t 'set-file-modification-time)
+     (##sys#check-exact-integer t 'set-file-modification-time)
      (let ((r ((foreign-lambda int "set_file_mtime" c-string scheme-object)
 	       f t)))
        (when (fx< r 0)
@@ -329,7 +329,7 @@ EOF
    (lambda (port)
      (let ((pos (cond ((port? port)
 		       (if (eq? (##sys#slot port 7) 'stream)
-			   (##core#inline "C_ftell" port)
+			   (##core#inline_allocate ("C_ftell" 4) port)
 			   -1) )
 		      ((fixnum? port)
 		       (##core#inline "C_lseek" port 0 _seek_cur) )
@@ -559,17 +559,17 @@ EOF
     (##sys#error loc "time vector too short" tm) ) )
 
 (define (seconds->local-time #!optional (secs (current-seconds)))
-  (##sys#check-number secs 'seconds->local-time)
+  (##sys#check-exact-integer secs 'seconds->local-time)
   (##sys#decode-seconds secs #f) )
 
 (define (seconds->utc-time #!optional (secs (current-seconds)))
-  (##sys#check-number secs 'seconds->utc-time)
+  (##sys#check-exact-integer secs 'seconds->utc-time)
   (##sys#decode-seconds secs #t) )
 
 (define seconds->string
   (let ([ctime (foreign-lambda c-string "C_ctime" integer)])
     (lambda (#!optional (secs (current-seconds)))
-      (##sys#check-number secs 'seconds->string)
+      (##sys#check-exact-integer secs 'seconds->string)
       (let ([str (ctime secs)])
         (if str
             (##sys#substring str 0 (fx- (##sys#size str) 1))
diff --git a/posixunix.scm b/posixunix.scm
index b7784646..fa65e1a1 100644
--- a/posixunix.scm
+++ b/posixunix.scm
@@ -302,7 +302,7 @@ static time_t C_timegm(struct tm *t)
 #define C_timegm timegm
 #endif
 
-#define C_a_timegm(ptr, c, v, tm)  C_flonum(ptr, C_timegm(C_tm_set((v), C_data_pointer(tm))))
+#define C_a_timegm(ptr, c, v, tm)  C_int64_to_num(ptr, C_timegm(C_tm_set((v), C_data_pointer(tm))))
 
 #ifdef __linux__
 extern char *strptime(const char *s, const char *format, struct tm *tm);
@@ -569,7 +569,7 @@ EOF
 	 (nfds (fx+ nfdsr nfdsw))
 	 (fds-blob (##sys#make-blob
 		    (fx* nfds (foreign-value "sizeof(struct pollfd)" int)))))
-    (when tm (##sys#check-number tm))
+    (when tm (##sys#check-exact-integer tm))
     (do ((i 0 (fx+ i 1))
 	 (fdsrl fdsrl (cdr fdsrl)))
 	((null? fdsrl))
@@ -583,7 +583,7 @@ EOF
 	 "struct pollfd *fds = p;"
 	 "fds[i].fd = fd; fds[i].events = POLLOUT;") i (car fdswl) fds-blob))
     (let ((n ((foreign-lambda int "poll" scheme-pointer int int)
-	      fds-blob nfds (if tm (inexact->exact (* (max 0 tm) 1000)) -1))))
+	      fds-blob nfds (if tm (* (max 0 tm) 1000) -1))))
       (cond ((fx< n 0)
 	     (posix-error #:file-error 'file-select "failed" fdsr fdsw) )
 	    ((fx= n 0) (values (if (pair? fdsr) '() #f) (if (pair? fdsw) '() #f)))
@@ -1351,7 +1351,7 @@ EOF
 
 (define file-truncate
   (lambda (fname off)
-    (##sys#check-number off 'file-truncate)
+    (##sys#check-exact-integer off 'file-truncate)
     (when (fx< (cond [(string? fname) (##core#inline "C_truncate" (##sys#make-c-string fname 'file-truncate) off)]
 		     [(fixnum? fname) (##core#inline "C_ftruncate" fname off)]
 		     [else (##sys#error 'file-truncate "invalid file" fname)] )
@@ -1370,10 +1370,10 @@ EOF
     (let-optionals* args ([start 0]
                           [len #t] )
       (##sys#check-port port loc)
-      (##sys#check-number start loc)
+      (##sys#check-exact-integer start loc)
       (if (eq? #t len)
           (set! len 0)
-          (##sys#check-number len loc) )
+          (##sys#check-exact-integer len loc) )
       (##core#inline "C_flock_setup" (if (##sys#slot port 1) _f_rdlck _f_wrlck) start len)
       (##sys#make-structure 'lock port start len) ) )
   (define (err msg lock loc)
diff --git a/profiler.scm b/profiler.scm
index 6e3c084b..2cbb56f6 100644
--- a/profiler.scm
+++ b/profiler.scm
@@ -75,7 +75,8 @@
 
 ;;; Entry and exit into/out of profiled lambda:
 
-(define cpu-ms (foreign-lambda double "C_cpu_milliseconds"))
+;; XXX TODO: Should be changed to unsigned-integer64 after bootstrapping
+(define cpu-ms (foreign-lambda unsigned-integer "C_cpu_milliseconds"))
 
 (define ##sys#profile-entry 
   (let ((maxfix most-positive-fixnum))
@@ -106,8 +107,8 @@
       (let ((t (##sys#slot vec it)))
 	(##sys#setslot
 	 vec it 
-	 (fp+ (if (eq? t 0) 0.0 t)
-	      (fp- (cpu-ms) (##sys#slot vec it0))))))))
+	 (+ (if (eq? t 0) 0 t)
+	    (- (cpu-ms) (##sys#slot vec it0))))))))
 
 
 ;;; Generate profile:
diff --git a/runtime.c b/runtime.c
index b46a5608..bc8b66f0 100644
--- a/runtime.c
+++ b/runtime.c
@@ -1932,17 +1932,16 @@ C_word C_dbg_hook(C_word dummy)
 
 /* Timing routines: */
 
-C_regparm double C_fcall C_milliseconds(void)
+C_regparm C_u64 C_fcall C_milliseconds(void)
 {
 #ifdef C_NONUNIX
     if(CLOCKS_PER_SEC == 1000) return clock();
-    else return C_floor(((double)clock() / (double)CLOCKS_PER_SEC) * 1000);
+    else return (C_u64)clock() / (C_u64)CLOCKS_PER_SEC * 1000;
 #else
     struct timeval tv;
 
     if(C_gettimeofday(&tv, NULL) == -1) return 0;
-    else return 
-	   C_floor(((double)tv.tv_sec - C_startup_time_seconds) * 1000.0 + tv.tv_usec / 1000);
+    else return (tv.tv_sec - C_startup_time_seconds) * 1000 + tv.tv_usec / 1000;
 #endif
 }
 
@@ -1970,18 +1969,17 @@ C_regparm time_t C_fcall C_seconds(C_long *ms)
 }
 
 
-C_regparm double C_fcall C_cpu_milliseconds(void)
+C_regparm C_u64 C_fcall C_cpu_milliseconds(void)
 {
 #if defined(C_NONUNIX) || defined(__CYGWIN__)
     if(CLOCKS_PER_SEC == 1000) return clock();
-    else return C_floor(((double)clock() / (double)CLOCKS_PER_SEC) * 1000);
+    else return ((C_u64)clock() / CLOCKS_PER_SEC) * 1000;
 #else
     struct rusage ru;
 
     if(C_getrusage(RUSAGE_SELF, &ru) == -1) return 0;
-    else return 
-	   C_floor(((double)ru.ru_utime.tv_sec + ru.ru_stime.tv_sec) * 1000
-		   + ((double)ru.ru_utime.tv_usec + ru.ru_stime.tv_usec) / 1000);
+    else return (((C_u64)ru.ru_utime.tv_sec + ru.ru_stime.tv_sec) * 1000
+                 + ((C_u64)ru.ru_utime.tv_usec + ru.ru_stime.tv_usec) / 1000);
 #endif
 }
 
@@ -10421,7 +10419,7 @@ void C_ccall C_decode_seconds(C_word c, C_word closure, C_word k, C_word secs, C
   C_word ab[ C_SIZEOF_VECTOR(10) ], *a = ab,
          info;
 
-  tsecs = (time_t)((secs & C_FIXNUM_BIT) != 0 ? C_unfix(secs) : C_flonum_magnitude(secs));
+  tsecs = (time_t)C_num_to_int64(secs);
   
   if(mode == C_SCHEME_FALSE) tmt = C_localtime(&tsecs);
   else tmt = C_gmtime(&tsecs);
@@ -10800,14 +10798,14 @@ C_a_i_cpu_time(C_word **a, int c, C_word buf)
 
 #if defined(C_NONUNIX) || defined(__CYGWIN__)
   if(CLOCKS_PER_SEC == 1000) u = clock();
-  else u = C_number(a, C_floor(((double)clock() / (double)CLOCKS_PER_SEC) * 1000));
+  else u = C_uint64_to_num(a, ((C_u64)clock() / CLOCKS_PER_SEC) * 1000);
 #else
   struct rusage ru;
 
   if(C_getrusage(RUSAGE_SELF, &ru) == -1) u = 0;
   else {
-    u = C_number(a, C_floor((double)ru.ru_utime.tv_sec * 1000 + ru.ru_utime.tv_usec / 1000));
-    s = C_number(a, C_floor((double)ru.ru_stime.tv_sec * 1000 + ru.ru_stime.tv_usec / 1000));
+    u = C_uint64_to_num(a, (C_u64)ru.ru_utime.tv_sec * 1000 + ru.ru_utime.tv_usec / 1000);
+    s = C_uint64_to_num(a, (C_u64)ru.ru_stime.tv_sec * 1000 + ru.ru_stime.tv_usec / 1000);
   }
 #endif
 
diff --git a/scheduler.scm b/scheduler.scm
index d20a08eb..1dc78821 100644
--- a/scheduler.scm
+++ b/scheduler.scm
@@ -74,7 +74,7 @@ static fd_set C_fdset_input, C_fdset_output;
 #define C_fd_input_ready(fd,pos)  C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_input))
 #define C_fd_output_ready(fd,pos)  C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_output))
 
-C_inline int C_ready_fds_timeout(int to, double tm) {
+C_inline int C_ready_fds_timeout(int to, unsigned int tm) {
   struct timeval timeout;
   timeout.tv_sec = tm / 1000;
   timeout.tv_usec = fmod(tm, 1000) * 1000;
@@ -107,8 +107,8 @@ C_inline int C_fd_ready(int fd, int pos, int what) {
 #define C_fd_input_ready(fd,pos)  C_mk_bool(C_fd_ready(C_unfix(fd), C_unfix(pos),POLLIN|POLLERR|POLLHUP|POLLNVAL))
 #define C_fd_output_ready(fd,pos)  C_mk_bool(C_fd_ready(C_unfix(fd), C_unfix(pos),POLLOUT|POLLERR|POLLHUP|POLLNVAL))
 
-C_inline int C_ready_fds_timeout(int to, double tm) {
-  return poll(C_fdset_set, C_fdset_nfds, to ? (int)tm : -1);
+C_inline int C_ready_fds_timeout(int to, unsigned int tm) {
+  return poll(C_fdset_set, C_fdset_nfds, to ? tm : -1);
 }
 
 C_inline void C_prepare_fdset(int length) {
@@ -185,7 +185,7 @@ EOF
 		       [tmo2 (##sys#slot tto 4)] ) ; timeout value stored in thread
 		  (dbg "timeout: " tto " -> " tmo2 " (now: " now ")")
 		  (if (equal? tmo1 tmo2)  ;XXX why do we check this?
-		      (if (fp>= now tmo1) ; timeout reached?
+		      (if (>= now tmo1) ; timeout reached?
 			  (begin
 			    (##sys#setislot tto 13 #t) ; mark as being unblocked by timeout
 			    (##sys#clear-i/o-state-for-thread! tto)
@@ -203,9 +203,7 @@ EOF
 				(set! eintr
 				  (and (not (##core#inline 
 					     "C_msleep" 
-					     (fxmax 
-					      0
-					      (##core#inline "C_quickflonumtruncate" (fp- tmo1 now)))))
+					     (max 0 (- tmo1 now))))
 				       (foreign-value
 					"C_signal_interrupted_p" bool) ) ) ) ) ) )
 		      (loop (cdr lst)) ) ) ) ) ) )
@@ -293,13 +291,10 @@ EOF
 
 (define (##sys#thread-block-for-timeout! t tm)
   (dbg t " blocks for timeout " tm)
-  (unless (flonum? tm)	  ; to catch old code that uses fixnum timeouts
-    (panic
-     (sprintf "##sys#thread-block-for-timeout!: invalid timeout: ~S" tm)))
-  (when (fp> tm 0.0)
+  (when (> tm 0)
     ;; This should really use a balanced tree:
     (let loop ([tl ##sys#timeout-list] [prev #f])
-      (if (or (null? tl) (fp< tm (caar tl)))
+      (if (or (null? tl) (< tm (caar tl)))
 	  (if prev
 	      (set-cdr! prev (cons (cons tm t) tl))
 	      (set! ##sys#timeout-list (cons (cons tm t) tl)) )
@@ -446,10 +441,10 @@ EOF
 	 (tmo (if (and to? (not rq?)) ; no thread was unblocked by timeout, so wait
 		  (let* ((tmo1 (caar ##sys#timeout-list))
 			 (now (##core#inline_allocate ("C_a_i_current_milliseconds" 4) #f)))
-		    (fpmax 0.0 (fp- tmo1 now)) )
+		    (max 0 (- tmo1 now)) )
 		  0.0) ) )		; otherwise immediate timeout.
     (dbg "waiting for I/O with timeout " tmo)
-    (let ((n ((foreign-lambda int "C_ready_fds_timeout" bool double)
+    (let ((n ((foreign-lambda int "C_ready_fds_timeout" bool unsigned-integer)
 	      (or rq? to?) tmo)))
       (dbg n " fds ready")
       (cond [(eq? -1 n)
diff --git a/types.db b/types.db
index 7dd4c69f..6df46c43 100644
--- a/types.db
+++ b/types.db
@@ -932,13 +932,13 @@
 		  #(tmp1))))
  (() ##sys#current-exception-handler))
 
-(current-gc-milliseconds (#(procedure #:clean) current-gc-milliseconds () fixnum))
-(current-milliseconds (#(procedure #:clean) current-milliseconds () float))
+(current-gc-milliseconds (#(procedure #:clean) current-gc-milliseconds () integer))
+(current-milliseconds (#(procedure #:clean) current-milliseconds () integer))
 
 (current-read-table
  (#(procedure #:clean) current-read-table (#!optional (struct read-table)) (struct read-table)))
 
-(current-seconds (#(procedure #:clean) current-seconds () float))
+(current-seconds (#(procedure #:clean) current-seconds () integer))
 (define-reader-ctor (#(procedure #:clean #:enforce) define-reader-ctor (symbol procedure) undefined))
 (delete-file (#(procedure #:clean #:enforce) delete-file (string) string))
 (enable-warnings (#(procedure #:clean) enable-warnings (#!optional *) *))
@@ -1852,28 +1852,28 @@
 (fcntl/getfl fixnum)
 (fcntl/setfd fixnum)
 (fcntl/setfl fixnum)
-(file-access-time (#(procedure #:clean #:enforce) file-access-time ((or string fixnum)) number))
-(file-change-time (#(procedure #:clean #:enforce) file-change-time ((or string fixnum)) number))
+(file-access-time (#(procedure #:clean #:enforce) file-access-time ((or string fixnum)) integer))
+(file-change-time (#(procedure #:clean #:enforce) file-change-time ((or string fixnum)) integer))
 (file-close (#(procedure #:clean #:enforce) file-close (fixnum) undefined))
 (file-control (#(procedure #:clean #:enforce) file-control (fixnum fixnum #!optional fixnum) fixnum))
 (file-creation-mode (#(procedure #:clean #:enforce) file-creation-mode (#!optional fixnum) fixnum))
 (file-execute-access? (#(procedure #:clean #:enforce) file-execute-access? (string) boolean))
 (file-link (#(procedure #:clean #:enforce) file-link (string string) undefined))
-(file-lock (#(procedure #:clean #:enforce) file-lock (port #!optional fixnum *) (struct lock)))
-(file-lock/blocking (#(procedure #:clean #:enforce) file-lock/blocking (port #!optional fixnum *) (struct lock)))
+(file-lock (#(procedure #:clean #:enforce) file-lock (port #!optional fixnum integer) (struct lock)))
+(file-lock/blocking (#(procedure #:clean #:enforce) file-lock/blocking (port #!optional fixnum integer) (struct lock)))
 (file-mkstemp (#(procedure #:clean #:enforce) file-mkstemp (string) fixnum string))
-(file-modification-time (#(procedure #:clean #:enforce) file-modification-time ((or string fixnum)) number))
+(file-modification-time (#(procedure #:clean #:enforce) file-modification-time ((or string fixnum)) integer))
 (file-open (#(procedure #:clean #:enforce) file-open (string fixnum #!optional fixnum) fixnum))
 (file-owner (#(procedure #:clean #:enforce) file-owner ((or string fixnum)) fixnum))
 (file-permissions (#(procedure #:clean #:enforce) file-permissions ((or string fixnum)) fixnum))
-(file-position (#(procedure #:clean #:enforce) file-position ((or port fixnum)) fixnum))
+(file-position (#(procedure #:clean #:enforce) file-position ((or port fixnum)) integer))
 (file-read (#(procedure #:clean #:enforce) file-read (fixnum fixnum #!optional *) list))
 (file-read-access? (#(procedure #:clean #:enforce) file-read-access? (string) boolean))
 (file-select (#(procedure #:clean #:enforce) file-select ((or (list-of fixnum) fixnum false) (or (list-of fixnum) fixnum false) #!optional fixnum) * *))
-(file-size (#(procedure #:clean #:enforce) file-size ((or string fixnum)) number))
-(file-stat (#(procedure #:clean #:enforce) file-stat ((or string fixnum) #!optional *) (vector-of number)))
+(file-size (#(procedure #:clean #:enforce) file-size ((or string fixnum)) integer))
+(file-stat (#(procedure #:clean #:enforce) file-stat ((or string fixnum) #!optional *) (vector-of integer)))
 (file-test-lock (#(procedure #:clean #:enforce) file-test-lock (port #!optional fixnum *) boolean))
-(file-truncate (#(procedure #:clean #:enforce) file-truncate ((or string fixnum) fixnum) undefined))
+(file-truncate (#(procedure #:clean #:enforce) file-truncate ((or string fixnum) integer) undefined))
 (file-type (#(procedure #:clean #:enforce) ((or string fixnum) #!optional * *) symbol))
 (file-unlock (#(procedure #:clean #:enforce) file-unlock ((struct lock)) undefined))
 (file-write (#(procedure #:clean #:enforce) file-write (fixnum * #!optional fixnum) fixnum))
@@ -1887,7 +1887,7 @@
 (glob (#(procedure #:clean #:enforce) glob (#!rest string) list))
 (group-information (#(procedure #:clean #:enforce) group-information (fixnum #!optional *) *))
 (initialize-groups (#(procedure #:clean #:enforce) initialize-groups (string fixnum) undefined))
-(local-time->seconds (#(procedure #:clean #:enforce) local-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) number))
+(local-time->seconds (#(procedure #:clean #:enforce) local-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer))
 (local-timezone-abbreviation (#(procedure #:clean) local-timezone-abbreviation () string))
 (open-input-file* (#(procedure #:clean #:enforce) open-input-file* (fixnum #!optional symbol) input-port))
 (open-input-pipe (#(procedure #:clean #:enforce) open-input-pipe (string #!optional symbol) input-port))
@@ -1940,15 +1940,15 @@
 (process-wait (#(procedure #:clean #:enforce) process-wait (#!optional fixnum *) fixnum fixnum fixnum))
 (read-symbolic-link (#(procedure #:clean #:enforce) read-symbolic-link (string #!optional boolean) string))
 (regular-file? (#(procedure #:clean #:enforce) regular-file? ((or string fixnum)) boolean))
-(seconds->local-time (#(procedure #:clean #:enforce) seconds->local-time (#!optional number) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
-(seconds->string (#(procedure #:clean #:enforce) seconds->string (#!optional number) string))
-(seconds->utc-time (#(procedure #:clean #:enforce) seconds->utc-time (#!optional number) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
+(seconds->local-time (#(procedure #:clean #:enforce) seconds->local-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
+(seconds->string (#(procedure #:clean #:enforce) seconds->string (#!optional integer) string))
+(seconds->utc-time (#(procedure #:clean #:enforce) seconds->utc-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)))
 (seek/cur fixnum)
 (seek/end fixnum)
 (seek/set fixnum)
-(set-alarm! (#(procedure #:clean #:enforce) set-alarm! (number) number))
+(set-alarm! (#(procedure #:clean #:enforce) set-alarm! (integer) integer))
 (set-buffering-mode! (#(procedure #:clean #:enforce) set-buffering-mode! (port symbol #!optional fixnum) undefined))
-(set-file-position! (#(procedure #:clean #:enforce) set-file-position! ((or port fixnum) fixnum #!optional fixnum) undefined))
+(set-file-position! (#(procedure #:clean #:enforce) set-file-position! ((or port fixnum) integer #!optional fixnum) undefined))
 (set-groups! (#(procedure #:clean #:enforce) set-groups! ((list-of fixnum)) undefined))
 (set-root-directory! (#(procedure #:clean #:enforce) set-root-directory! (string) undefined))
 (set-signal-handler! (#(procedure #:clean #:enforce) set-signal-handler! (fixnum (or false (procedure (fixnum) . *))) undefined))
@@ -2001,7 +2001,7 @@
 (unmap-file-from-memory (#(procedure #:clean #:enforce) unmap-file-from-memory ((struct mmap) #!optional fixnum) undefined))
 (unsetenv (#(procedure #:clean #:enforce) unsetenv (string) undefined))
 (user-information (#(procedure #:clean #:enforce) user-information ((or string fixnum) #!optional *) *))
-(utc-time->seconds (#(procedure #:clean #:enforce) utc-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) number))
+(utc-time->seconds (#(procedure #:clean #:enforce) utc-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer))
 (with-input-from-pipe (#(procedure #:enforce) with-input-from-pipe (string (procedure () . *) #!optional symbol) . *))
 (with-output-to-pipe (#(procedure #:enforce) with-output-to-pipe (string (procedure () . *) #!optional symbol) . *))
 
@@ -2184,12 +2184,12 @@
 (tcp-abandon-port (#(procedure #:clean #:enforce) tcp-abandon-port (port) undefined))
 (tcp-accept (#(procedure #:clean #:enforce) tcp-accept ((struct tcp-listener)) input-port output-port))
 (tcp-accept-ready? (#(procedure #:clean #:enforce) tcp-accept-ready? ((struct tcp-listener)) boolean))
-(tcp-accept-timeout (#(procedure #:clean #:enforce) tcp-accept-timeout (#!optional (or false number)) (or false number)))
+(tcp-accept-timeout (#(procedure #:clean #:enforce) tcp-accept-timeout (#!optional (or false integer)) (or false integer)))
 (tcp-addresses (#(procedure #:clean #:enforce) tcp-addresses (port) string string))
 (tcp-buffer-size (#(procedure #:clean #:enforce) tcp-buffer-size (#!optional fixnum) fixnum))
 (tcp-close (#(procedure #:clean #:enforce) tcp-close ((struct tcp-listener)) undefined))
 (tcp-connect (#(procedure #:clean #:enforce) tcp-connect (string #!optional fixnum) input-port output-port))
-(tcp-connect-timeout (#(procedure #:clean #:enforce) tcp-connect-timeout (#!optional (or false number)) (or false number)))
+(tcp-connect-timeout (#(procedure #:clean #:enforce) tcp-connect-timeout (#!optional (or false integer)) (or false integer)))
 (tcp-listen (#(procedure #:clean #:enforce) tcp-listen (fixnum #!optional fixnum *) (struct tcp-listener)))
 
 (tcp-listener-fileno (#(procedure #:clean #:enforce) tcp-listener-fileno ((struct tcp-listener)) fixnum)
@@ -2200,8 +2200,8 @@
 (tcp-listener? (#(procedure #:clean #:predicate (struct tcp-listener)) tcp-listener? (*) boolean))
 
 (tcp-port-numbers (#(procedure #:clean #:enforce) tcp-port-numbers (port) fixnum fixnum))
-(tcp-read-timeout (#(procedure #:clean #:enforce) tcp-read-timeout (#!optional (or false number)) (or false number)))
-(tcp-write-timeout (#(procedure #:clean #:enforce) tcp-write-timeout (#!optional (or false number)) (or false number)))
+(tcp-read-timeout (#(procedure #:clean #:enforce) tcp-read-timeout (#!optional (or false integer)) (or false integer)))
+(tcp-write-timeout (#(procedure #:clean #:enforce) tcp-write-timeout (#!optional (or false integer)) (or false integer)))
 
 
 ;; utils
Trap