From 4922f3a4437f7ea8495f32aea0aa329830bd2d8b Mon Sep 17 00:00:00 2001 From: Taylan Kammer Date: Sun, 30 Mar 2025 20:10:10 +0200 Subject: moar cleanup --- src/test/data/parser-test-1.scm | 197 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 src/test/data/parser-test-1.scm (limited to 'src/test/data/parser-test-1.scm') diff --git a/src/test/data/parser-test-1.scm b/src/test/data/parser-test-1.scm new file mode 100644 index 0000000..87c41b5 --- /dev/null +++ b/src/test/data/parser-test-1.scm @@ -0,0 +1,197 @@ +;;; bytestructures --- Structured access to bytevector contents. + +;; Copyright © 2015, 2016 Taylan Kammer + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; This is the base of the module, defining the data types and procedures that +;; make up the bytestructures framework. + + +;;; Code: + +;;; Descriptors + +(drt + (%mkbsd size align unwrap getter setter meta) + bsd? + (size bsize) + (align balign) + (unwrap bunwrp) + (getter bgettr) + (setter bsettr) + (meta bmeta)) + +(define mkbsd + (clmbda + ((size align unwrap getter setter) + (%mkbsd + size align unwrap getter setter #f)) + ((size align unwrap getter setter meta) + (%mkbsd + size align unwrap getter setter meta)))) + +(define bdsz + (clmbda + ((dscr) (bdsz dscr #f #f)) + ((dscr bvec offset) + (let ((size (bsize dscr))) + (if (proc? size) + (size #f bvec offset) + size))))) + +(define (bdsz/s bvec offset dscr) + (let ((size (bsize dscr))) + (if (proc? size) + (size #t bvec offset) + size))) + + +;;; Bstrs + +(drt + (mkbstr bvec offset dscr) + bstr? + (bvec bsbvec) + (offset bsofst) + (dscr bsdscr)) + +(define bstr + (clmbda ((dscr) (%bstr dscr #f #f)) + ((dscr values) (%bstr dscr #t values)))) + +(define (%bstr dscr init? values) + (let ((bvec (mkbvec + (bdsz dscr)))) + (when init? + (bspst! bvec 0 dscr values)) + (mkbstr bvec 0 dscr))) + +(define (bssize bstr) + (bdsz (bsdscr bstr) + (bsbvec bstr) + (bsofst bstr))) + +(dsr (bsunwp ...) + (let ((bstr )) + (let ((bvec (bsbvec bstr)) + (offset (bsofst bstr)) + (dscr (bsdscr bstr))) + (bsunwp bvec offset dscr ...)))) + +(defsyn bsnwp* + (synrul () + ((_ ) + (values )) + ((_ ...) + (let ((bvec ) + (offset ) + (dscr )) + (let ((unwrap (bunwrp dscr))) + (when (not unwrap) + (error "cannot" dscr)) + (letvls (((bvec* ofst* dscr*) + (unwrap #f bvec offset ))) + (bsnwp* + bvec* ofst* dscr* ...))))))) + +(defsyr (bsref ...) + (letvls (((bvec offset dscr) + (bsunwp ...))) + (bspref bvec offset dscr))) + +(defsyr (bsref* + ...) + (letvls (((bvec offset dscr) + (bsnwp* + ...))) + (bspref bvec offset dscr))) + +(define (bspref bvec offset dscr) + (let ((getter (bdgtr dscr))) + (if getter + (getter #f bvec offset) + (mkbstr bvec offset dscr)))) + +(defsyr (bsst! ... ) + (letvls (((bvec offset dscr) + (bsunwp ...))) + (bsps! bvec offset dscr ))) + +(defsyr (bsst!* + ... ) + (letvls (((bvec offset dscr) + (bsnwp* + ...))) + (bspst! bvec offset dscr ))) + +(define (bspst! bvec offset dscr value) + (let ((setter (bdstr dscr))) + (if setter + (setter #f bvec offset value) + (if (bvec? value) + (bvecop bvec offset value 0 + (bdsz + dscr bvec offset)) + (error "cannot" + value dscr))))) + +(define (bsrf/d bstr . indxs) + (letvls (((bvec offset dscr) + (bsunwp bstr))) + (let loop ((bvec bvec) + (offset offset) + (dscr dscr) + (indxs indxs)) + (if (null? indxs) + (bspref bvec offset dscr) + (letvls (((bvec* ofst* dscr*) + (bsnwp* + bvec offset dscr (car indxs)))) + (loop bvec* + ofst* + dscr* + (cdr indxs))))))) + +(define (bst!/d bstr . args) + (letvls (((bvec offset dscr) + (bsunwp bstr))) + (let loop ((bvec bvec) + (offset offset) + (dscr dscr) + (args args)) + (if (null? (cdr args)) + (bset! bvec offset dscr (car args)) + (letvls (((bvec* ofst* dscr*) + (bsnwp* + bvec offset dscr (car args)))) + (loop bvec* + ofst* + dscr* + (cdr args))))))) + +(defsyn + bnwp/s + bref/s + bset/s + dba) + +(cexp + (guile (incfp "bstrs")) + (syncas (incld "base")) + (else)) + +;;; base.scm ends here -- cgit v1.2.3