From df0dade9b7b3e1d488a5049d3cc730abd67c6692 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 12 May 2016 08:57:01 +0200 Subject: [PATCH] Implement lookahead-u8, get-u8 in Scheme * module/ice-9/ports.scm (%lookahead-u8, %get-u8): Scheme implementations. --- module/ice-9/ports.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/module/ice-9/ports.scm b/module/ice-9/ports.scm index 27a57089b..9d2e36d40 100644 --- a/module/ice-9/ports.scm +++ b/module/ice-9/ports.scm @@ -306,6 +306,27 @@ interpret its input and output." (and (> buffered 0) (bytevector-u8-ref bv cur))))) +(define* (%lookahead-u8 port) + (define (fast-path buf bv cur buffered) + (bytevector-u8-ref bv cur)) + (define (slow-path buf bv cur buffered) + (if (zero? buffered) + the-eof-object + (fast-path buf bv cur buffered))) + (peek-bytes port 1 fast-path slow-path)) + +(define* (%get-u8 port) + (define (fast-path buf bv cur buffered) + (set-port-buffer-cur! buf (1+ cur)) + (bytevector-u8-ref bv cur)) + (define (slow-path buf bv cur buffered) + (if (zero? buffered) + (begin + (set-port-buffer-has-eof?! buf #f) + the-eof-object) + (fast-path buf bv cur buffered))) + (peek-bytes port 1 fast-path slow-path)) + (define (decoding-error subr port) ;; GNU/Linux definition; fixme? (define EILSEQ 84)