#8: keywords as functions on associations working
This commit is contained in:
parent
2bebee6002
commit
e7ef82d23f
|
@ -91,6 +91,12 @@ struct cons_pointer c_assoc( struct cons_pointer key,
|
|||
struct cons_pointer store ) {
|
||||
struct cons_pointer result = NIL;
|
||||
|
||||
debug_print( L"c_assoc; key is `", DEBUG_BIND);
|
||||
debug_print_object( key, DEBUG_BIND);
|
||||
debug_print( L"`; store is \n", DEBUG_BIND);
|
||||
debug_dump_object( store, DEBUG_BIND);
|
||||
debug_println(DEBUG_BIND);
|
||||
|
||||
for ( struct cons_pointer next = store;
|
||||
consp( next ); next = pointer2cell( next ).payload.cons.cdr ) {
|
||||
struct cons_space_object entry =
|
||||
|
|
|
@ -308,6 +308,15 @@ c_apply( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case KEYTV:
|
||||
result = c_assoc( fn_pointer,
|
||||
eval_form(frame,
|
||||
frame_pointer,
|
||||
c_car( c_cdr( frame->arg[0])),
|
||||
env));
|
||||
break;
|
||||
|
||||
case LAMBDATV:
|
||||
{
|
||||
struct cons_pointer exep = NIL;
|
||||
|
@ -416,9 +425,7 @@ lisp_eval( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
|||
|
||||
switch ( cell.tag.value ) {
|
||||
case CONSTV:
|
||||
{
|
||||
result = c_apply( frame, frame_pointer, env );
|
||||
}
|
||||
break;
|
||||
|
||||
case SYMBOLTV:
|
||||
|
|
Loading…
Reference in a new issue