aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2024-09-21 23:52:55 -0400
committerGravatar Peter McGoron 2024-09-21 23:52:55 -0400
commit003d6dde05d93368b5a23cd3b5ac62c8f9e80a24 (patch)
tree18ba85adf7f862a2d6314bdf508a7568b510a48b
parentread: improper lists (diff)
read: factor out improper list reader
-rw-r--r--read.scm76
1 files changed, 49 insertions, 27 deletions
diff --git a/read.scm b/read.scm
index a7fde06..004bd9e 100644
--- a/read.scm
+++ b/read.scm
@@ -196,6 +196,10 @@
(lambda (oldtable char acc port)
(readtable:act newtable char acc port))))
+;;; ;;;;;;;;;;;;;;;;;
+;;; Identifier reader
+;;; ;;;;;;;;;;;;;;;;;
+
;;; Push back CHAR and return ACC.
(define readtable:return-acc-keep-char
(lambda (table char acc port)
@@ -245,6 +249,10 @@
(port 'read) lst port)
'to-list)))))
+;;; ;;;;;;;;;;;;;;;;;;;;
+;;; Comments and whitespace reader
+;;; ;;;;;;;;;;;;;;;;;;;;
+
;;; Add all chars in TO-SKIP to TABLE as skipped characters. Used for
;;; whitespace.
(define readtable:add-all-as-skip
@@ -260,6 +268,14 @@
(readtable:empty/default readtable:skip)
(list readtable:update #\newline (readtable:return #f))))
+;;; ;;;;;;;;;;;
+;;; List reader
+;;;
+;;; The reader updates the previous readtable to handle ). This means
+;;; that this read table does not have to handle end-of-line, whitespace,
+;;; etc.
+;;; ;;;;;;;;;;;
+
;;; Read the end of an improper list.
(define readtable:read-improper-cdr
(lambda (table acc port)
@@ -277,35 +293,14 @@
"improper list has 1 cdr"))
(list readtable:add-all-as-skip readtable:ASCII-whitespace)
(list readtable:update %eol
- (lambda dummy acc)))))
+ (lambda dummy 'end-of-list)))))
(readtable:act table (port 'read) acc port)))))
-;;; List reader.
-;;;
-;;; The reader updates the previous readtable to handle ). This means
-;;; that this read table does not have to handle end-of-line, whitespace,
-;;; etc.
-(define readtable:read-list
- (lambda (oldtable char acc port)
- (let ((acc (linked-list:new))
- (table (readtable:process
- oldtable
- (list readtable:update %eol
- (readtable:return 'end-of-list))
- (list readtable:update #\.
- (lambda (table char acc port)
- (let ((id (readtable:read-ident
- table
- char
- #f
- port)))
- ;; todo: list needs a car
- (if (equal? id ".")
- (begin
- (readtable:read-improper-cdr
- oldtable acc port)
- 'end-of-list)
- id)))))))
+;;; Generic reader loop for a list. It takes as input the table that has
+;;; already been updated with end of list and improper list handlers.
+(define readtable:read-list-loop
+ (lambda (table port)
+ (let ((acc (linked-list:new)))
(letrec ((loop
(lambda ()
(let ((value (readtable:act table
@@ -318,6 +313,32 @@
(loop)))))))
(loop)))))
+;;; Readtable for a list, generic to proper and improper list
+;;; readers.
+(define readtable:table-for-list
+ (lambda (oldtable on-dot)
+ (readtable:process
+ oldtable
+ (list readtable:update %eol (readtable:return 'end-of-list))
+ (list readtable:update #\.
+ (lambda (table char acc port)
+ (let ((entire-identifier (readtable:read-ident
+ table
+ char
+ #f
+ port)))
+ (if (equal? entire-identifier ".")
+ (on-dot table acc port)
+ entire-identifier)))))))
+
+;;; Read a proper or improper list.
+(define readtable:read-list
+ (lambda (oldtable _ __ port)
+ (readtable:read-list-loop (readtable:table-for-list
+ oldtable
+ readtable:read-improper-cdr)
+ port)))
+
;;; Toplevel reader.
;;; This is defined as a function so that it dynamically loads each
;;; sub-readtable.
@@ -366,3 +387,4 @@
(read-all "(a b c def (ghi j) k )")
(read-all "( a . b )")
(read-all "( a .b . c)")
+
+0000'>2001-01-04Fix misplaced device file in Debian installation.Gravatar aeb 3-3/+10 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@48 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-12-12Debian scripts use makedev (>=2.3.1-49) in postinst by default now.Gravatar aeb 7-30/+104 Postinst script using mknod added as alternative. Revision bumped up to 0.8.1. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@47 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-11-25Fix postinst ldconfig.Gravatar aeb 2-11/+11 Fix device file creation. Install NEWS and README as documentation in the dev package. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@46 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-11-25Add some information about return values.Gravatar aeb 1-3/+29 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@45 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-11-24Bump up version numbers for release.Gravatar aeb 2-3/+11 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@44 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-11-24Added libraw1394.postinst.in to list of distributed files.Gravatar aeb 3-3/+35 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@43 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-11-23Add ldconfig in deb postinst for Debian policy conformance.Gravatar aeb 2-2/+17 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@42 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-11-23Removed acconfig.h, which wasn't needed for some time.Gravatar aeb 1-13/+0 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@41 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-11-22Added ieee1394.h header.Gravatar aeb 3-1/+38 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@40 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-09-13Fix raw1394_start_iso_write() which uses wrong variable.Gravatar aeb 1-1/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@39 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-09-10Work around compiler warnings for int/ptr casts.Gravatar aeb 6-10/+20 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@38 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-09-10Added control files for Debian packages.Gravatar aeb 6-8/+106 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@37 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-09-01Added missing prototypes for iso send functions.Gravatar aeb 1-0/+7 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@36 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-08-08Added raw1394_get_irm_id().Gravatar aeb 7-7/+39 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@35 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-08-06Added support for isochronous sending.Gravatar aeb 3-0/+35 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@34 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-07-05Added raw1394_reset_bus() call.Gravatar aeb 4-0/+23 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@33 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-22- Set library version info in configure.in, use in src/Makefile.am.Gravatar aeb 4-2/+16 - Enable compiler warnings. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@32 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-15Update libtool version number.Gravatar aeb 2-2/+2 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@31 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-14Added copyright headers.Gravatar aeb 6-0/+54 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@30 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-11Added explicit AC_PROG_INSTALL call.Gravatar aeb 1-0/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@29 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-09Fix size of error field.Gravatar aeb 1-2/+2 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@28 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-02Modified support for 32/64 bit environments, control struct fields have ↵Gravatar aeb 7-43/+28 fixed size now. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@27 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-05-28Added support for environments with 64 bit kernel and 32 bit userland.Gravatar aeb 8-7/+45 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@26 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-04-27Fixed missing setting of ext code in raw1394_start_lock()Gravatar aeb 1-0/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@25 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-04-15Fixed lock transaction to actually return response value.Gravatar aeb 3-5/+11 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@24 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-04-12Add userdata functions as news.Gravatar aeb 1-0/+4 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@23 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-04-05Add userdata functions.Gravatar aeb 3-0/+18 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@22 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-03-18Bump version number to 0.6.Gravatar aeb 3-5/+6 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@21 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-03-18Mention byte order change.Gravatar aeb 1-0/+2 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@20 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-03-18Mention SourceForge home.Gravatar aeb 1-1/+5 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@19 53a565d1-3bb7-0310-b661-cf11e63c67ab