My monster, she builds!
This commit is contained in:
parent
92490ebd5f
commit
8c5dccb5c8
6 changed files with 283 additions and 13 deletions
|
|
@ -4,7 +4,7 @@
|
|||
* Post Scarcity Soctware Environment
|
||||
*
|
||||
* TODO: Edit purpose.
|
||||
*
|
||||
*
|
||||
* Copyright (c): 27 Apr 2026 Simon Brooke <simon@journeyman.cc>
|
||||
* Licensed under GPL version 2.0, or, at your option, any later version.
|
||||
*/
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
#define SRC_C_ENVIRONMENT_PRIVILEGED_KEYWORDS_H_
|
||||
|
||||
#define PK_LOCATION U"location"
|
||||
#define PK_NAME = U"name"
|
||||
#define PK_NAME U"name"
|
||||
|
||||
#include "memory/pointer.h"
|
||||
extern struct pso_pointer privileged_keyword_location;
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ struct pso_pointer read_symbol( struct pso_pointer frame_pointer ) {
|
|||
}
|
||||
|
||||
url_ungetwc( c, input );
|
||||
result = c_reverse( result );
|
||||
result = c_reverse( frame_pointer, result );
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,6 @@
|
|||
|
||||
#include "payloads/function.h"
|
||||
|
||||
struct pso_pointer length( struct pso_pointer frame_pointer );
|
||||
struct pso_pointer count( struct pso_pointer frame_pointer );
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -9,15 +9,19 @@
|
|||
* Licensed under GPL version 2.0, or, at your option, any later version.
|
||||
*/
|
||||
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
#include "memory/node.h"
|
||||
#include "memory/pointer.h"
|
||||
#include "memory/pso.h"
|
||||
#include "memory/pso4.h"
|
||||
#include "memory/tags.h"
|
||||
|
||||
#include "ops/eval_apply.h"
|
||||
#include "ops/reverse.h"
|
||||
#include "ops/stack_ops.h"
|
||||
#include "ops/truth.h"
|
||||
|
||||
#include "payloads/cons.h"
|
||||
|
||||
struct pso_pointer lisp_mapcar( struct pso_pointer frame_pointer ) {
|
||||
|
|
@ -30,29 +34,28 @@ struct pso_pointer lisp_mapcar( struct pso_pointer frame_pointer ) {
|
|||
for ( struct pso_pointer c = frame->payload.stack_frame.arg[1]; c_truep( c );
|
||||
c = c_cdr( c ) ) {
|
||||
struct pso_pointer expr =
|
||||
cons( frame->payload.stack_frame.arg[0], make_cons( frame_pointer, c_car( c ), nil ) );
|
||||
push_local( frame_pointer,
|
||||
make_cons( frame_pointer, frame->payload.stack_frame.arg[0],
|
||||
make_cons( frame_pointer, c_car( c ), nil ) ) );
|
||||
|
||||
debug_printf( DEBUG_EVAL, 0, U"Mapcar %d, evaluating ", i );
|
||||
debug_print_object( expr, DEBUG_EVAL, 0 );
|
||||
debug_println( DEBUG_EVAL);
|
||||
|
||||
struct pso_pointer r = eval_form( frame, frame_pointer, expr, env );
|
||||
struct pso_pointer r = lisp_eval( push_local( frame_pointer, make_frame(1, frame_pointer, expr)));
|
||||
|
||||
if ( exceptionp( r ) ) {
|
||||
result = r;
|
||||
inc_ref( expr ); // to protect exception from the later dec_ref
|
||||
break;
|
||||
} else {
|
||||
result = cons( r, result );
|
||||
result = push_local( frame_pointer, make_cons( frame_pointer, r, result ));
|
||||
}
|
||||
debug_printf( DEBUG_EVAL, 0, U"Mapcar %d, result is ", i++ );
|
||||
debug_print_object( result, DEBUG_EVAL, 0 );
|
||||
debug_println( DEBUG_EVAL);
|
||||
|
||||
dec_ref( expr );
|
||||
}
|
||||
|
||||
result = consp( result ) ? c_reverse( result ) : result;
|
||||
result = consp( result ) ? c_reverse( frame_pointer, result ) : result;
|
||||
|
||||
debug_print( U"Mapcar returning: ", DEBUG_EVAL, 0 );
|
||||
debug_print_object( result, DEBUG_EVAL, 0 );
|
||||
|
|
|
|||
|
|
@ -238,7 +238,7 @@ struct pso_pointer make_frame_with_arglist_and_env( struct pso_pointer
|
|||
struct pso_pointer new_pointer = allocate( previous, STACKTAG, 4 );
|
||||
struct pso4 *new_frame = pointer_to_pso4( new_pointer );
|
||||
struct pso_pointer arg_length =
|
||||
length( make_frame( 1, previous, argvalues ) );
|
||||
count( push_local( previous, make_frame( 1, previous, argvalues ) ) );
|
||||
int arg_count =
|
||||
integerp( arg_length ) ? pointer_to_object( arg_length )->
|
||||
payload.integer.value : 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue