core: Tune debug printing.
* src/mes.c: Tune debug printing. * src/gc.c: Likewise. * module/mes/guile.mes: Likewise. * HACKING: Describe it.
This commit is contained in:
parent
72fc46a572
commit
b65e57be31
68
HACKING
68
HACKING
|
@ -2,7 +2,16 @@
|
||||||
|
|
||||||
* SETUP
|
* SETUP
|
||||||
guix environment -l guix.scm #64 bit + 32bit
|
guix environment -l guix.scm #64 bit + 32bit
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
guix environment --system=i686-linux -l guix.scm #32 bit only
|
guix environment --system=i686-linux -l guix.scm #32 bit only
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
guix package --profile=~/.config/guix/mes --manifest=build-aux/manifest.scm
|
||||||
|
. ~/.config/guix/mes/etc/profile
|
||||||
|
|
||||||
* BUILD
|
* BUILD
|
||||||
There are two major modes to build Mes: true bootstrap and
|
There are two major modes to build Mes: true bootstrap and
|
||||||
development.
|
development.
|
||||||
|
@ -18,32 +27,48 @@ To help development we assume ./configure sets these variables for make
|
||||||
M1 -- M1
|
M1 -- M1
|
||||||
PREFIX -- ""
|
PREFIX -- ""
|
||||||
|
|
||||||
Mes is supposed to serve as a full equivalent for Guile, however mes is much, much
|
Mes is supposed to serve as a full equivalent for Guile, however Mes
|
||||||
slower than guile. That's why we usually don't use mes during development.
|
~30 times slower than Guile. That's why we usually don't use Mes
|
||||||
|
during development.
|
||||||
|
|
||||||
gcc is used to verify the sanity of our C sources.
|
Gcc is used to verify the sanity of our C sources.
|
||||||
|
|
||||||
i686-unknown-linux-gnu-gcc is used to compare hex/assembly, to test
|
i686-unknown-linux-gnu-gcc is used to compare hex/assembly, to test
|
||||||
the gcc variant of mes libc: lib/libc-gcc.c and steal ideas.
|
the gcc variant of Mes-libc: lib/libc-gcc.c and steal ideas. Target
|
||||||
|
prefix: mlibc-gcc.
|
||||||
|
|
||||||
Guile is used to develop mescc, the C compiler in Scheme that during
|
Guile is used to develop MesCC, the C compiler in Scheme that during
|
||||||
bootstrapping will be executed by mes.
|
bootstrapping will be executed by Mes.
|
||||||
|
|
||||||
** BOOTSTRAP BUILD
|
|
||||||
In bootstrap mode, we don't have gcc (CC), we don't have pa 32 bit gcc
|
|
||||||
(CC32), we have no guile (GUILE)...but we should have hex2, M1, and
|
|
||||||
FIXME: mes.M1.
|
|
||||||
|
|
||||||
mes is built from src/*.c and some out/src/*.h files that are snarfed from
|
mes is built from src/*.c and some out/src/*.h files that are snarfed from
|
||||||
src/*.c by build-aux/mes-snarf.scm.
|
src/*.c by build-aux/mes-snarf.scm.
|
||||||
|
|
||||||
Running ./make.scm produces a `script' file.
|
Running ./make.scm produces a `script' file.
|
||||||
|
|
||||||
|
** BOOTSTRAP BUILD
|
||||||
|
|
||||||
|
./build.sh
|
||||||
|
|
||||||
|
In bootstrap mode, we don't have gcc (CC), we don't have a 32 bit gcc
|
||||||
|
(CC32), we have no guile (GUILE)...but we should have hex2, M1, and
|
||||||
|
mes.M1. That's a bootstrap problem which is currently ignored by
|
||||||
|
using the mes-seed package. mes.M1 will be produced by M2-Planet from
|
||||||
|
mes.c.
|
||||||
|
|
||||||
|
|
||||||
* ROADMAP
|
* ROADMAP
|
||||||
** TODO
|
** TODO
|
||||||
*** release 0.x, unsorted
|
*** release 0.x, unsorted
|
||||||
- mes+mescc: compile a mes-tcc that can compile gcc-4.7.
|
- mes+mescc: compile a mes-tcc that can compile gcc-4.7.
|
||||||
|
- mes: set base-0.scm as default MES_BOOT, drop cat base-0.mes silliness.
|
||||||
|
- mes: real module support, bonus for supporting Guile's define-module/define-public syntax.
|
||||||
- mes: prepare src/mes.c for M2-Planet transpiler.
|
- mes: prepare src/mes.c for M2-Planet transpiler.
|
||||||
|
- mes: produce functional mes from mes.M1 transpiled by M2-Planet.
|
||||||
|
- mes: we're a full Scheme now, drop .MES prefix, use .SCM.
|
||||||
|
+ find a way to fix foo.mes/foo.scm trickery (full Guile-like module support?)
|
||||||
|
+ how about setting `guile' or even `guile-2' cond-expand features
|
||||||
|
for external libraries (Nyacc) we look like Guile/Guile-2
|
||||||
|
internally, we could make sure to start every cond-expand with (mes)
|
||||||
- mes: use more efficient scheme continuation stack (wip-array?)
|
- mes: use more efficient scheme continuation stack (wip-array?)
|
||||||
- mes: drop SCM stack in C / implement call/cc a la guile-1.8 setjmp?
|
- mes: drop SCM stack in C / implement call/cc a la guile-1.8 setjmp?
|
||||||
- mescc: refactor type(/ptr?) system; expr->type and ast-type->type.
|
- mescc: refactor type(/ptr?) system; expr->type and ast-type->type.
|
||||||
|
@ -66,7 +91,6 @@ Running ./make.scm produces a `script' file.
|
||||||
- mescc: some success with 8cc,pcc,guile/libguile/eval.c.
|
- mescc: some success with 8cc,pcc,guile/libguile/eval.c.
|
||||||
- build: guile/guix/make.scm: add file-types, intermediate, hash all dependencies
|
- build: guile/guix/make.scm: add file-types, intermediate, hash all dependencies
|
||||||
- build: make.scm: imperative->declaritive
|
- build: make.scm: imperative->declaritive
|
||||||
- mes: real module support, bonus for supporting Guile's define-module/define-public syntax.
|
|
||||||
- get full source syntax-case up (Andre van Tonder?) OR drop it.
|
- get full source syntax-case up (Andre van Tonder?) OR drop it.
|
||||||
https://srfi.schemers.org/srfi-72/srfi-72.html
|
https://srfi.schemers.org/srfi-72/srfi-72.html
|
||||||
psyntax/syntax-case and rewrite Nyacc without syntax-case+R7RS Ellipsis.
|
psyntax/syntax-case and rewrite Nyacc without syntax-case+R7RS Ellipsis.
|
||||||
|
@ -91,6 +115,26 @@ eenough to work on compiling tinycc's tcc.c albeit a somewhat modified version.
|
||||||
*** 0.2: Support psyntax
|
*** 0.2: Support psyntax
|
||||||
*** 0.1: Mes eval/apply feature complete; support syntax-rules, compile main.c using LALR, dump ELF
|
*** 0.1: Mes eval/apply feature complete; support syntax-rules, compile main.c using LALR, dump ELF
|
||||||
|
|
||||||
|
|
||||||
|
* DEBUG
|
||||||
|
MES_DEBUG=<level> mes
|
||||||
|
** Levels
|
||||||
|
1) Informational:
|
||||||
|
- MODULEDIR
|
||||||
|
- included SCM modules and sources
|
||||||
|
- result of program
|
||||||
|
- gc stats at exit
|
||||||
|
2) opened files
|
||||||
|
3) runtime gc stats
|
||||||
|
4) detailed info
|
||||||
|
- parsed, expanded program
|
||||||
|
- list of builtins
|
||||||
|
- list of symbol
|
||||||
|
- opened input strings
|
||||||
|
- gc details
|
||||||
|
5) usage of opened input strings
|
||||||
|
|
||||||
|
|
||||||
* Bugs
|
* Bugs
|
||||||
** mes: remove pmatch-car/pmatch-cdr hack.
|
** mes: remove pmatch-car/pmatch-cdr hack.
|
||||||
** mes+mescc: parse tcc.c->tcc.E works, compile tcc.E -> tcc.M1 segfaults.
|
** mes+mescc: parse tcc.c->tcc.E works, compile tcc.E -> tcc.M1 segfaults.
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
(if (eq? c #\*eof*) '()
|
(if (eq? c #\*eof*) '()
|
||||||
(cons c (read-string (read-char)))))
|
(cons c (read-string (read-char)))))
|
||||||
(let ((string (list->string (read-string (read-char)))))
|
(let ((string (list->string (read-string (read-char)))))
|
||||||
(if (and=> (getenv "MES_DEBUG") (compose (cut > <> 2) string->number))
|
(if (and=> (getenv "MES_DEBUG") (compose (cut > <> 3) string->number))
|
||||||
(core:display-error (string-append "drained: `" string "'\n")))
|
(core:display-error (string-append "drained: `" string "'\n")))
|
||||||
string)))
|
string)))
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
(define save-peek-char peek-char)
|
(define save-peek-char peek-char)
|
||||||
(define save-read-char read-char)
|
(define save-read-char read-char)
|
||||||
(define save-unread-char unread-char)
|
(define save-unread-char unread-char)
|
||||||
(if (and=> (getenv "MES_DEBUG") (compose (cut > <> 2) string->number))
|
(if (and=> (getenv "MES_DEBUG") (compose (cut > <> 3) string->number))
|
||||||
(core:display-error (string-append "with-input-from-string: `" string "'\n")))
|
(core:display-error (string-append "with-input-from-string: `" string "'\n")))
|
||||||
(let ((tell 0)
|
(let ((tell 0)
|
||||||
(end (string-length string)))
|
(end (string-length string)))
|
||||||
|
@ -118,19 +118,21 @@
|
||||||
|
|
||||||
(define core:open-input-file open-input-file)
|
(define core:open-input-file open-input-file)
|
||||||
(define (open-input-file file)
|
(define (open-input-file file)
|
||||||
(let ((port (core:open-input-file file)))
|
(let ((port (core:open-input-file file))
|
||||||
(when (getenv "MES_DEBUG")
|
(debug (and=> (getenv "MES_DEBUG") string->number)))
|
||||||
(core:display-error (string-append "open-input-file: `" file "'\n"))
|
(when (and debug (> debug 1))
|
||||||
(core:display-error "port=")
|
(core:display-error (string-append "open-input-file: `" file "'"))
|
||||||
(core:display-error port)
|
(when (> debug 3)
|
||||||
(core:display-error "\n"))
|
(core:display-error " port=")
|
||||||
|
(core:display-error port)))
|
||||||
|
(core:display-error "\n")
|
||||||
port))
|
port))
|
||||||
|
|
||||||
(define open-input-string
|
(define open-input-string
|
||||||
(let ((save-set-current-input-port #f)
|
(let ((save-set-current-input-port #f)
|
||||||
(string-port #f))
|
(string-port #f))
|
||||||
(lambda (string)
|
(lambda (string)
|
||||||
(if (and=> (getenv "MES_DEBUG") (compose (cut > <> 2) string->number))
|
(if (and=> (getenv "MES_DEBUG") (compose (cut > <> 3) string->number))
|
||||||
(core:display-error (string-append "open-input-string: `" string "'\n")))
|
(core:display-error (string-append "open-input-string: `" string "'\n")))
|
||||||
(set! save-set-current-input-port set-current-input-port)
|
(set! save-set-current-input-port set-current-input-port)
|
||||||
(set! string-port (cons '*string-port* (gensym)))
|
(set! string-port (cons '*string-port* (gensym)))
|
||||||
|
@ -141,7 +143,7 @@
|
||||||
(tell 0)
|
(tell 0)
|
||||||
(end (string-length string)))
|
(end (string-length string)))
|
||||||
(lambda (port)
|
(lambda (port)
|
||||||
(when (and=> (getenv "MES_DEBUG") (compose (cut > <> 2) string->number))
|
(when (and=> (getenv "MES_DEBUG") (compose (cut > <> 5) string->number))
|
||||||
(core:display-error (string-append "open-input-string: `" string "' save-set-current-input-port port="))
|
(core:display-error (string-append "open-input-string: `" string "' save-set-current-input-port port="))
|
||||||
(core:display-error port)
|
(core:display-error port)
|
||||||
(core:display-error "\n"))
|
(core:display-error "\n"))
|
||||||
|
@ -160,7 +162,7 @@
|
||||||
(lambda (c) (set! tell (1- tell)) c))
|
(lambda (c) (set! tell (1- tell)) c))
|
||||||
(set! set-current-input-port
|
(set! set-current-input-port
|
||||||
(lambda (port)
|
(lambda (port)
|
||||||
(when (getenv "MES_DEBUG")
|
(when (and=> (getenv "MES_DEBUG") (compose (cut > <> 4) string->number))
|
||||||
(core:display-error (string-append "open-input-string: `" string "' set-current-input-port port="))
|
(core:display-error (string-append "open-input-string: `" string "' set-current-input-port port="))
|
||||||
(core:display-error port)
|
(core:display-error port)
|
||||||
(core:display-error "\n"))
|
(core:display-error "\n"))
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
'begin
|
'begin
|
||||||
(list 'set! '*modules* (list cons (list string->symbol (module->file module)) '*modules*))
|
(list 'set! '*modules* (list cons (list string->symbol (module->file module)) '*modules*))
|
||||||
(list 'load (list string-append '%moduledir (module->file module))))
|
(list 'load (list string-append '%moduledir (module->file module))))
|
||||||
(list 'if (getenv "MES_DEBUG")
|
(list 'if (and (getenv "MES_DEBUG") (list '> (list 'core:cdr (list 'car (list 'string->list (getenv "MES_DEBUG")))) 50))
|
||||||
(list 'begin
|
(list 'begin
|
||||||
(list core:display-error ";;; already loaded: ")
|
(list core:display-error ";;; already loaded: ")
|
||||||
(list core:display-error (list 'quote module))
|
(list core:display-error (list 'quote module))
|
||||||
|
@ -58,7 +58,5 @@
|
||||||
(set-current-input-port (pop! *input-ports*))
|
(set-current-input-port (pop! *input-ports*))
|
||||||
x))
|
x))
|
||||||
(define (mes-load-module-env module a)
|
(define (mes-load-module-env module a)
|
||||||
(core:display-error "loading:") (core:write-error (string-append %moduledir (module->file module))) (core:display-error "\n")
|
(core:write-error (string-append %moduledir (module->file module))) (core:display-error "\n")
|
||||||
(primitive-load (string-append %moduledir (module->file module)))
|
(primitive-load (string-append %moduledir (module->file module))))
|
||||||
(core:display-error "dun\n")
|
|
||||||
)
|
|
||||||
|
|
|
@ -35,6 +35,12 @@
|
||||||
(if (null? (cdr rest)) (car rest)
|
(if (null? (cdr rest)) (car rest)
|
||||||
(append2 (car rest) (apply append (cdr rest))))))
|
(append2 (car rest) (apply append (cdr rest))))))
|
||||||
|
|
||||||
|
(define-macro (and . x)
|
||||||
|
(if (null? x) #t
|
||||||
|
(if (null? (cdr x)) (car x)
|
||||||
|
(list (quote if) (car x) (cons (quote and) (cdr x))
|
||||||
|
#f))))
|
||||||
|
|
||||||
(define (string->list s)
|
(define (string->list s)
|
||||||
(core:car s))
|
(core:car s))
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,12 @@
|
||||||
(if (null? (cdr rest)) (car rest)
|
(if (null? (cdr rest)) (car rest)
|
||||||
(append2 (car rest) (apply append (cdr rest))))))
|
(append2 (car rest) (apply append (cdr rest))))))
|
||||||
|
|
||||||
|
(define-macro (and . x)
|
||||||
|
(if (null? x) #t
|
||||||
|
(if (null? (cdr x)) (car x)
|
||||||
|
(list (quote if) (car x) (cons (quote and) (cdr x))
|
||||||
|
#f))))
|
||||||
|
|
||||||
(define (string->list s)
|
(define (string->list s)
|
||||||
(core:car s))
|
(core:car s))
|
||||||
|
|
||||||
|
|
|
@ -159,4 +159,4 @@ Usage: mescc.mes [OPTION]... FILE...
|
||||||
(objects->elf objects))))))))))
|
(objects->elf objects))))))))))
|
||||||
|
|
||||||
(main (command-line))
|
(main (command-line))
|
||||||
()
|
'done
|
||||||
|
|
8
src/gc.c
8
src/gc.c
|
@ -48,7 +48,7 @@ gc_flip () ///((internal))
|
||||||
struct scm *cells = g_cells;
|
struct scm *cells = g_cells;
|
||||||
g_cells = g_news;
|
g_cells = g_news;
|
||||||
g_news = cells;
|
g_news = cells;
|
||||||
if (g_debug > 1)
|
if (g_debug > 2)
|
||||||
{
|
{
|
||||||
eputs (";;; => jam[");
|
eputs (";;; => jam[");
|
||||||
eputs (itoa (g_free));
|
eputs (itoa (g_free));
|
||||||
|
@ -137,9 +137,9 @@ gc_check ()
|
||||||
SCM
|
SCM
|
||||||
gc ()
|
gc ()
|
||||||
{
|
{
|
||||||
if (g_debug == 1)
|
if (g_debug == 2)
|
||||||
eputs (".");
|
eputs (".");
|
||||||
if (g_debug > 1)
|
if (g_debug > 2)
|
||||||
{
|
{
|
||||||
eputs (";;; gc[");
|
eputs (";;; gc[");
|
||||||
eputs (itoa (g_free));
|
eputs (itoa (g_free));
|
||||||
|
@ -156,7 +156,7 @@ gc ()
|
||||||
g_symbols = gc_copy (g_symbols);
|
g_symbols = gc_copy (g_symbols);
|
||||||
g_macros = gc_copy (g_macros);
|
g_macros = gc_copy (g_macros);
|
||||||
SCM new = gc_copy (g_stack);
|
SCM new = gc_copy (g_stack);
|
||||||
if (g_debug > 1)
|
if (g_debug > 3)
|
||||||
{
|
{
|
||||||
eputs ("new=");
|
eputs ("new=");
|
||||||
eputs (itoa (new));
|
eputs (itoa (new));
|
||||||
|
|
54
src/mes.c
54
src/mes.c
|
@ -430,11 +430,13 @@ car_ (SCM x)
|
||||||
SCM
|
SCM
|
||||||
cdr_ (SCM x)
|
cdr_ (SCM x)
|
||||||
{
|
{
|
||||||
return (TYPE (CDR (x)) == TPAIR
|
return (TYPE (x) != TCHAR
|
||||||
|| TYPE (CDR (x)) == TREF
|
&& TYPE (x) != TNUMBER
|
||||||
|| TYPE (CAR (x)) == TSPECIAL
|
&& (TYPE (CDR (x)) == TPAIR
|
||||||
|| TYPE (CDR (x)) == TSYMBOL
|
|| TYPE (CDR (x)) == TREF
|
||||||
|| TYPE (CDR (x)) == TSTRING) ? CDR (x) : MAKE_NUMBER (CDR (x));
|
|| TYPE (CDR (x)) == TSPECIAL
|
||||||
|
|| TYPE (CDR (x)) == TSYMBOL
|
||||||
|
|| TYPE (CDR (x)) == TSTRING)) ? CDR (x) : MAKE_NUMBER (CDR (x));
|
||||||
}
|
}
|
||||||
|
|
||||||
SCM
|
SCM
|
||||||
|
@ -573,7 +575,7 @@ check_formals (SCM f, SCM formals, SCM args) ///((internal))
|
||||||
eputs (", got: ");
|
eputs (", got: ");
|
||||||
eputs (itoa (alen));
|
eputs (itoa (alen));
|
||||||
eputs ("\n");
|
eputs ("\n");
|
||||||
display_error_ (f);
|
write_error_ (f);
|
||||||
SCM e = MAKE_STRING (cstring_to_list (s));
|
SCM e = MAKE_STRING (cstring_to_list (s));
|
||||||
return error (cell_symbol_wrong_number_of_args, cons (e, f));
|
return error (cell_symbol_wrong_number_of_args, cons (e, f));
|
||||||
}
|
}
|
||||||
|
@ -1574,15 +1576,10 @@ mes_symbols () ///((internal))
|
||||||
a = acons (cell_symbol_mes_version, MAKE_STRING (cstring_to_list (VERSION)), a);
|
a = acons (cell_symbol_mes_version, MAKE_STRING (cstring_to_list (VERSION)), a);
|
||||||
a = acons (cell_symbol_mes_prefix, MAKE_STRING (cstring_to_list (PREFIX)), a);
|
a = acons (cell_symbol_mes_prefix, MAKE_STRING (cstring_to_list (PREFIX)), a);
|
||||||
|
|
||||||
a = acons (cell_symbol_dot, cell_dot, a);
|
|
||||||
|
|
||||||
a = acons (cell_symbol_begin, cell_begin, a);
|
|
||||||
a = acons (cell_symbol_quasisyntax, cell_symbol_quasisyntax, a);
|
|
||||||
|
|
||||||
a = acons (cell_symbol_call_with_values, cell_symbol_call_with_values, a);
|
a = acons (cell_symbol_call_with_values, cell_symbol_call_with_values, a);
|
||||||
a = acons (cell_symbol_current_module, cell_symbol_current_module, a);
|
a = acons (cell_symbol_current_module, cell_symbol_current_module, a);
|
||||||
a = acons (cell_symbol_call_with_current_continuation, cell_call_with_current_continuation, a);
|
a = acons (cell_symbol_call_with_current_continuation, cell_call_with_current_continuation, a);
|
||||||
a = acons (cell_symbol_sc_expand, cell_f, a);
|
|
||||||
|
|
||||||
#if __GNUC__
|
#if __GNUC__
|
||||||
a = acons (cell_symbol_gnuc, cell_t, a);
|
a = acons (cell_symbol_gnuc, cell_t, a);
|
||||||
|
@ -1644,7 +1641,7 @@ mes_builtins (SCM a) ///((internal))
|
||||||
#include "vector.environment.i"
|
#include "vector.environment.i"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (g_debug > 1)
|
if (g_debug > 3)
|
||||||
{
|
{
|
||||||
fputs ("functions: ", STDERR);
|
fputs ("functions: ", STDERR);
|
||||||
fputs (itoa (g_function), STDERR);
|
fputs (itoa (g_function), STDERR);
|
||||||
|
@ -1789,7 +1786,7 @@ bload_env (SCM a) ///((internal))
|
||||||
set_env_x (cell_symbol_mesc, cell_t, r0);
|
set_env_x (cell_symbol_mesc, cell_t, r0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (g_debug > 1)
|
if (g_debug > 3)
|
||||||
{
|
{
|
||||||
eputs ("symbols: ");
|
eputs ("symbols: ");
|
||||||
SCM s = g_symbols;
|
SCM s = g_symbols;
|
||||||
|
@ -1828,7 +1825,8 @@ main (int argc, char *argv[])
|
||||||
if (g_debug)
|
if (g_debug)
|
||||||
{
|
{
|
||||||
eputs (";;; MODULEDIR=");
|
eputs (";;; MODULEDIR=");
|
||||||
eputs (MODULEDIR);eputs ("\n");
|
eputs (MODULEDIR);
|
||||||
|
eputs ("\n");
|
||||||
}
|
}
|
||||||
if (p = getenv ("MES_MAX_ARENA"))
|
if (p = getenv ("MES_MAX_ARENA"))
|
||||||
MAX_ARENA_SIZE = atoi (p);
|
MAX_ARENA_SIZE = atoi (p);
|
||||||
|
@ -1857,21 +1855,39 @@ main (int argc, char *argv[])
|
||||||
r0 = acons (cell_symbol_argv, lst, r0); // FIXME
|
r0 = acons (cell_symbol_argv, lst, r0); // FIXME
|
||||||
r0 = acons (cell_symbol_argv, lst, r0);
|
r0 = acons (cell_symbol_argv, lst, r0);
|
||||||
push_cc (r2, cell_unspecified, r0, cell_unspecified);
|
push_cc (r2, cell_unspecified, r0, cell_unspecified);
|
||||||
if (g_debug > 1)
|
|
||||||
|
if (g_debug > 2)
|
||||||
|
{
|
||||||
|
eputs ("\ngc stats: [");
|
||||||
|
eputs (itoa (g_free));
|
||||||
|
eputs ("]\n");
|
||||||
|
}
|
||||||
|
if (g_debug > 3)
|
||||||
{
|
{
|
||||||
eputs ("program: ");
|
eputs ("program: ");
|
||||||
write_error_ (r1);
|
write_error_ (r1);
|
||||||
eputs ("\n");
|
eputs ("\n");
|
||||||
}
|
}
|
||||||
|
if (g_debug > 3)
|
||||||
|
{
|
||||||
|
eputs ("symbols: ");
|
||||||
|
write_error_ (g_symbols);
|
||||||
|
eputs ("\n");
|
||||||
|
}
|
||||||
r3 = cell_vm_begin_expand;
|
r3 = cell_vm_begin_expand;
|
||||||
r1 = eval_apply ();
|
r1 = eval_apply ();
|
||||||
write_error_ (r1);
|
|
||||||
eputs ("\n");
|
|
||||||
if (g_debug)
|
if (g_debug)
|
||||||
{
|
{
|
||||||
gc (g_stack);
|
write_error_ (r1);
|
||||||
|
eputs ("\n");
|
||||||
|
}
|
||||||
|
if (g_debug)
|
||||||
|
{
|
||||||
eputs ("\ngc stats: [");
|
eputs ("\ngc stats: [");
|
||||||
eputs (itoa (g_free));
|
eputs (itoa (g_free));
|
||||||
|
gc (g_stack);
|
||||||
|
eputs (" => ");
|
||||||
|
eputs (itoa (g_free));
|
||||||
eputs ("]\n");
|
eputs ("]\n");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue