* (interrupt-handler) is added to handle INT signals.
* Cafes now customize the interrupt-handler to suppress the error message during read that the default interrupt handler generates.
This commit is contained in:
		
							parent
							
								
									da9518cc49
								
							
						
					
					
						commit
						4f5490039b
					
				
							
								
								
									
										
											BIN
										
									
								
								src/ikarus.boot
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								src/ikarus.boot
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -46,6 +46,16 @@ description: | |||
|             (display ">" (console-output-port)) | ||||
|             (display-prompt (fx+ i 1)))))) | ||||
| 
 | ||||
|   (define my-read | ||||
|     (lambda (k) | ||||
|       (parameterize ([interrupt-handler | ||||
|                       (lambda () | ||||
|                         (flush-output-port (console-output-port)) | ||||
|                         (reset-input-port! (console-input-port)) | ||||
|                         (newline (console-output-port)) | ||||
|                         (k))]) | ||||
|          (read (console-input-port))))) | ||||
| 
 | ||||
|   (define wait | ||||
|     (lambda (eval escape-k) | ||||
|       (call/cc | ||||
|  | @ -57,7 +67,7 @@ description: | |||
|               (k (void))) | ||||
|             (lambda () | ||||
|               (display-prompt 0) | ||||
|               (let ([x (read (console-input-port))]) | ||||
|               (let ([x (my-read k)]) | ||||
|                 (cond | ||||
|                   [(eof-object? x)  | ||||
|                    (newline (console-output-port)) | ||||
|  |  | |||
|  | @ -1176,19 +1176,6 @@ reference-implementation: | |||
| ;;X            (error 'make-parameter "insufficient arguments"))))) | ||||
| ;;X  | ||||
| 
 | ||||
| (primitive-set! 'make-parameter | ||||
|   (case-lambda | ||||
|     [(x)  | ||||
|      (case-lambda | ||||
|        [() x] | ||||
|        [(v) (set! x v)])] | ||||
|     [(x guard) | ||||
|      (unless (procedure? guard) | ||||
|        (error 'make-parameter "~s is not a procedure" guard)) | ||||
|      (set! x (guard x)) | ||||
|      (case-lambda | ||||
|        [() x] | ||||
|        [(v) (set! x (guard v))])])) | ||||
| 
 | ||||
| (let () | ||||
|    (define vector-loop | ||||
|  |  | |||
|  | @ -1,8 +1,34 @@ | |||
| 
 | ||||
| 
 | ||||
| (primitive-set! 'make-parameter | ||||
|   (case-lambda | ||||
|     [(x)  | ||||
|      (case-lambda | ||||
|        [() x] | ||||
|        [(v) (set! x v)])] | ||||
|     [(x guard) | ||||
|      (unless (procedure? guard) | ||||
|        (error 'make-parameter "~s is not a procedure" guard)) | ||||
|      (set! x (guard x)) | ||||
|      (case-lambda | ||||
|        [() x] | ||||
|        [(v) (set! x (guard v))])])) | ||||
| 
 | ||||
| 
 | ||||
| (primitive-set! 'error | ||||
|   (lambda args | ||||
|     (foreign-call "ik_error" args))) | ||||
| 
 | ||||
| (primitive-set! 'interrupt-handler | ||||
|   (make-parameter | ||||
|     (lambda () | ||||
|       (flush-output-port (console-output-port)) | ||||
|       (error #f "interrupted")) | ||||
|     (lambda (x) | ||||
|       (if (procedure? x) | ||||
|           x | ||||
|           (error 'interrupt-handler "~s is not a procedure" x))))) | ||||
| 
 | ||||
| (primitive-set! '$apply-nonprocedure-error-handler | ||||
|   (lambda (x) | ||||
|     (error 'apply "~s is not a procedure" x))) | ||||
|  | @ -77,7 +103,7 @@ | |||
|     (if ($interrupted?) | ||||
|         (begin | ||||
|           ($unset-interrupted!) | ||||
|           (error #f "Interrupted")) | ||||
|           ((interrupt-handler))) | ||||
|         (display "Engine Expired\n" (console-output-port))))) | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -83,6 +83,7 @@ | |||
|     quotient+remainder quotient remainder number? positive? | ||||
|     negative? zero? number->string logand = < > <= >= | ||||
|     make-guardian weak-cons collect  | ||||
|     interrupt-handler | ||||
|     )) | ||||
| 
 | ||||
| (define system-primitives | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Abdulaziz Ghuloum
						Abdulaziz Ghuloum