diff --git a/src/c/memory/memory.c b/src/c/memory/memory.c index adbf827..658f649 100644 --- a/src/c/memory/memory.c +++ b/src/c/memory/memory.c @@ -109,8 +109,11 @@ struct pso_pointer pop_freelist( uint8_t size_class ) { * on the freelist, but again we should sanity check. */ if ( object->header.count != 0 ) { fwprintf( stderr, - L"WARNING: Request to allocate object of size class %d, which is not implemented", - size_class ); + L"WARNING: Count of %d in newly allocated object at %d, %d, should be 0\n", + result.page, + result.offset, + object->header.count ); + object->header.count = 0; } } } // TODO: else throw exception diff --git a/src/c/memory/pso.c b/src/c/memory/pso.c index b827f50..c37549a 100644 --- a/src/c/memory/pso.c +++ b/src/c/memory/pso.c @@ -86,8 +86,14 @@ struct pso_pointer allocate( struct pso_pointer frame_pointer, char *tag, struct pso_pointer result = pop_freelist( size_class ); struct pso4 *frame = pointer_to_pso4( frame_pointer ); + if ( memory_initialised && c_nilp(frame_pointer)) { + fputws( L"WARNING: No stack frame passed to `allocate`.\n", + stderr ); + } + if ( !c_nilp( result ) ) { - strncpy( ( char * ) ( pointer_to_object( result )->header.tag.bytes. + struct pso2 *obj = pointer_to_object(result); + strncpy((char*) (obj->header.tag.bytes. mnemonic ), tag, TAGLENGTH ); debug_printf( DEBUG_ALLOC, 0, L"at page %d, offset %d... ", @@ -100,10 +106,6 @@ struct pso_pointer allocate( struct pso_pointer frame_pointer, char *tag, payload.stack_frame. locals ); frame->payload.stack_frame.locals = locals; - - } else if ( memory_initialised ) { - fputws( L"WARNING: No stack frame passed to `allocate`.\n", - stderr ); } } else { // TODO: throw exception diff --git a/src/c/ops/stack_ops.c b/src/c/ops/stack_ops.c index bdf5e15..4d566cf 100644 --- a/src/c/ops/stack_ops.c +++ b/src/c/ops/stack_ops.c @@ -29,7 +29,7 @@ struct pso_pointer fetch_arg( struct pso4 *frame, unsigned int index ) { struct pso_pointer result = nil; // TODO check that the frame is indeed a frame! - if ( index < args_in_frame ) { + if ( index < frame->payload.stack_frame.args ) { result = frame->payload.stack_frame.arg[index]; } else { struct pso_pointer p = frame->payload.stack_frame.more;