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
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue