Reorganised source files to make navigation easier

All tests still pass (slightly to my surprise)
This commit is contained in:
Simon Brooke 2018-12-24 19:27:04 +00:00
parent f6ff403249
commit a5e1d3ccd8
24 changed files with 73 additions and 72 deletions

View file

@ -132,10 +132,10 @@ struct cons_pointer simplify_ratio( struct stack_frame *frame,
struct cons_pointer arg ) { struct cons_pointer arg ) {
struct cons_pointer result = arg; struct cons_pointer result = arg;
long int ddrv = long int ddrv =
pointer2cell( pointer2cell( arg ).payload.ratio.dividend ).payload. pointer2cell( pointer2cell( arg ).payload.ratio.dividend ).
integer.value, drrv = payload.integer.value, drrv =
pointer2cell( pointer2cell( arg ).payload.ratio.divisor ).payload. pointer2cell( pointer2cell( arg ).payload.ratio.divisor ).
integer.value, gcd = greatest_common_divisor( ddrv, drrv ); payload.integer.value, gcd = greatest_common_divisor( ddrv, drrv );
if ( gcd > 1 ) { if ( gcd > 1 ) {
if ( drrv / gcd == 1 ) { if ( drrv / gcd == 1 ) {
@ -404,8 +404,8 @@ struct cons_pointer multiply_integer_ratio( struct stack_frame *frame,
ratio = make_ratio( frame, intarg, one ), ratio = make_ratio( frame, intarg, one ),
result = multiply_ratio_ratio( frame, ratio, ratarg ); result = multiply_ratio_ratio( frame, ratio, ratarg );
dec_ref( one); dec_ref( one );
dec_ref( ratio); dec_ref( ratio );
return result; return result;
} }
@ -561,8 +561,8 @@ struct cons_pointer inverse( struct stack_frame *frame,
case RATIOTV: case RATIOTV:
result = make_ratio( frame, result = make_ratio( frame,
make_integer( 0 - make_integer( 0 -
to_long_int( cell.payload.ratio. to_long_int( cell.payload.
dividend ) ), ratio.dividend ) ),
cell.payload.ratio.divisor ); cell.payload.ratio.divisor );
break; break;
case REALTV: case REALTV:
@ -692,10 +692,10 @@ struct cons_pointer divide_ratio_ratio( struct stack_frame *frame,
struct cons_pointer arg1, struct cons_pointer arg1,
struct cons_pointer arg2 ) { struct cons_pointer arg2 ) {
struct cons_pointer i = make_ratio( frame, struct cons_pointer i = make_ratio( frame,
pointer2cell( arg2 ).payload.ratio. pointer2cell( arg2 ).payload.
divisor, ratio.divisor,
pointer2cell( arg2 ).payload.ratio. pointer2cell( arg2 ).payload.
dividend ), result = ratio.dividend ), result =
multiply_ratio_ratio( frame, arg1, i ); multiply_ratio_ratio( frame, arg1, i );
dec_ref( i ); dec_ref( i );
@ -726,15 +726,16 @@ struct cons_pointer lisp_divide( struct
case EXCEPTIONTV: case EXCEPTIONTV:
result = frame->arg[1]; result = frame->arg[1];
break; break;
case INTEGERTV: { case INTEGERTV:{
struct cons_pointer unsimplified = make_ratio( frame, frame->arg[0], frame->arg[1] ); struct cons_pointer unsimplified =
result = simplify_ratio(frame, unsimplified); make_ratio( frame, frame->arg[0], frame->arg[1] );
if (!eq(unsimplified,result)){ result = simplify_ratio( frame, unsimplified );
dec_ref(unsimplified); if ( !eq( unsimplified, result ) ) {
dec_ref( unsimplified );
} }
} }
break; break;
case RATIOTV: { case RATIOTV:{
struct cons_pointer one = make_integer( 1 ); struct cons_pointer one = make_integer( 1 );
struct cons_pointer ratio = struct cons_pointer ratio =
make_ratio( frame, frame->arg[0], one ); make_ratio( frame, frame->arg[0], one );
@ -760,11 +761,12 @@ struct cons_pointer lisp_divide( struct
case EXCEPTIONTV: case EXCEPTIONTV:
result = frame->arg[1]; result = frame->arg[1];
break; break;
case INTEGERTV: { case INTEGERTV:{
struct cons_pointer one = make_integer( 1 ); struct cons_pointer one = make_integer( 1 );
struct cons_pointer ratio = struct cons_pointer ratio =
make_ratio( frame, frame->arg[1], one ); make_ratio( frame, frame->arg[1], one );
result = divide_ratio_ratio( frame, frame->arg[0], ratio ); result =
divide_ratio_ratio( frame, frame->arg[0], ratio );
dec_ref( ratio ); dec_ref( ratio );
} }
break; break;

View file

@ -163,9 +163,10 @@ void free_cell( struct cons_pointer pointer ) {
/* for vector space pointers, free the actual vector-space /* for vector space pointers, free the actual vector-space
* object. Dangerous! */ * object. Dangerous! */
#ifdef DEBUG #ifdef DEBUG
fwprintf(stderr, L"About to free vector-space object at %ld\n", cell->payload.vectorp.address); fwprintf( stderr, L"About to free vector-space object at %ld\n",
cell->payload.vectorp.address );
#endif #endif
free( (void *)cell->payload.vectorp.address); free( ( void * ) cell->payload.vectorp.address );
break; break;
} }

View file

@ -136,10 +136,10 @@ void dump_object( FILE * output, struct cons_pointer pointer ) {
case RATIOTV: case RATIOTV:
fwprintf( output, fwprintf( output,
L"\t\tRational cell: value %ld/%ld, count %u\n", L"\t\tRational cell: value %ld/%ld, count %u\n",
pointer2cell( cell.payload.ratio.dividend ).payload. pointer2cell( cell.payload.ratio.dividend ).
integer.value, payload.integer.value,
pointer2cell( cell.payload.ratio.divisor ).payload. pointer2cell( cell.payload.ratio.divisor ).
integer.value, cell.count ); payload.integer.value, cell.count );
break; break;
case READTV: case READTV:
fwprintf( output, L"\t\tInput stream\n" ); fwprintf( output, L"\t\tInput stream\n" );

View file

@ -29,7 +29,7 @@
* NOTE that `tag` should be the vector-space tag of the particular type of * NOTE that `tag` should be the vector-space tag of the particular type of
* vector-space object, NOT `VECTORPOINTTAG`. * vector-space object, NOT `VECTORPOINTTAG`.
*/ */
struct cons_pointer make_vec_pointer(char *tag, uint64_t address) { struct cons_pointer make_vec_pointer( char *tag, uint64_t address ) {
struct cons_pointer pointer = allocate_cell( VECTORPOINTTAG ); struct cons_pointer pointer = allocate_cell( VECTORPOINTTAG );
struct cons_space_object cell = pointer2cell( pointer ); struct cons_space_object cell = pointer2cell( pointer );
@ -45,20 +45,21 @@ struct cons_pointer make_vec_pointer(char *tag, uint64_t address) {
* NOTE that `tag` should be the vector-space tag of the particular type of * NOTE that `tag` should be the vector-space tag of the particular type of
* vector-space object, NOT `VECTORPOINTTAG`. * vector-space object, NOT `VECTORPOINTTAG`.
*/ */
struct cons_pointer make_vso( char *tag, long int payload_size) { struct cons_pointer make_vso( char *tag, long int payload_size ) {
struct cons_pointer result = NIL; struct cons_pointer result = NIL;
long int total_size = sizeof(struct vector_space_header) + payload_size; long int total_size = sizeof( struct vector_space_header ) + payload_size;
struct vector_space_header *vso = malloc(total_size ); struct vector_space_header *vso = malloc( total_size );
if (vso != NULL) { if ( vso != NULL ) {
strncpy( vso->tag.bytes[0], tag, TAGLENGTH ); strncpy( &vso->tag.bytes[0], tag, TAGLENGTH );
vso->vecp = make_vec_pointer(tag, (uint64_t)vso); vso->vecp = make_vec_pointer( tag, ( uint64_t ) vso );
vso->size = payload_size; vso->size = payload_size;
#ifdef DEBUG #ifdef DEBUG
fwprintf(stderr, L"Allocated vector-space object of type %s, total size %ld, payload size %ld\n", fwprintf( stderr,
tag, total_size, payload_size); L"Allocated vector-space object of type %s, total size %ld, payload size %ld\n",
tag, total_size, payload_size );
#endif #endif
result = vso->vecp; result = vso->vecp;
@ -66,4 +67,3 @@ struct cons_pointer make_vso( char *tag, long int payload_size) {
return result; return result;
} }

View file

@ -42,7 +42,7 @@
#define pointer_to_vso(pointer)(vectorpointp(pointer)? pointer2cell(pointer).payload.vectorp.address : 0) #define pointer_to_vso(pointer)(vectorpointp(pointer)? pointer2cell(pointer).payload.vectorp.address : 0)
struct cons_pointer make_vso( char *tag, long int payload_size); struct cons_pointer make_vso( char *tag, long int payload_size );
struct vector_space_header { struct vector_space_header {
union { union {
@ -66,5 +66,3 @@ struct vector_space_header {
}; };
#endif #endif

View file

@ -80,8 +80,8 @@ bool equal( struct cons_pointer a, struct cons_pointer b ) {
&& ( equal( cell_a->payload.string.cdr, && ( equal( cell_a->payload.string.cdr,
cell_b->payload.string.cdr ) cell_b->payload.string.cdr )
|| ( end_of_string( cell_a->payload.string.cdr ) || ( end_of_string( cell_a->payload.string.cdr )
&& end_of_string( cell_b->payload.string. && end_of_string( cell_b->payload.
cdr ) ) ); string.cdr ) ) );
break; break;
case INTEGERTV: case INTEGERTV:
result = result =

View file

@ -132,8 +132,8 @@ struct cons_pointer print( FILE * output, struct cons_pointer pointer ) {
case LAMBDATV: case LAMBDATV:
print( output, make_cons( c_string_to_lisp_symbol( "lambda" ), print( output, make_cons( c_string_to_lisp_symbol( "lambda" ),
make_cons( cell.payload.lambda.args, make_cons( cell.payload.lambda.args,
cell.payload. cell.payload.lambda.
lambda.body ) ) ); body ) ) );
break; break;
case NILTV: case NILTV:
fwprintf( output, L"nil" ); fwprintf( output, L"nil" );
@ -141,8 +141,8 @@ struct cons_pointer print( FILE * output, struct cons_pointer pointer ) {
case NLAMBDATV: case NLAMBDATV:
print( output, make_cons( c_string_to_lisp_symbol( "nlambda" ), print( output, make_cons( c_string_to_lisp_symbol( "nlambda" ),
make_cons( cell.payload.lambda.args, make_cons( cell.payload.lambda.args,
cell.payload. cell.payload.lambda.
lambda.body ) ) ); body ) ) );
break; break;
case RATIOTV: case RATIOTV:
print( output, cell.payload.ratio.dividend ); print( output, cell.payload.ratio.dividend );