mescc: Have ungetc remember 2 positions.
* 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.
This commit is contained in:
parent
0685c9e7e8
commit
dbd987ab19
11
mlibc.c
11
mlibc.c
|
@ -222,6 +222,7 @@ assert_fail (char* s)
|
||||||
|
|
||||||
|
|
||||||
int ungetc_char = -1;
|
int ungetc_char = -1;
|
||||||
|
char ungetc_buf[2];
|
||||||
|
|
||||||
int
|
int
|
||||||
getchar ()
|
getchar ()
|
||||||
|
@ -235,10 +236,8 @@ getchar ()
|
||||||
i = c;
|
i = c;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
i = ungetc_buf[ungetc_char--];
|
||||||
i = ungetc_char;
|
|
||||||
ungetc_char = -1;
|
|
||||||
}
|
|
||||||
if (i < 0) i += 256;
|
if (i < 0) i += 256;
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -246,8 +245,8 @@ getchar ()
|
||||||
int
|
int
|
||||||
ungetc (int c, int fd)
|
ungetc (int c, int fd)
|
||||||
{
|
{
|
||||||
assert (ungetc_char == -1);
|
assert (ungetc_char < 2);
|
||||||
ungetc_char = c;
|
ungetc_buf[++ungetc_char] = c;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,9 +56,6 @@ strlen (char const* s)
|
||||||
(define getchar
|
(define getchar
|
||||||
(let* ((ast (with-input-from-string
|
(let* ((ast (with-input-from-string
|
||||||
"
|
"
|
||||||
int g_stdin;
|
|
||||||
int ungetc_char = -1;
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
int
|
int
|
||||||
getchar ()
|
getchar ()
|
||||||
|
@ -71,6 +68,9 @@ getchar ()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int g_stdin = 0;
|
||||||
|
int ungetc_char = -1;
|
||||||
|
char ungetc_buf[2];
|
||||||
int
|
int
|
||||||
getchar ()
|
getchar ()
|
||||||
{
|
{
|
||||||
|
@ -84,8 +84,11 @@ getchar ()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
i = ungetc_char;
|
//FIXME
|
||||||
ungetc_char = -1;
|
//i = ungetc_buf[ungetc_char--];
|
||||||
|
i = ungetc_buf[ungetc_char];
|
||||||
|
//ungetc_char--;
|
||||||
|
ungetc_char = ungetc_char - 1;
|
||||||
}
|
}
|
||||||
if (i < 0) i += 256;
|
if (i < 0) i += 256;
|
||||||
return i;
|
return i;
|
||||||
|
@ -121,8 +124,13 @@ assert_fail (char* s)
|
||||||
int
|
int
|
||||||
ungetc (int c, int fd)
|
ungetc (int c, int fd)
|
||||||
{
|
{
|
||||||
assert (ungetc_char == -1);
|
//FIXME
|
||||||
ungetc_char = c;
|
//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;
|
return c;
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#if __MESCC__
|
#if __MESCC__
|
||||||
//void *g_malloc_base = 0;
|
//void *g_malloc_base = 0;
|
||||||
char *g_malloc_base = 0;
|
char *g_malloc_base = 0;
|
||||||
|
// int ungetc_char = -1;
|
||||||
|
// char ungetc_buf[2];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MES_MINI 1
|
#define MES_MINI 1
|
||||||
|
|
15
scaffold/t.c
15
scaffold/t.c
|
@ -147,10 +147,9 @@ get ()
|
||||||
int
|
int
|
||||||
read_test ()
|
read_test ()
|
||||||
{
|
{
|
||||||
puts ("read test\n");
|
|
||||||
char *p = (char*)g_chars;
|
char *p = (char*)g_chars;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
puts ("t: read 0123456789\n");
|
puts ("t: read 0123456789\nt: ");
|
||||||
int c = get ();
|
int c = get ();
|
||||||
while (i < 10) {
|
while (i < 10) {
|
||||||
*p++ = c;
|
*p++ = c;
|
||||||
|
@ -160,6 +159,18 @@ read_test ()
|
||||||
}
|
}
|
||||||
puts ("\n");
|
puts ("\n");
|
||||||
if (strcmp (g_chars, "0123456789")) return 1;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue