From 9a02352a151628a9242d0fa665ad9d6b773c532d Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Wed, 22 Mar 2017 06:59:50 +0100 Subject: [PATCH] mescc: Run full scheme reader read-0.mes. * lib.c (load_env)[MINI_MES]: Load full reader, module/mes/read-0.mes. * GNUmakefile (module/mes/read-0-32.mo): Update dependency. * module/mes/mini-0.mes: Remove. * doc/examples/t.c (struct_test): * module/mes/read-0-32.mo: New file: bootstrap binary reader. --- .gitignore | 1 - GNUmakefile | 2 +- lib.c | 9 +- module/mes/mini-0.mes | 471 ---------------------------------------- module/mes/read-0-32.mo | Bin 0 -> 83213 bytes scaffold/mini-mes.c | 7 +- 6 files changed, 6 insertions(+), 484 deletions(-) delete mode 100644 module/mes/mini-0.mes create mode 100644 module/mes/read-0-32.mo diff --git a/.gitignore b/.gitignore index cbf2a3d5..deae9fad 100644 --- a/.gitignore +++ b/.gitignore @@ -34,7 +34,6 @@ /module/mes/tiny-0-32.mo #keep this: bootstrap #/module/mes/read-0-32.mo -/module/mes/mini-0.mo /module/mes/read-0.mo /out ? diff --git a/GNUmakefile b/GNUmakefile index 0f9a634e..df0fa531 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -100,7 +100,7 @@ mes-32: mes.c lib.c guix environment --system=i686-linux --ad-hoc gcc-toolchain -- bash -c 'make mes CC=i686-unknown-linux-gnu-gcc LIBRARY_PATH=$${PATH%%/bin:*}/lib' mv mes mes-32 -module/mes/read-0-32.mo: module/mes/mini-0.mes mes-32 +module/mes/read-0-32.mo: module/mes/read-0.mes mes-32 MES_MINI=1 ./mes-32 --dump < $< > $@ module/mes/tiny-0-32.mo: module/mes/tiny-0.mes mes-32 diff --git a/lib.c b/lib.c index 503d3ce4..5ef86037 100644 --- a/lib.c +++ b/lib.c @@ -205,13 +205,8 @@ SCM load_env (SCM a) ///((internal)) { r0 = a; - if (getenv ("MES_MINI")) - g_stdin = fopen ("module/mes/mini-0.mes", "r"); - else - { - g_stdin = fopen ("module/mes/read-0.mes", "r"); - g_stdin = g_stdin ? g_stdin : fopen (PREFIX "module/mes/read-0.mes", "r"); - } + g_stdin = fopen ("module/mes/read-0.mes", "r"); + g_stdin = g_stdin ? g_stdin : fopen (PREFIX "module/mes/read-0.mes", "r"); if (!g_function) r0 = mes_builtins (r0); r2 = read_input_file_env (r0); g_stdin = stdin; diff --git a/module/mes/mini-0.mes b/module/mes/mini-0.mes deleted file mode 100644 index 887b92d4..00000000 --- a/module/mes/mini-0.mes +++ /dev/null @@ -1,471 +0,0 @@ -;;; -*-scheme-*- - -;;; Mes --- Maxwell Equations of Software -;;; Copyright © 2016,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 . - -;;; Commentary: - -;;; bootstrap reader. This file is read by a minimal core reader. It -;;; only supports s-exps and line-comments; quotes, character -;;; literals, string literals cannot be used here. - -;;; Code: - -(begin - - (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 10)) - - ((lambda (a+ a) - - ;; (write-byte (make-cell 0 0 48)) - ;; (write-byte (make-cell 0 0 48)) - ;; (write-byte (make-cell 0 0 48)) - ;; (write-byte (make-cell 0 0 10)) - - (set-cdr! a+ (cdr a)) - (set-cdr! a a+) - (set-cdr! (assq (quote *closure*) a) a+) - (car a+)) - (cons (cons (quote env:define) #f) (list)) - (current-module)) - - ;; (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 49)) (write-byte (make-cell 0 0 10)) - - (set! env:define - (lambda (a+ a) - - ;; (write-byte (make-cell 0 0 48)) - ;; (write-byte (make-cell 0 0 49)) - ;; (write-byte (make-cell 0 0 48)) - ;; (write-byte (make-cell 0 0 10)) - - (set-cdr! a+ (cdr a)) - (set-cdr! a a+) - (set-cdr! (assq (quote *closure*) a) a+) - (car a+))) - - (env:define (cons (cons (quote ) 5) (list)) (current-module)) - - ;; (core:display (quote cm:)) - ;; (core:display ) - ;; (write-byte (make-cell 0 0 10)) - - ;; (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 50)) (write-byte (make-cell 0 0 10)) - - (env:define (cons (cons (quote ) 7) (list)) (current-module)) - - ;; (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 51)) (write-byte (make-cell 0 0 10)) - - (env:define (cons (cons (quote sexp:define) #f) (list)) (current-module)) - - ;; (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 52)) (write-byte (make-cell 0 0 10)) - - (env:define (cons (cons (quote env:macro) #f) (list)) (current-module)) - - ;; (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 53)) (write-byte (make-cell 0 0 10)) - - (env:define (cons (cons (quote cons*) #f) (list)) (current-module)) - - ;; (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 54)) (write-byte (make-cell 0 0 10)) - - (env:define (cons (cons (quote not) - (lambda (x) (if x #f #t))) - (list)) (current-module)) - - ;; (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 55)) (write-byte (make-cell 0 0 10)) - - - (env:define (cons (cons (quote pair?) - (lambda (x) (eq? (core:type x) ))) - (list)) (current-module)) - - ;; (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 56)) (write-byte (make-cell 0 0 10)) - - - (env:define (cons (cons (quote atom?) - (lambda (x) (not (pair? x)))) - (list)) (current-module)) - - ;; (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 57)) (write-byte (make-cell 0 0 10)) - - - (set! sexp:define - (lambda (e a) - - ;; (write-byte (make-cell 0 0 48)) - ;; (write-byte (make-cell 0 0 57)) - ;; (write-byte (make-cell 0 0 48)) - ;; (write-byte (make-cell 0 0 10)) - - (if (atom? (cadr e)) (cons (cadr e) (core:eval (car (cddr e)) a)) - (cons (car (cadr e)) (core:eval (cons (quote lambda) (cons (cdr (cadr e)) (cddr e))) a))))) - - ;; (write-byte (make-cell 0 0 49)) (write-byte (make-cell 0 0 48)) (write-byte (make-cell 0 0 10)) - - (set! env:macro - (lambda (name+entry) - - (write-byte (make-cell 0 0 49)) - (write-byte (make-cell 0 0 48)) - (write-byte (make-cell 0 0 48)) - (write-byte (make-cell 0 0 10)) - - - (cons - (cons (car name+entry) - (make-cell (core:car (car name+entry)) (cdr name+entry))) - (list)))) - - ;; (core:display (quote yyy-XXXmacro-m:)) - ;; (write-byte (make-cell 0 0 10)) - - ;; (core:display (quote macro-m:)) - ;; (core:display (make-cell core:display 1)) - ;; (write-byte (make-cell 0 0 10)) - - ;; (write-byte (make-cell 0 0 49)) (write-byte (make-cell 0 0 49)) (write-byte (make-cell 0 0 10)) - - (set! cons* - (lambda (. rest) - - ;; (write-byte (make-cell 0 0 49)) - ;; (write-byte (make-cell 0 0 49)) - ;; (write-byte (make-cell 0 0 48)) - ;; (write-byte (make-cell 0 0 10)) - - ;; (core:display (quote rest:)) - ;; (core:display rest) - ;; (write-byte (make-cell 0 0 10)) - - (if (null? (cdr rest)) (car rest) - (cons (car rest) (core:apply cons* (cdr rest) (current-module)))))) - - (write-byte (make-cell 0 0 49)) (write-byte (make-cell 0 0 50)) (write-byte (make-cell 0 0 10)) - - (env:define - (env:macro - (sexp:define - (quote - (define-macro (define ARGS . BODY) - - ;; (write-byte (make-cell 0 0 49)) - ;; (write-byte (make-cell 0 0 50)) - ;; (write-byte (make-cell 0 0 48)) - ;; (write-byte (make-cell 0 0 10)) - - (cons* (quote env:define) - (cons* (quote cons) - (cons* (quote sexp:define) - (list (quote quote) - (cons (quote DEFINE) (cons ARGS BODY))) - (quote ((current-module)))) - (quote ((list)))) - (quote ((current-module)))))) - (current-module))) (current-module)) - - (write-byte (make-cell 0 0 49)) (write-byte (make-cell 0 0 51)) (write-byte (make-cell 0 0 10)) - - (env:define - (env:macro - (sexp:define - (quote - (define-macro (define-macro ARGS . BODY) - (cons* (quote env:define) - (list (quote env:macro) - (cons* (quote sexp:define) - (list (quote quote) - (cons (quote DEFINE-MACRO) (cons ARGS BODY))) - (quote ((current-module))))) - (quote ((current-module)))))) - (current-module))) (current-module)) - - (write-byte (make-cell 0 0 49)) (write-byte (make-cell 0 0 52)) (write-byte (make-cell 0 0 10)) - (write-byte (make-cell 0 0 49)) (write-byte (make-cell 0 0 52)) (write-byte (make-cell 0 0 10)) - - ;; (core:display (quote define:)) - ;; (core:display define) - ;; (write-byte (make-cell 0 0 10)) - - (define 0) - - ;; (core:display ) - ;; (write-byte (make-cell 0 0 10)) - ;; (write-byte (make-cell 0 0 49)) (write-byte (make-cell 0 0 53)) (write-byte (make-cell 0 0 10)) - - (define 4) - (define 10) - - (define (newline . rest) (core:stderr (list->string (list (integer->char 10))))) - (define (display x . rest) (core:stderr x)) - - (define (list->symbol lst) (make-symbol lst)) - - (define (symbol->list s) - (core:car s)) - - (define (list->string lst) - (make-cell lst 0)) - - (define (integer->char x) - (make-cell 0 x)) - - (define (symbol->keyword s) - (make-cell (symbol->list s) 0)) - - (define (read) - (read-word (read-byte) (list) (current-module))) - - (define (read-env a) - (read-word (read-byte) (list) a)) - - (define (read-input-file) - (define (helper x) - (if (null? x) x - (cons x (helper (read))))) - (helper (read))) - - (define-macro (cond . clauses) - (list (quote if) (pair? clauses) - (list (quote if) (car (car clauses)) - (if (pair? (cdar clauses)) - (if (eq? (car (cdar clauses)) (quote =>)) - (append2 (cdr (cdar clauses)) (list (caar clauses))) - (list (cons (quote lambda) (cons (list) (car clauses))))) - (list (cons (quote lambda) (cons (list) (car clauses))))) - (if (pair? (cdr clauses)) - (cons (quote cond) (cdr clauses)))))) - - (define (eat-whitespace c) - (cond - ((eq? c 32) (eat-whitespace (read-byte))) - ((eq? c 10) (eat-whitespace (read-byte))) - ((eq? c 9) (eat-whitespace (read-byte))) - ((eq? c 12) (eat-whitespace (read-byte))) - ((eq? c 13) (eat-whitespace (read-byte))) - ((eq? c 59) (begin (read-line-comment c) - (eat-whitespace (read-byte)))) - ((eq? c 35) (cond ((eq? (peek-byte) 33) - (read-byte) - (read-block-comment 33 (read-byte)) - (eat-whitespace (read-byte))) - ((eq? (peek-byte) 59) - (read-byte) - (read-word (read-byte) (list) (list)) - (eat-whitespace (read-byte))) - ((eq? (peek-byte) 124) - (read-byte) - (read-block-comment 124 (read-byte)) - (eat-whitespace (read-byte))) - (#t (unread-byte 35)))) - (#t (unread-byte c)))) - - - (define (read-block-comment s c) - (if (eq? c s) (if (eq? (peek-byte) 35) (read-byte) - (read-block-comment s (read-byte))) - (read-block-comment s (read-byte)))) - - (define (read-line-comment c) - (if (eq? c 10) c - (read-line-comment (read-byte)))) - - (define (read-list a) - (eat-whitespace (read-byte)) - (if (eq? (peek-byte) 41) (begin (read-byte) (list)) - ((lambda (w) - (if (eq? w *dot*) (car (read-list a)) - (cons w (read-list a)))) - (read-word (read-byte) (list) a)))) - - (define-macro (and . x) - (if (null? x) #t - (if (null? (cdr x)) (car x) - (list (quote if) (car x) (cons (quote and) (cdr x)) - #f)))) - - (define-macro (or . x) - (if (null? x) #f - (if (null? (cdr x)) (car x) - (list (quote if) (car x) (car x) - (cons (quote or) (cdr x)))))) - (define (not x) - (if x #f #t)) - - (define (read-character) - (define (read-octal c p n) - (if (not (and (> p 47) (< p 56))) n - (read-octal (read-byte) (peek-byte) (+ (ash n 3) (- p 48))))) - - (define (read-name c p n) - (define (lookup-char n) - (cond ((assq n (quote ((*foe* . -1) - (lun . 0) - (mrala . 7) - (ecapskcab . 8) - (bat . 9) - (enilwen . 10) - (batv . 11) - (egap . 12) - (nruter . 13) - (ecaps . 32)))) => cdr) - (#t (error (quote char-not-supported) n)))) - (if (not (or (eq? p 42) (and (> p 96) (< p 123)))) (integer->char (lookup-char (list->symbol (cons (integer->char c) n)))) - (read-name (read-byte) (peek-byte) (cons (integer->char c) n)))) - - ((lambda (c p) - (cond ((and (> c 47) (< c 56) (> p 47) (< p 56)) - (integer->char (read-octal c p (- c 48)))) - ((and (or (= c 42) (and (> c 96) (< c 123))) - (or (= p 42) (and (> p 96) (< p 123)))) (read-name c p (list))) - (#t (integer->char c)))) - (read-byte) (peek-byte))) - - (define (read-hex) - (define (calc c) - (cond ((and (> c 64) (< c 71)) (+ (- c 65) 10)) - ((and (> c 96) (< c 103)) (+ (- c 97) 10)) - ((and (> c 47) (< c 58)) (- c 48)) - (#t 0))) - (define (read-hex c p n) - (if (not (or (and (> p 64) (< p 71)) - (and (> p 96) (< p 103)) - (and (> p 47) (< p 58)))) (+ (ash n 4) (calc c)) - (read-hex (read-byte) (peek-byte) (+ (ash n 4) (calc c))))) - ((lambda (c p) - (read-hex c p 0)) - (read-byte) (peek-byte))) - - (define (read-string) - (define (append-char s c) - (append2 s (cons (integer->char c) (list)))) - (define (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))) - (read-byte))) - ((and (eq? c 92) (eq? p 110)) - (read-byte) - (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)))) - - (define (map1 f lst) - (if (null? lst) (list) - (cons (f (car lst)) (map1 f (cdr lst))))) - - (define (lookup w a) - (core:lookup (map1 integer->char w) a)) - - (define (read-hash c w a) - (cond - ((eq? c 33) (begin (read-block-comment 33 (read-byte)) - (read-word (read-byte) w a))) - ((eq? c 124) (begin (read-block-comment 124 (read-byte)) - (read-word (read-byte) w a))) - ((eq? c 40) (list->vector (read-list a))) - ((eq? c 92) (read-character)) - ((eq? c 120) (read-hex)) - ((eq? c 44) (cond ((eq? (peek-byte) 64) - (read-byte) - (cons (quote unsyntax-splicing) - (cons (read-word (read-byte) w a) w))) - (#t (cons (quote unsyntax) - (cons (read-word (read-byte) w a) w))))) - ((eq? c 39) (cons (quote syntax) (cons (read-word (read-byte) w a) w))) - ((eq? c 58) (symbol->keyword (read-word (read-byte) w a))) - ((eq? c 59) (begin (read-word (read-byte) w a) - (read-word (read-byte) w a))) - ((eq? c 96) (cons (quote quasisyntax) - (cons (read-word (read-byte) w a) w))) - (#t (read-word c (append2 w (cons 35 w)) a)))) - - (define (read-word c w a) - - (write-byte (make-cell 0 0 66)) - (write-byte (make-cell 0 0 66)) - (write-byte (make-cell 0 0 58)) - (write-byte c) - (write-byte (make-cell 0 0 10)) - - (cond - ((or (and (> c 96) (< c 123)) - (eq? c 45) - (eq? c 63) - (and (> c 47) (< c 58))) - (read-word (read-byte) (append2 w (cons c (list))) a)) - ((eq? c 10) (if (null? w) (read-word (read-byte) (list) a) (lookup w a))) - ((eq? c 40) (if (null? w) (read-list a) - (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) - (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))) - ((eq? c 35) (read-hash (read-byte) w a)) - ((eq? c 39) (if (null? w) (cons (quote quote) - (cons (read-word (read-byte) w a) (list))) - (begin (unread-byte c) (lookup w a)))) - ((eq? c 44) (cond - ((eq? (peek-byte) 64) - (begin (read-byte) - (cons - (quote unquote-splicing) - (cons (read-word (read-byte) w a) (list))))) - (#t (cons (quote unquote) - (cons (read-word (read-byte) w a) (list)))))) - ((eq? c 96) (cons (quote quasiquote) (cons (read-word (read-byte) w a) (list)))) - ((eq? c 59) (read-line-comment c) (read-word 10 w a)) - ((eq? c 9) (read-word 32 w a)) - ((eq? c 12) (read-word 32 w a)) - ((eq? c -1) (list)) - (#t (read-word (read-byte) (append2 w (cons c (list))) a)))) - - (write-byte (make-cell 0 0 65)) - (write-byte (make-cell 0 0 66)) - (write-byte (make-cell 0 0 67)) - (write-byte (make-cell 0 0 10)) - - (core:display (quote bla-bla)) - (write-byte (make-cell 0 0 10)) - - ((lambda (p) - ;;(core:display (quote here-we-go)) - (write-byte (make-cell 0 0 65)) - (write-byte (make-cell 0 0 65)) - (write-byte (make-cell 0 0 65)) - (write-byte (make-cell 0 0 65)) - (write-byte (make-cell 0 0 10)) - - (core:display (quote blub-blub)) - (write-byte (make-cell 0 0 10)) - - (write-byte (make-cell 0 0 112)) - (write-byte (make-cell 0 0 58)) - ;;(core:display (quote p:)) - (core:display p) - (write-byte (make-cell 0 0 10)) - (core:eval (cons (quote begin) p) (current-module))) - (read-input-file)) - - ;;(read-input-file) - -) diff --git a/module/mes/read-0-32.mo b/module/mes/read-0-32.mo new file mode 100644 index 0000000000000000000000000000000000000000..1efbbfd798bfbebb1bc0ad4cfd827a505716dbf5 GIT binary patch literal 83213 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 literal 0 HcmV?d00001 diff --git a/scaffold/mini-mes.c b/scaffold/mini-mes.c index d8556cf9..91f36895 100644 --- a/scaffold/mini-mes.c +++ b/scaffold/mini-mes.c @@ -37,10 +37,9 @@ #define NYACC_CDR nyacc_cdr #endif -// int ARENA_SIZE = 1200000; -// char arena[1200000]; -int ARENA_SIZE = 2000000; -char arena[2000000]; + +int ARENA_SIZE = 4000000; +char arena[4000000]; typedef int SCM;