Still making progress. Dropped the archive because it was causing problems.
This commit is contained in:
parent
eed4711fee
commit
8d2acbeb0f
97 changed files with 490 additions and 13322 deletions
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue