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

@ -98,12 +98,7 @@ struct pso_pointer read_example(
* 1. The read table currently in use;
* 2. The character most recently read from that stream.
*/
struct pso_pointer read_number(
#ifndef MANAGED_POINTER_ONLY
struct pso4 *frame,
#endif
struct pso_pointer frame_pointer,
struct pso_pointer env ) {
struct pso_pointer read_number( struct pso_pointer frame_pointer ) {
struct pso4 *frame = pointer_to_pso4( frame_pointer );
struct pso_pointer stream = fetch_arg( frame, 0 );
struct pso_pointer readtable = fetch_arg( frame, 1 );
@ -115,10 +110,10 @@ struct pso_pointer read_number(
int64_t value = 0;
if ( readp( stream ) ) {
if ( nilp( character ) ) {
if ( c_nilp( character ) ) {
character = get_character( stream );
}
char32_t c = nilp( character )
char32_t c = c_nilp( character )
? 0 : pointer_to_object( character )->payload.character.character;
URL_FILE *input = pointer_to_object( stream )->payload.stream.stream;
@ -127,18 +122,13 @@ struct pso_pointer read_number(
}
url_ungetwc( c, input );
result = make_integer( value );
result = make_integer( frame_pointer, value );
} // else exception?
return result;
}
struct pso_pointer read_symbol(
#ifndef MANAGED_POINTER_ONLY
struct pso4 *frame,
#endif
struct pso_pointer frame_pointer,
struct pso_pointer env ) {
struct pso_pointer read_symbol( struct pso_pointer frame_pointer ) {
struct pso4 *frame = pointer_to_pso4( frame_pointer );
struct pso_pointer stream = fetch_arg( frame, 0 );
struct pso_pointer readtable = fetch_arg( frame, 1 );
@ -146,16 +136,17 @@ struct pso_pointer read_symbol(
struct pso_pointer result = nil;
if ( readp( stream ) ) {
if ( nilp( character ) ) {
if ( c_nilp( character ) ) {
character = get_character( stream );
}
char32_t c = nilp( character )
char32_t c = c_nilp( character )
? 0 : pointer_to_object( character )->payload.character.character;
URL_FILE *input = pointer_to_object( stream )->payload.stream.stream;
for ( ; iswalnum( c ); c = url_fgetwc( input ) ) {
result = make_string_like_thing( c, result, SYMBOLTAG );
result =
make_string_like_thing( frame_pointer, c, result, SYMBOLTAG );
}
url_ungetwc( c, input );
@ -176,12 +167,7 @@ struct pso_pointer read_symbol(
* 1. The read table currently in use;
* 2. The character most recently read from that stream.
*/
struct pso_pointer read(
#ifndef MANAGED_POINTER_ONLY
struct pso4 *frame,
#endif
struct pso_pointer frame_pointer,
struct pso_pointer env ) {
struct pso_pointer read( struct pso_pointer frame_pointer ) {
struct pso4 *frame = pointer_to_pso4( frame_pointer );
struct pso_pointer stream = fetch_arg( frame, 0 );
struct pso_pointer readtable = fetch_arg( frame, 1 );
@ -189,22 +175,23 @@ struct pso_pointer read(
struct pso_pointer result = nil;
if ( nilp( stream ) ) {
stream = make_read_stream( file_to_url_file( stdin ), nil );
if ( c_nilp( stream ) ) {
stream =
make_read_stream( frame_pointer, file_to_url_file( stdin ), nil );
}
if ( nilp( readtable ) ) {
if ( c_nilp( readtable ) ) {
// TODO: check for the value of `*read-table*` in the environment and
// use that.
}
if ( nilp( character ) ) {
if ( c_nilp( character ) ) {
character = get_character( stream );
}
struct pso_pointer readmacro = c_assoc( character, readtable );
if ( !nilp( readmacro ) ) {
if ( !c_nilp( readmacro ) ) {
// invoke the read macro on the stream
} else if ( readp( stream ) && characterp( character ) ) {
char32_t c =
@ -228,12 +215,13 @@ struct pso_pointer read(
default:
struct pso_pointer next = make_frame( 3, frame_pointer, stream,
readtable,
make_character( c ) );
make_character
( frame_pointer, c ) );
inc_ref( next );
if ( iswdigit( c ) ) {
result = read_number( next, env );
result = read_number( next );
} else if ( iswalpha( c ) ) {
result = read_symbol( next, env );
result = read_symbol( next );
} else {
// result =
// throw_exception(