From d938b38d5e9453814f617577db6acf93363b57ed Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sat, 1 Apr 2017 12:51:35 +0200 Subject: [PATCH] scm: Add open-input-string, read-string. * module/mes/guile.mes (open-input-string, read-string): New functions. * tests/guile.test: New file. * GNUmakefile (TESTS): Add it. --- GNUmakefile | 1 + module/mes/guile.mes | 51 ++++++++++++++++++++++++ module/mes/libc.mes | 6 +-- module/mes/read-0-32.mo | Bin 81497 -> 81713 bytes module/mes/read-0.mes | 16 ++++---- tests/guile.test | 86 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 149 insertions(+), 11 deletions(-) create mode 100755 tests/guile.test diff --git a/GNUmakefile b/GNUmakefile index af7a51bb..9e9d6b08 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -74,6 +74,7 @@ TESTS:=\ tests/psyntax.test\ tests/pmatch.test\ tests/let-syntax.test\ + tests/guile.test\ tests/record.test\ tests/match.test\ tests/peg.test\ diff --git a/module/mes/guile.mes b/module/mes/guile.mes index a0e0ac0d..559c5e68 100644 --- a/module/mes/guile.mes +++ b/module/mes/guile.mes @@ -73,3 +73,54 @@ (r (thunk))) (set-current-input-port save) r)))) + +(define open-input-string + (let ((save-set-current-input-port #f) + (string-port #f)) + (lambda (string) + (set! save-set-current-input-port set-current-input-port) + (set! string-port (cons '*string-port* (gensym))) + (set! set-current-input-port + (let ((save-peek-char peek-char) + (save-read-char read-char) + (save-unread-char unread-char) + (tell 0) + (end (string-length string))) + (lambda (port) + (if (not (equal? port string-port)) (save-set-current-input-port port) + (begin + (set! peek-char + (lambda () (if (= tell end) (integer->char -1) + (string-ref string (- tell 1))))) + (set! read-char + (lambda () (if (= tell end) (integer->char -1) + (begin + (set! tell (1+ tell)) + (string-ref string (- tell 1)))))) + (set! unread-char + (lambda (c) (set! tell (1- tell)) c)) + (set! set-current-input-port + (lambda (port) + (save-set-current-input-port port) + (set! peek-char save-peek-char) + (set! read-char save-read-char) + (set! unread-char save-unread-char) + (set! set-current-input-port save-set-current-input-port) + string-port))))))) + string-port))) + +(define (read-string) + (define (append-char s c) + (append2 s (cons c (list)))) + (define (read-string c p s) + (cond + ((and (eq? c #\\) (or (eq? p #\\) (eq? p #\"))) + ((lambda (c) + (read-string (read-char) (peek-char) (append-char s c))) + (read-char))) + ((and (eq? c #\\) (eq? p #\n)) + (read-char) + (read-string (read-char) (peek-char) (append-char s 10))) + ((eq? c #\*eof*) s) + (#t (read-string (read-char) (peek-char) (append-char s c))))) + (list->string (read-string (read-char) (peek-char) (list)))) diff --git a/module/mes/libc.mes b/module/mes/libc.mes index c6c95015..f0b101ce 100644 --- a/module/mes/libc.mes +++ b/module/mes/libc.mes @@ -319,7 +319,7 @@ realloc (int *p, int size) puts strcmp itoa - ;; isdigit - ;; malloc - ;; realloc + isdigit + malloc + realloc )) diff --git a/module/mes/read-0-32.mo b/module/mes/read-0-32.mo index 78d97a834ddf85f4f968e0ae96154f290492dfaf..915d5942a616a87d4ca7a160ff9fb512dcc7ea0e 100644 GIT binary patch literal 81713 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 diff --git a/module/mes/read-0.mes b/module/mes/read-0.mes index afb99044..7dd4888e 100644 --- a/module/mes/read-0.mes +++ b/module/mes/read-0.mes @@ -248,22 +248,22 @@ (read-hex c p 1 0))) (read-byte) (peek-byte))) - (define (read-string) + (define (reader:read-string) (define (append-char s c) (append2 s (cons (integer->char c) (list)))) - (define (read-string c p s) + (define (reader:read-string c p s) (cond ((and (eq? c 92) (or (eq? p 92) (eq? p 34))) ((lambda (c) - (read-string (read-byte) (peek-byte) (append-char s c))) + (reader:read-string (read-byte) (peek-byte) (append-char s c))) (read-byte))) ((and (eq? c 92) (eq? p 110)) (read-byte) - (read-string (read-byte) (peek-byte) (append-char s 10))) + (reader:read-string (read-byte) (peek-byte) (append-char s 10))) ((eq? c 34) s) - ((eq? c -1) (error (quote EOF-in-string))) - (#t (read-string (read-byte) (peek-byte) (append-char s c))))) - (list->string (read-string (read-byte) (peek-byte) (list)))) + ((eq? c -1) (error (quote EOF-in-string) (cons c s))) + (#t (reader:read-string (read-byte) (peek-byte) (append-char s c))))) + (list->string (reader:read-string (read-byte) (peek-byte) (list)))) (define (map1 f lst) (if (null? lst) (list) @@ -316,7 +316,7 @@ (begin (unread-byte c) (lookup w a)))) ((eq? c 41) (if (null? w) (quote *FOOBAR*) (begin (unread-byte c) (lookup w a)))) - ((eq? c 34) (if (null? w) (read-string) + ((eq? c 34) (if (null? w) (reader:read-string) (begin (unread-byte c) (lookup w a)))) ((eq? c 32) (if (null? w) (read-word (read-byte) (list) a) (lookup w a))) ((eq? c 10) (if (null? w) (read-word (read-byte) (list) a) (lookup w a))) diff --git a/tests/guile.test b/tests/guile.test new file mode 100755 index 00000000..d53d77d4 --- /dev/null +++ b/tests/guile.test @@ -0,0 +1,86 @@ +#! /bin/sh +# -*-scheme-*- +MES=${MES-$(dirname $0)/../scripts/mes} +echo ' ()' | cat $(dirname $0)/../module/mes/base-0.mes $0 /dev/stdin | $MES $MES_FLAGS "$@" +#paredit:|| +exit $? +!# + +;;; -*-scheme-*- + +;;; Mes --- Maxwell Equations of Software +;;; Copyright © 2017 Jan Nieuwenhuizen +;;; +;;; This file is part of Mes. +;;; +;;; Mes 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. +;;; +;;; Mes 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 Mes. If not, see . + +;;(if guile? (exit 0)) + +(cond-expand + ;;(guile-2) + (guile + (use-modules (ice-9 rdelim))) + (mes + (mes-use-module (mes test)) + (mes-use-module (mes guile)))) + +(pass-if "first dummy" #t) +(pass-if-not "second dummy" #f) + +(pass-if-equal "read-string" "bla" + (with-input-from-string "bla" + (lambda () (read-string)))) + +(pass-if-equal "open-input-string" "bla" + (let* ((port (current-input-port)) + (foo (open-input-string "bla"))) + (set-current-input-port foo) + (let ((s (read-string))) + (set-current-input-port port) + s))) + +;; NYACC +;; === input stack ===================== + +(define *input-stack* (make-fluid '())) + +(define (reset-input-stack) + (fluid-set! *input-stack* '())) + +(define (push-input port) + (let ((curr (current-input-port)) + (ipstk (fluid-ref *input-stack*))) + (fluid-set! *input-stack* (cons curr ipstk)) + (set-current-input-port port))) + +;; Return #f if empty +(define (pop-input) + (let ((ipstk (fluid-ref *input-stack*))) + (if (null? ipstk) #f + (begin + (set-current-input-port (car ipstk)) + (fluid-set! *input-stack* (cdr ipstk)))))) + +(pass-if-equal "push-input" + "bla" + (let () + (push-input (open-input-string "bla")) + (let ((ch (read-char))) + (unread-char ch)) + (let ((x (read-string))) + (let ((pop (pop-input))) + x)))) + +(result 'report) -- 2.28.0