adding type-checking on the remaining I/O opcodes

This commit is contained in:
Alex Shinn 2010-03-09 19:08:58 +09:00
parent a630d84413
commit 95e0b0bb31

8
eval.c
View file

@ -1942,19 +1942,27 @@ sexp sexp_vm (sexp ctx, sexp proc) {
case SEXP_OP_WRITE_CHAR: case SEXP_OP_WRITE_CHAR:
if (! sexp_charp(_ARG1)) if (! sexp_charp(_ARG1))
sexp_raise("write-char: not a character", sexp_list1(ctx, _ARG1)); sexp_raise("write-char: not a character", sexp_list1(ctx, _ARG1));
if (! sexp_oportp(_ARG2))
sexp_raise("write-char: not an output-port", sexp_list1(ctx, _ARG2));
sexp_write_char(ctx, sexp_unbox_character(_ARG1), _ARG2); sexp_write_char(ctx, sexp_unbox_character(_ARG1), _ARG2);
_ARG2 = SEXP_VOID; _ARG2 = SEXP_VOID;
top--; top--;
break; break;
case SEXP_OP_NEWLINE: case SEXP_OP_NEWLINE:
if (! sexp_oportp(_ARG1))
sexp_raise("newline: not an output-port", sexp_list1(ctx, _ARG1));
sexp_newline(ctx, _ARG1); sexp_newline(ctx, _ARG1);
_ARG1 = SEXP_VOID; _ARG1 = SEXP_VOID;
break; break;
case SEXP_OP_READ_CHAR: case SEXP_OP_READ_CHAR:
if (! sexp_iportp(_ARG1))
sexp_raise("read-char: not an intput-port", sexp_list1(ctx, _ARG1));
i = sexp_read_char(ctx, _ARG1); i = sexp_read_char(ctx, _ARG1);
_ARG1 = (i == EOF) ? SEXP_EOF : sexp_make_character(i); _ARG1 = (i == EOF) ? SEXP_EOF : sexp_make_character(i);
break; break;
case SEXP_OP_PEEK_CHAR: case SEXP_OP_PEEK_CHAR:
if (! sexp_iportp(_ARG1))
sexp_raise("peek-char: not an intput-port", sexp_list1(ctx, _ARG1));
i = sexp_read_char(ctx, _ARG1); i = sexp_read_char(ctx, _ARG1);
sexp_push_char(ctx, i, _ARG1); sexp_push_char(ctx, i, _ARG1);
_ARG1 = (i == EOF) ? SEXP_EOF : sexp_make_character(i); _ARG1 = (i == EOF) ? SEXP_EOF : sexp_make_character(i);