11 out of 12 unit tests passing, progress!
I don't understand why it works, but it works.
This commit is contained in:
parent
784fdce49a
commit
36d8431a91
26 changed files with 547 additions and 580 deletions
78
src/init.c
78
src/init.c
|
|
@ -21,14 +21,13 @@
|
|||
#include "lispops.h"
|
||||
#include "repl.h"
|
||||
|
||||
void bind_function(char *name, struct cons_pointer (*executable)
|
||||
(struct stack_frame *, struct cons_pointer))
|
||||
{
|
||||
deep_bind(intern(c_string_to_lisp_symbol(name), oblist),
|
||||
make_function(NIL, executable));
|
||||
void bind_function( char *name, struct cons_pointer ( *executable )
|
||||
( struct stack_frame *, struct cons_pointer ) ) {
|
||||
deep_bind( intern( c_string_to_lisp_symbol( name ), oblist ),
|
||||
make_function( NIL, executable ) );
|
||||
}
|
||||
|
||||
void bind_special(char *name, struct cons_pointer (*executable)
|
||||
void bind_special( char *name, struct cons_pointer ( *executable )
|
||||
|
||||
|
||||
|
||||
|
|
@ -37,27 +36,25 @@ void bind_special(char *name, struct cons_pointer (*executable)
|
|||
|
||||
|
||||
|
||||
(struct cons_pointer s_expr, struct cons_pointer env,
|
||||
struct stack_frame * frame))
|
||||
{
|
||||
deep_bind(intern(c_string_to_lisp_symbol(name), oblist),
|
||||
make_special(NIL, executable));
|
||||
( struct cons_pointer s_expr, struct cons_pointer env,
|
||||
struct stack_frame * frame ) ) {
|
||||
deep_bind( intern( c_string_to_lisp_symbol( name ), oblist ),
|
||||
make_special( NIL, executable ) );
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int main( int argc, char *argv[] ) {
|
||||
/*
|
||||
* attempt to set wide character acceptance on all streams
|
||||
*/
|
||||
fwide(stdin, 1);
|
||||
fwide(stdout, 1);
|
||||
fwide(stderr, 1);
|
||||
fwide( stdin, 1 );
|
||||
fwide( stdout, 1 );
|
||||
fwide( stderr, 1 );
|
||||
int option;
|
||||
bool dump_at_end = false;
|
||||
bool show_prompt = false;
|
||||
|
||||
while ((option = getopt(argc, argv, "pd")) != -1) {
|
||||
switch (option) {
|
||||
while ( ( option = getopt( argc, argv, "pd" ) ) != -1 ) {
|
||||
switch ( option ) {
|
||||
case 'd':
|
||||
dump_at_end = true;
|
||||
break;
|
||||
|
|
@ -65,49 +62,50 @@ int main(int argc, char *argv[])
|
|||
show_prompt = true;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Unexpected option %c\n", option);
|
||||
fprintf( stderr, "Unexpected option %c\n", option );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (show_prompt) {
|
||||
fprintf(stdout,
|
||||
"Post scarcity software environment version %s\n\n", VERSION);
|
||||
if ( show_prompt ) {
|
||||
fprintf( stdout,
|
||||
"Post scarcity software environment version %s\n\n",
|
||||
VERSION );
|
||||
}
|
||||
|
||||
initialise_cons_pages();
|
||||
initialise_cons_pages( );
|
||||
|
||||
/*
|
||||
* privileged variables (keywords)
|
||||
*/
|
||||
deep_bind(intern(c_string_to_lisp_string("nil"), oblist), NIL);
|
||||
deep_bind(intern(c_string_to_lisp_string("t"), oblist), TRUE);
|
||||
deep_bind( intern( c_string_to_lisp_string( "nil" ), oblist ), NIL );
|
||||
deep_bind( intern( c_string_to_lisp_string( "t" ), oblist ), TRUE );
|
||||
|
||||
/*
|
||||
* primitive function operations
|
||||
*/
|
||||
bind_function("assoc", &lisp_assoc);
|
||||
bind_function("car", &lisp_car);
|
||||
bind_function("cdr", &lisp_cdr);
|
||||
bind_function("cons", &lisp_cons);
|
||||
bind_function("eq", &lisp_eq);
|
||||
bind_function("equal", &lisp_equal);
|
||||
bind_function("read", &lisp_read);
|
||||
bind_function("print", &lisp_print);
|
||||
bind_function( "assoc", &lisp_assoc );
|
||||
bind_function( "car", &lisp_car );
|
||||
bind_function( "cdr", &lisp_cdr );
|
||||
bind_function( "cons", &lisp_cons );
|
||||
bind_function( "eq", &lisp_eq );
|
||||
bind_function( "equal", &lisp_equal );
|
||||
bind_function( "read", &lisp_read );
|
||||
bind_function( "print", &lisp_print );
|
||||
|
||||
/*
|
||||
* primitive special forms
|
||||
*/
|
||||
bind_special("apply", &lisp_apply);
|
||||
bind_special("eval", &lisp_eval);
|
||||
bind_special("quote", &lisp_quote);
|
||||
bind_special( "apply", &lisp_apply );
|
||||
bind_special( "eval", &lisp_eval );
|
||||
bind_special( "quote", &lisp_quote );
|
||||
|
||||
repl(stdin, stdout, stderr, show_prompt);
|
||||
repl( stdin, stdout, stderr, show_prompt );
|
||||
// print( stdout, lisp_eval( input, oblist, NULL));
|
||||
|
||||
if (dump_at_end) {
|
||||
dump_pages(stderr);
|
||||
if ( dump_at_end ) {
|
||||
dump_pages( stderr );
|
||||
}
|
||||
|
||||
return (0);
|
||||
return ( 0 );
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue