Every now and then in IMAIL I get this error:

The object #f, passed as the first argument to char->integer, is not
the correct type.

 S0  (char->integer #f)
 S1  ;unknown compiled code
 S2  (char-code char)
 S3  (char-in-set? char delimiters)
 S4  ;unknown compiled code
 S5  (read-delimited-string delimiters port)
...

The call to char-in-set? is inside input-port/read-string.  It looks
like generic-io/read-char returns a character or whatever the input
buffer normalizer returns.  What might that be?

The crlf normalizer explicitly returns #f in some cases.  The newline
normalizer (the one used in this case) defers to decode-char, which
returns whatever peek-byte returns if it's not a fixnum.  peek-byte,
in turn, is defined in terms of peek-u8, and returns eof-object in
some states, but #f in the closed state (the state the port is in now,
in this case).

Personally I'm partial to #f because I think the eof object is a
design mistake (read should have just returned two values or similar),
and #f is conveniently represented by the all-zero machine word.

But I don't care which one it uses internally, as long as the logic is
consistent and makes it clear everywhere what the possible return
values are.

Reply via email to