~ chicken-core (chicken-5) b755bbf2647a00ec9301fea472344327d21587ff
commit b755bbf2647a00ec9301fea472344327d21587ff Author: felix <felix@call-with-current-continuation.org> AuthorDate: Fri Nov 12 08:37:23 2010 -0500 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Fri Nov 12 08:37:23 2010 -0500 internal unboxing support for ints diff --git a/c-backend.scm b/c-backend.scm index 85e38498..9df76d5c 100644 --- a/c-backend.scm +++ b/c-backend.scm @@ -733,6 +733,7 @@ ((flonum) "double") ((char) "char") ((pointer) "void *") + ((int) "int") ((bool) "int") (else (bomb "invalid unboxed type" t)))) diff --git a/srfi-18.scm b/srfi-18.scm index 46fca8e1..67aefdca 100644 --- a/srfi-18.scm +++ b/srfi-18.scm @@ -216,7 +216,7 @@ (define (thread-suspend! thread) (##sys#check-structure thread 'thread 'thread-suspend!) (##sys#setslot thread 3 'suspended) - (when (eq? thread ##sys#current-thread) + (when (eq? thread ##sys#current-thread) ;XXX what if thread is ready or blocked? (##sys#call-with-current-continuation (lambda (return) (##sys#setslot thread 1 (lambda () (return (##core#undefined)))) @@ -224,7 +224,7 @@ (define (thread-resume! thread) (##sys#check-structure thread 'thread 'thread-resume!) - (when (eq? (##sys#slot thread 3) 'suspended) + (when (eq? (##sys#slot thread 3) 'suspended) ;XXX what if thread is ready or blocked? (##sys#setslot thread 3 'ready) (##sys#add-to-ready-queue thread) ) ) diff --git a/unboxing.scm b/unboxing.scm index fc0ff825..91a44f59 100644 --- a/unboxing.scm +++ b/unboxing.scm @@ -117,6 +117,10 @@ (make-node '##core#inline_allocate (list "C_a_i_flonum" 4) ; hardcoded size (list (make-node '##core#unboxed_ref (list tmp rtype) '())))) + ((int) + (make-node + '##core#inline_allocate (list "C_a_int_to_num" 4) ; hardcoded size + (list (make-node '##core#unboxed_ref (list tmp rtype) '())))) ((pointer) (make-node '##core#inline_allocate (list "C_a_i_mpointer" 2) ; hardcoded size @@ -151,6 +155,7 @@ ((char) "C_character_code") ((fixnum) "C_unfix") ((flonum) "C_flonum_magnitude") + ((int) "C_num_to_int") ((pointer) "C_pointer_address") ((bool) "C_truep") ((*) "C_id")Trap