Right, I'm committing this session because I'm too cold and tired to go on.
It does not at present build (and it's going to take a good bit more work before it does).
This commit is contained in:
parent
f05d1af9d6
commit
6148d3699f
32 changed files with 364 additions and 309 deletions
|
|
@ -33,12 +33,13 @@
|
|||
*/
|
||||
struct pso_pointer make_frame( int arg_count, struct pso_pointer previous,
|
||||
... ) {
|
||||
// todo: issue #21: must have stack frame passed in.
|
||||
// todo: issue #21: must have stack frame passed in.
|
||||
va_list args;
|
||||
va_start( args, previous );
|
||||
|
||||
struct pso_pointer frame_pointer = allocate( STACKTAG, 4 );
|
||||
struct pso4 *frame = ( struct pso4 * ) pointer_to_object( frame_pointer );
|
||||
struct pso4 *frame = pointer_to_pso4( previous );
|
||||
struct pso_pointer frame_pointer =
|
||||
allocate( pointer_to_pso4( previous ), STACKTAG, 4 );
|
||||
|
||||
#ifdef DEBUG
|
||||
debug_printf( DEBUG_ALLOC, 0,
|
||||
|
|
@ -72,7 +73,8 @@ struct pso_pointer make_frame( int arg_count, struct pso_pointer previous,
|
|||
|
||||
for ( ; cursor < arg_count; cursor++ ) {
|
||||
more_args =
|
||||
make_cons( va_arg( args, struct pso_pointer ), more_args );
|
||||
make_cons( frame, va_arg( args, struct pso_pointer ),
|
||||
more_args );
|
||||
}
|
||||
|
||||
frame->payload.stack_frame.more = c_reverse( more_args );
|
||||
|
|
@ -103,6 +105,8 @@ struct pso_pointer destroy_stack_frame( struct pso_pointer fp,
|
|||
dec_ref( frame->payload.stack_frame.previous );
|
||||
dec_ref( frame->payload.stack_frame.function );
|
||||
dec_ref( frame->payload.stack_frame.more );
|
||||
dec_ref( frame->payload.stack_frame.locals );
|
||||
dec_ref( frame->payload.stack_frame.env );
|
||||
|
||||
for ( int i = 0; i < args_in_frame; i++ ) {
|
||||
dec_ref( frame->payload.stack_frame.arg[i] );
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue