mescc: Add missing defines.
* module/language/c99/compiler.mes (mescc): Set STDIN, STDOUT, STDERR, INT_MIN, INT_MAX.
This commit is contained in:
parent
efc02d9746
commit
a7f40f71ff
127
mlibc.c
127
mlibc.c
|
@ -26,6 +26,9 @@ int open (char const *s, int mode);
|
||||||
int read (int fd, void* buf, size_t n);
|
int read (int fd, void* buf, size_t n);
|
||||||
void write (int fd, char const* s, int n);
|
void write (int fd, char const* s, int n);
|
||||||
|
|
||||||
|
#define INT_MIN -2147483648
|
||||||
|
#define INT_MAX 2147483647
|
||||||
|
|
||||||
void
|
void
|
||||||
exit (int code)
|
exit (int code)
|
||||||
{
|
{
|
||||||
|
@ -40,17 +43,6 @@ exit (int code)
|
||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
assert_fail (char* s)
|
|
||||||
{
|
|
||||||
eputs ("assert fail: ");
|
|
||||||
eputs (s);
|
|
||||||
eputs ("\n");
|
|
||||||
*((int*)0) = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
|
|
||||||
|
|
||||||
char const*
|
char const*
|
||||||
getenv (char const* p)
|
getenv (char const* p)
|
||||||
{
|
{
|
||||||
|
@ -66,8 +58,10 @@ read (int fd, void* buf, size_t n)
|
||||||
"movl %1,%%ebx\n\t"
|
"movl %1,%%ebx\n\t"
|
||||||
"movl %2,%%ecx\n\t"
|
"movl %2,%%ecx\n\t"
|
||||||
"movl %3,%%edx\n\t"
|
"movl %3,%%edx\n\t"
|
||||||
|
|
||||||
"movl $0x3,%%eax\n\t"
|
"movl $0x3,%%eax\n\t"
|
||||||
"int $0x80\n\t"
|
"int $0x80\n\t"
|
||||||
|
|
||||||
"mov %%eax,%0\n\t"
|
"mov %%eax,%0\n\t"
|
||||||
: "=r" (r)
|
: "=r" (r)
|
||||||
: "" (fd), "" (buf), "" (n)
|
: "" (fd), "" (buf), "" (n)
|
||||||
|
@ -97,36 +91,6 @@ open (char const *s, int mode)
|
||||||
int puts (char const*);
|
int puts (char const*);
|
||||||
char const* itoa (int);
|
char const* itoa (int);
|
||||||
|
|
||||||
int ungetc_char = -1;
|
|
||||||
|
|
||||||
int
|
|
||||||
getchar ()
|
|
||||||
{
|
|
||||||
char c;
|
|
||||||
int i;
|
|
||||||
if (ungetc_char == -1)
|
|
||||||
{
|
|
||||||
int r = read (g_stdin, &c, 1);
|
|
||||||
if (r < 1) return -1;
|
|
||||||
i = c;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
i = 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;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
write (int fd, char const* s, int n)
|
write (int fd, char const* s, int n)
|
||||||
{
|
{
|
||||||
|
@ -145,6 +109,24 @@ write (int fd, char const* s, int n)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
brk (void *p)
|
||||||
|
{
|
||||||
|
void *r;
|
||||||
|
asm (
|
||||||
|
"mov %1,%%ebx\n\t"
|
||||||
|
|
||||||
|
"mov $0x2d,%%eax\n\t"
|
||||||
|
"int $0x80\n\t"
|
||||||
|
|
||||||
|
"mov %%eax,%0\n\t"
|
||||||
|
: "=r" (r)
|
||||||
|
: "" (p)
|
||||||
|
: "eax", "ebx"
|
||||||
|
);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
putchar (int c)
|
putchar (int c)
|
||||||
{
|
{
|
||||||
|
@ -154,14 +136,23 @@ putchar (int c)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *g_malloc_base = 0;
|
||||||
|
|
||||||
void *
|
void *
|
||||||
malloc (size_t size)
|
malloc (size_t size)
|
||||||
{
|
{
|
||||||
int *n;
|
void *p = brk (0);
|
||||||
int len = size + sizeof (size);
|
if (!g_malloc_base) g_malloc_base = p;
|
||||||
//n = mmap (0, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );
|
brk (p+size);
|
||||||
*n = len;
|
return p;
|
||||||
return (void*)(n+1);
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
realloc (void *p, size_t size)
|
||||||
|
{
|
||||||
|
(void)p;
|
||||||
|
brk (g_malloc_base + size);
|
||||||
|
return g_malloc_base;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -218,6 +209,48 @@ puts (char const* s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
assert_fail (char* s)
|
||||||
|
{
|
||||||
|
eputs ("assert fail: ");
|
||||||
|
eputs (s);
|
||||||
|
eputs ("\n");
|
||||||
|
*((int*)0) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define assert(x) ((x) ? (void)0 : assert_fail (#x))
|
||||||
|
|
||||||
|
|
||||||
|
int ungetc_char = -1;
|
||||||
|
|
||||||
|
int
|
||||||
|
getchar ()
|
||||||
|
{
|
||||||
|
char c;
|
||||||
|
int i;
|
||||||
|
if (ungetc_char == -1)
|
||||||
|
{
|
||||||
|
int r = read (g_stdin, &c, 1);
|
||||||
|
if (r < 1) return -1;
|
||||||
|
i = c;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i = 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;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
char itoa_buf[10];
|
char itoa_buf[10];
|
||||||
|
|
||||||
char const*
|
char const*
|
||||||
|
@ -248,7 +281,7 @@ itoa (int x)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
isdigit (char c)
|
isdigit (int c)
|
||||||
{
|
{
|
||||||
return (c>='0') && (c<='9');
|
return (c>='0') && (c<='9');
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,15 @@
|
||||||
#:inc-dirs (string-split (getenv "C_INCLUDE_PATH") #\:)
|
#:inc-dirs (string-split (getenv "C_INCLUDE_PATH") #\:)
|
||||||
#:cpp-defs '(
|
#:cpp-defs '(
|
||||||
"__GNUC__=0"
|
"__GNUC__=0"
|
||||||
|
"__MESCC__=1"
|
||||||
"__NYACC__=1"
|
"__NYACC__=1"
|
||||||
|
"STDIN=0"
|
||||||
|
"STDOUT=1"
|
||||||
|
"STDERR=2"
|
||||||
|
|
||||||
|
"INT_MIN=-2147483648"
|
||||||
|
"INT_MAX=2147483647"
|
||||||
|
|
||||||
"VERSION=\"0.4\""
|
"VERSION=\"0.4\""
|
||||||
"PREFIX=\"\""
|
"PREFIX=\"\""
|
||||||
)
|
)
|
||||||
|
|
|
@ -1422,9 +1422,6 @@ stderr_ (SCM x)
|
||||||
}
|
}
|
||||||
|
|
||||||
//math.c
|
//math.c
|
||||||
#define INT_MIN -2147483648
|
|
||||||
#define INT_MAX 2147483647
|
|
||||||
|
|
||||||
SCM
|
SCM
|
||||||
greater_p (SCM x) ///((name . ">") (arity . n))
|
greater_p (SCM x) ///((name . ">") (arity . n))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue