* doc/examples/t.c (read_test): Test it.
* doc/examples/mini-mes.c:
* mlibc.c (getchar, ungetc): Support 2 ungetc positions.
* module/mes/libc.mes (getchar, ungetc): Likewise.
int ungetc_char = -1;
+char ungetc_buf[2];
int
getchar ()
i = c;
}
else
- {
- i = ungetc_char;
- ungetc_char = -1;
- }
+ i = ungetc_buf[ungetc_char--];
+
if (i < 0) i += 256;
return i;
}
int
ungetc (int c, int fd)
{
- assert (ungetc_char == -1);
- ungetc_char = c;
+ assert (ungetc_char < 2);
+ ungetc_buf[++ungetc_char] = c;
return c;
}
(define getchar
(let* ((ast (with-input-from-string
"
-int g_stdin;
-int ungetc_char = -1;
-
#if 0
int
getchar ()
}
#endif
+int g_stdin = 0;
+int ungetc_char = -1;
+char ungetc_buf[2];
int
getchar ()
{
}
else
{
- i = ungetc_char;
- ungetc_char = -1;
+ //FIXME
+ //i = ungetc_buf[ungetc_char--];
+ i = ungetc_buf[ungetc_char];
+ //ungetc_char--;
+ ungetc_char = ungetc_char - 1;
}
if (i < 0) i += 256;
return i;
int
ungetc (int c, int fd)
{
- assert (ungetc_char == -1);
- ungetc_char = c;
+ //FIXME
+ //assert (ungetc_char < 2);
+ assert (ungetc_char == -1 || ungetc_char < 2);
+ //FIXME
+ //ungetc_buf[++ungetc_char] = c;
+ ungetc_char++;
+ ungetc_buf[ungetc_char] = c;
return c;
}
"
#if __MESCC__
//void *g_malloc_base = 0;
char *g_malloc_base = 0;
+// int ungetc_char = -1;
+// char ungetc_buf[2];
#endif
#define MES_MINI 1
int
read_test ()
{
- puts ("read test\n");
char *p = (char*)g_chars;
int i = 0;
- puts ("t: read 0123456789\n");
+ puts ("t: read 0123456789\nt: ");
int c = get ();
while (i < 10) {
*p++ = c;
}
puts ("\n");
if (strcmp (g_chars, "0123456789")) return 1;
+
+ puts ("t: ungetc ('A') == getchar ()\n");
+ ungetc ('A', STDIN);
+ if (getchar () != 'A') return 1;
+ ungetc (0, STDIN);
+ //ungetc ('\1', STDIN);
+ ungetc (1, STDIN);
+ puts ("t: ungetc ();ungetc ();getchar ();getchar ()\n");
+ if (getchar () != 1) return 1;
+ //if (getchar () != '\0') return 1;
+ if (getchar () != 0) return 1;
+
return 0;
}