(formals (.formals o))
(text (formals->text formals))
(locals (formals->locals formals)))
- (format (current-error-port) "compiling ~s\n" name)
+ (format (current-error-port) "compiling: ~a\n" name)
(let loop ((statements (.statements o))
(info (clone info #:locals locals #:function (.name o) #:text text)))
(if (null? statements) (clone info
(loop (cdr elements) ((ast->info info) (car elements)))))))
(define (c99-input->info)
- (stderr "COMPILE\n")
- (let* ((ast (c99-input->ast))
- (info (make <info>
+ (let* ((info (make <info>
#:functions i386:libc
#:types i386:type-alist))
- (ast (append libc ast))
+ (foo (stderr "compiling: mlibc\n"))
+ (info (let loop ((info info) (libc libc))
+ (if (null? libc) info
+ (loop ((ast->info info) ((car libc))) (cdr libc)))))
+ (foo (stderr "parsing: input\n"))
+ (ast (c99-input->ast))
+ (foo (stderr "compiling: input\n"))
(info ((ast->info info) ast))
- (info ((ast->info info) _start)))
+ (info ((ast->info info) (_start))))
info))
(define (write-any x)
(mes-use-module (nyacc lang c99 parser))
(mes-use-module (mes libc-i386))))
-(define _start
- (let* ((argc-argv (i386:_start))
- (ast (with-input-from-string
- (string-append "
+(define (_start)
+ (let ((argc-argv (i386:_start)))
+ (format (current-error-port) "parsing: _start\n")
+ (with-input-from-string
+ (string-append "
char **g_environment;
char **
_env (char **e)
int r = main ();
exit (r);
}
-")
- parse-c99)))
- ast))
+") parse-c99)))
-(define strlen
- (let* ((ast (with-input-from-string
- "
+(define (strlen)
+ (format (current-error-port) "parsing: strlen\n")
+ (with-input-from-string
+ "
int
strlen (char const* s)
{
while (s[i]) i++;
return i;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define getchar
- (let* ((ast (with-input-from-string
- "
+(define (getchar)
+ (format (current-error-port) "parsing: getchar\n")
+ (with-input-from-string
+ "
int g_stdin = 0;
int ungetc_char = -1;
char ungetc_buf[2];
int r = read (g_stdin, &c, 1);
if (r < 1) return -1;
i = c;
- }
+ }
else
{
- //FIXME
- //i = ungetc_buf[ungetc_char--];
- i = ungetc_buf[ungetc_char];
- //ungetc_char--;
- 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;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define assert_fail
- (let* ((ast (with-input-from-string
- "
+(define (assert_fail)
+ (format (current-error-port) "parsing: assert_fail\n")
+ (with-input-from-string
+ "
void
assert_fail (char* s)
{
fail = 0;
*fail = 0;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
-
-(define ungetc
- (let* ((ast (with-input-from-string
-"
+" parse-c99))
+
+(define (ungetc)
+ (format (current-error-port) "parsing: ungetc\n")
+ (with-input-from-string
+ "
//#define assert(x) ((x) ? (void)0 : assert_fail (#x))
int
ungetc (int c, int fd)
ungetc_char++;
ungetc_buf[ungetc_char] = c;
return c;
-}
-"
-;;paredit:"
- parse-c99)))
- ast))
+ }
+" parse-c99))
-(define putchar
- (let* ((ast (with-input-from-string
- "
+(define (putchar)
+ (format (current-error-port) "parsing: putchar\n")
+ (with-input-from-string
+ "
int
putchar (int c)
{
write (1, (char*)&c, 1);
return 0;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define fputc
- (let* ((ast (with-input-from-string
- "
+(define (fputc)
+ (format (current-error-port) "parsing: fputc\n")
+ (with-input-from-string
+ "
int
fputc (int c, int fd)
{
write (fd, (char*)&c, 1);
return 0;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define eputs
- (let* ((ast (with-input-from-string
- "
+(define (eputs)
+ (format (current-error-port) "parsing: eputs\n")
+ (with-input-from-string
+ "
int
eputs (char const* s)
{
write (2, s, i);
return 0;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define fputs
- (let* ((ast (with-input-from-string
- "
+
+(define (fputs)
+ (format (current-error-port) "parsing: fputs\n")
+ (with-input-from-string
+ "
int
fputs (char const* s, int fd)
{
write (fd, s, i);
return 0;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define puts
- (let* ((ast (with-input-from-string
- "
+(define (puts)
+ (format (current-error-port) "parsing: puts\n")
+ (with-input-from-string
+ "
int
puts (char const* s)
{
write (1, s, i);
return 0;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define strcmp
- (let* ((ast (with-input-from-string
- "
+(define (strcmp)
+ (format (current-error-port) "parsing: strcmp\n")
+ (with-input-from-string
+ "
int
strcmp (char const* a, char const* b)
{
- while (*a && *b && *a == *b)
+ while (*a && *b && *a == *b)
{
a++;b++;
}
return *a - *b;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define itoa
- (let* ((ast (with-input-from-string
- "
+(define (itoa)
+ (format (current-error-port) "parsing: itoa\n")
+ (with-input-from-string
+ "
char itoa_buf[10];
char const*
x = -x;
do
- {
- *p-- = '0' + (x % 10);
- x = x / 10;
- } while (x);
+ {
+ *p-- = '0' + (x % 10);
+ x = x / 10;
+ } while (x);
if (sign)
*p-- = '-';
return p+1;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define isdigit
- (let* ((ast (with-input-from-string
- "
+(define (isdigit)
+ (format (current-error-port) "parsing: isdigit\n")
+ (with-input-from-string
+ "
int
isdigit (char c)
{
if (c>='0' && c<='9') return 1;
return 0;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define atoi
- (let* ((ast (with-input-from-string
- "
+(define (atoi)
+ (format (current-error-port) "parsing: atoi\n")
+ (with-input-from-string
+ "
int
atoi (char const *s)
{
}
return i * sign;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define malloc
- (let* ((ast (with-input-from-string
- "
+(define (malloc)
+ (format (current-error-port) "parsing: malloc\n")
+ (with-input-from-string
+ "
//void *g_malloc_base = 0;
char *g_malloc_base = 0;
brk (p+size);
return p;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define realloc
- (let* ((ast (with-input-from-string
- "
+(define (realloc)
+ (format (current-error-port) "parsing: realloc\n")
+ (with-input-from-string
+ "
//void *
int *
//realloc (void *p, int size)
brk (g_malloc_base + size);
return g_malloc_base;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define strncmp
- (let* ((ast (with-input-from-string
- "
+(define (strncmp)
+ (format (current-error-port) "parsing: strncmp\n")
+ (with-input-from-string
+ "
int
strncmp (char const* a, char const* b, int length)
{
while (*a && *b && *a == *b && --length) {a++;b++;}
return *a - *b;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
+" parse-c99))
-(define c:getenv
- (let* ((ast (with-input-from-string
+(define (c:getenv)
+ (format (current-error-port) "parsing: getenv\n")
+ (with-input-from-string
"
char **g_environment;
char const*
}
return 0;
}
-"
-;;paredit:"
- parse-c99)))
- ast))
-
+" parse-c99))
(define libc
(list