* keyboard interrupts are now continuable.

This commit is contained in:
Abdulaziz Ghuloum 2007-11-15 13:40:36 -05:00
parent 55254257fb
commit 3a3bc7dcc1
6 changed files with 3406 additions and 10 deletions

View File

@ -25,7 +25,10 @@
(run-benchmark
"sum1"
sum1-iters
(lambda (result) (and (fl>=? result 15794.974999999)
(fl<=? result 15794.975000001)))
(lambda (result)
(display result)
(newline)
(and (fl>=? result 15794.974999999)
(fl<=? result 15794.975000001)))
(lambda () (lambda () (go))))))

File diff suppressed because it is too large Load Diff

View File

@ -421,12 +421,26 @@
(if value-dest
(make-seq body (make-set value-dest return-value-register))
body)))))
;;; (define (alloc-check size)
;;; (E (make-conditional ;;; PCB ALLOC-REDLINE
;;; (make-primcall '<=
;;; (list (make-primcall 'int+ (list apr size))
;;; (make-primcall 'mref (list pcr (make-constant 4)))))
;;; (make-primcall 'nop '())
;;; (make-funcall
;;; (make-primcall 'mref
;;; (list
;;; (make-constant (make-object (primref->symbol 'do-overflow)))
;;; (make-constant (- disp-symbol-record-proc symbol-ptag))))
;;; (list size)))))
(define (alloc-check size)
(E (make-conditional ;;; PCB ALLOC-REDLINE
(make-primcall '<=
(list (make-primcall 'int+ (list apr size))
(make-primcall 'mref (list pcr (make-constant 4)))))
(make-primcall 'nop '())
(E (make-shortcut
(make-conditional ;;; PCB ALLOC-REDLINE
(make-primcall '<=
(list (make-primcall 'int+ (list apr size))
(make-primcall 'mref (list pcr (make-constant 4)))))
(make-primcall 'nop '())
(make-primcall 'interrupt '()))
(make-funcall
(make-primcall 'mref
(list

View File

@ -45,8 +45,13 @@
(define interrupt-handler
(make-parameter
(lambda ()
(define-condition-type &interrupted &condition
make-interrupted-condition interrupted-condition?)
(set-port-output-index! (console-output-port) 0)
(error #f "interrupted"))
(raise-continuable
(condition
(make-interrupted-condition)
(make-message-condition "received an interrupt signal"))))
(lambda (x)
(if (procedure? x)
x

View File

@ -625,9 +625,9 @@
(+ q (->flonum r d))))))
(let ([n (numerator x)] [d (denominator x)])
(let ([b (bitwise-first-bit-set n)])
(if (eqv? b 0)
(if (eqv? b 0)
(let ([b (bitwise-first-bit-set d)])
(if (eqv? b 0)
(if (eqv? b 0)
(->flonum n d)
(/ (->flonum n (bitwise-arithmetic-shift-right d b))
(expt 2.0 b))))

View File

@ -30,6 +30,7 @@
(tests string-to-number)
(tests input-ports)
(tests fldiv-and-mod)
(tests parse-flonums)
)
(define (test-exact-integer-sqrt)
@ -45,6 +46,8 @@
(f 0 536870911000 536870911)
(printf "[exact-integer-sqrt] Happy Happy Joy Joy\n"))
(test-parse-flonums)
(test-reader)
(test-char-syntax)
(test-bytevectors)