Further small changes on the way to a reader.

This commit is contained in:
Simon Brooke 2026-04-01 08:50:35 +01:00
parent a302663b32
commit cc8e96eda4
4 changed files with 60 additions and 3 deletions

View file

@ -1,5 +1,16 @@
# State of Play # State of Play
## 20260331
Substrate layer `print` is written; all the building blocks for substrate
layer `read` is in place. This will read far less than the 0.0.6, but it
will be extensible with read macros *written in Lisp*, so much more flexible,
and will gradually grow to read more than the non-extensible 0.0.6 reader
was. Pleased with myself.
The new print may grow to be extensible in Lisp, as well. In fact, it will
have to!
## 20260326 ## 20260326
Most of the memory architecture of the new prototype is now roughed out, but Most of the memory architecture of the new prototype is now roughed out, but

View file

@ -69,4 +69,17 @@ struct pso_pointer read_example( struct pso4 *frame,
} }
// struct pso_pointer read /**
* Read the next object on this input stream and return a pso_pointer to it.
*/
struct pso_pointer read( struct pso4 *frame,
struct pso_pointer frame_pointer,
struct pso_pointer env ) {
struct pso_pointer* character = fetch_arg( frame, 0);
struct pso_pointer stream = fetch_arg( frame, 1);
struct pso_pointer readtable = fetch_arg( frame, 2);
if (nilp(stream)) {
}
}

View file

@ -0,0 +1,33 @@
/**
* payloads/read_stream.h
*
* A read stream.
*
* (c) 2026 Simon Brooke <simon@journeyman.cc>
* Licensed under GPL version 2.0, or, at your option, any later version.
*/
#include <stdio.h>
#include <curl/curl.h>
#include "io/fopen.h"
#include "memory/pointer.h"
/**
* Construct a cell which points to a stream open for reading.
* @param input the C stream to wrap.
* @param metadata a pointer to an associaton containing metadata on the stream.
* @return a pointer to the new read stream.
*/
struct pso_pointer make_read_stream( URL_FILE *input,
struct pso_pointer metadata ) {
struct pso_pointer pointer = allocate( READTV, 2);
struct pso2 *cell = pointer_to_object( pointer );
cell->payload.stream.stream = input;
cell->payload.stream.meta = metadata;
return pointer;
}

View file

@ -3,9 +3,9 @@
value='"Fred"' value='"Fred"'
expected="String cell: character 'F'" expected="String cell: character 'F'"
# set! protects "Fred" from the garbage collector. # set! protects "Fred" from the garbage collector.
actual=`echo "(set! x ${value})" | target/psse -d 2>&1 | grep "$expected" | sed 's/ *\(.*\) next.*$/\1/'` actual=`echo "(set! x ${value})" | target/psse -d 2>&1 | grep "$expected" # | sed 's/ *\(.*\) next.*$/\1/'`
if [ $? -eq 0 ] if [ "${expected}" = "${actual}" ]
then then
echo "OK" echo "OK"
exit 0 exit 0