Further small changes on the way to a reader.
This commit is contained in:
parent
a302663b32
commit
cc8e96eda4
4 changed files with 60 additions and 3 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
33
src/c/payloads/read_stream.c
Normal file
33
src/c/payloads/read_stream.c
Normal 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;
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue