Still making progress. Dropped the archive because it was causing problems.

This commit is contained in:
Simon Brooke 2026-04-22 21:09:15 +01:00
parent eed4711fee
commit 8d2acbeb0f
97 changed files with 490 additions and 13322 deletions

View file

@ -43,9 +43,8 @@ struct pso_pointer make_frame( int arg_count, struct pso_pointer previous,
va_start( args, previous );
struct pso4 *prev_frame = pointer_to_pso4( previous );
struct pso_pointer new_pointer =
allocate( previous, STACKTAG, 4 );
struct pso4* new_frame = pointer_to_pso4(new_pointer);
struct pso_pointer new_pointer = allocate( previous, STACKTAG, 4 );
struct pso4 *new_frame = pointer_to_pso4( new_pointer );
#ifdef DEBUG
debug_printf( DEBUG_ALLOC, 0,
@ -57,14 +56,16 @@ struct pso_pointer make_frame( int arg_count, struct pso_pointer previous,
prev_frame->payload.stack_frame.previous = previous;
if ( stackp( previous ) ) {
new_frame->payload.stack_frame.depth = prev_frame->payload.stack_frame.depth + 1;
new_frame->payload.stack_frame.env = prev_frame->payload.stack_frame.env;
new_frame->payload.stack_frame.depth =
prev_frame->payload.stack_frame.depth + 1;
new_frame->payload.stack_frame.env =
prev_frame->payload.stack_frame.env;
} else {
new_frame->payload.stack_frame.depth = 0;
new_frame->payload.stack_frame.depth = 0;
}
debug_printf( DEBUG_ALLOC, 1, L"depth is %d...\n",
new_frame->payload.stack_frame.depth );
new_frame->payload.stack_frame.depth );
int cursor = 0;
new_frame->payload.stack_frame.args = arg_count;
@ -86,7 +87,7 @@ struct pso_pointer make_frame( int arg_count, struct pso_pointer previous,
new_frame->payload.stack_frame.more = c_reverse( more_args );
} else {
for ( ; cursor < args_in_frame; cursor++ ) {
new_frame->payload.stack_frame.arg[cursor] = nil;
new_frame->payload.stack_frame.arg[cursor] = nil;
}
}
@ -117,9 +118,8 @@ struct pso_pointer make_frame_with_env( int arg_count,
va_start( args, env );
struct pso4 *prev_frame = pointer_to_pso4( previous );
struct pso_pointer new_pointer =
allocate( previous, STACKTAG, 4 );
struct pso4* new_frame = pointer_to_pso4(new_pointer);
struct pso_pointer new_pointer = allocate( previous, STACKTAG, 4 );
struct pso4 *new_frame = pointer_to_pso4( new_pointer );
#ifdef DEBUG
debug_printf( DEBUG_ALLOC, 0,
@ -131,14 +131,15 @@ struct pso_pointer make_frame_with_env( int arg_count,
prev_frame->payload.stack_frame.previous = previous;
if ( stackp( previous ) ) {
new_frame->payload.stack_frame.depth = prev_frame->payload.stack_frame.depth + 1;
new_frame->payload.stack_frame.depth =
prev_frame->payload.stack_frame.depth + 1;
new_frame->payload.stack_frame.env = env;
} else {
new_frame->payload.stack_frame.depth = 0;
new_frame->payload.stack_frame.depth = 0;
}
debug_printf( DEBUG_ALLOC, 1, L"depth is %d...\n",
new_frame->payload.stack_frame.depth );
new_frame->payload.stack_frame.depth );
int cursor = 0;
new_frame->payload.stack_frame.args = arg_count;
@ -160,7 +161,7 @@ struct pso_pointer make_frame_with_env( int arg_count,
new_frame->payload.stack_frame.more = c_reverse( more_args );
} else {
for ( ; cursor < args_in_frame; cursor++ ) {
new_frame->payload.stack_frame.arg[cursor] = nil;
new_frame->payload.stack_frame.arg[cursor] = nil;
}
}
@ -181,14 +182,19 @@ struct pso_pointer make_frame_with_env( int arg_count,
*
* @return pointer to the new frame.
*/
struct pso_pointer make_frame_with_arglist_and_env( struct pso_pointer previous, struct pso_pointer argvalues,
struct pso_pointer env) {
struct pso_pointer make_frame_with_arglist_and_env( struct pso_pointer
previous,
struct pso_pointer
argvalues,
struct pso_pointer env ) {
struct pso4 *prev_frame = pointer_to_pso4( previous );
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));
int arg_count = integerp(arg_length) ? pointer_to_object(arg_length)->payload.integer.value : 0;
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 ) );
int arg_count =
integerp( arg_length ) ? pointer_to_object( arg_length )->
payload.integer.value : 0;
#ifdef DEBUG
debug_printf( DEBUG_ALLOC, 0,
L"\nAllocating stack frame with %d arguments at page %d, "
@ -199,28 +205,31 @@ struct pso_pointer make_frame_with_arglist_and_env( struct pso_pointer previous,
prev_frame->payload.stack_frame.previous = previous;
if ( stackp( previous ) ) {
new_frame->payload.stack_frame.depth = prev_frame->payload.stack_frame.depth + 1;
new_frame->payload.stack_frame.env = inc_ref( prev_frame->payload.stack_frame.env);
new_frame->payload.stack_frame.depth =
prev_frame->payload.stack_frame.depth + 1;
new_frame->payload.stack_frame.env =
inc_ref( prev_frame->payload.stack_frame.env );
} else {
new_frame->payload.stack_frame.depth = 0;
new_frame->payload.stack_frame.depth = 0;
}
debug_printf( DEBUG_ALLOC, 1, L"depth is %d...\n",
new_frame->payload.stack_frame.depth );
new_frame->payload.stack_frame.depth );
int cursor = 0;
new_frame->payload.stack_frame.args = arg_count;
for ( ; cursor < arg_count && cursor < args_in_frame; cursor++ ) {
new_frame->payload.stack_frame.arg[cursor] = inc_ref( make_frame( 1, previous, car(argvalues)));
argvalues = cdr( make_frame( 1, previous, argvalues));
new_frame->payload.stack_frame.arg[cursor] =
inc_ref( make_frame( 1, previous, car( argvalues ) ) );
argvalues = cdr( make_frame( 1, previous, argvalues ) );
}
if ( cursor < arg_count ) {
new_frame->payload.stack_frame.more = inc_ref( argvalues);
new_frame->payload.stack_frame.more = inc_ref( argvalues );
} else {
for ( ; cursor < args_in_frame; cursor++ ) {
new_frame->payload.stack_frame.arg[cursor] = nil;
new_frame->payload.stack_frame.arg[cursor] = nil;
}
}
@ -239,8 +248,12 @@ struct pso_pointer make_frame_with_arglist_and_env( struct pso_pointer previous,
*
* @return pointer to the new frame.
*/
struct pso_pointer make_frame_with_arglist( struct pso_pointer previous, struct pso_pointer argvalues) {
return make_frame_with_arglist_and_env( previous, argvalues, pointer_to_pso4(previous)->payload.stack_frame.env);
struct pso_pointer make_frame_with_arglist( struct pso_pointer previous,
struct pso_pointer argvalues ) {
return make_frame_with_arglist_and_env( previous, argvalues,
pointer_to_pso4
( previous )->payload.stack_frame.
env );
}