From b63444d91966eeb11ff244327555def31fe5ffb0 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sat, 23 Jul 2016 11:51:06 +0200 Subject: [PATCH] mes.c: barf on unknown symbols. --- mes.c | 7 ++++++- scm.mes | 2 ++ syntax.mes | 30 +++++++----------------------- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/mes.c b/mes.c index 80cd827e..d4f1a165 100644 --- a/mes.c +++ b/mes.c @@ -309,7 +309,7 @@ eval (scm *e, scm *a) if (e->type == SYMBOL) { scm *y = assq (e, a); if (y == &scm_f) { - return e; + //return e; printf ("eval: no such symbol: %s\n", e->name); assert (!"unknown symbol"); } @@ -1108,6 +1108,11 @@ mes_environment () { scm *a = &scm_nil; + a = cons (cons (&scm_f, &scm_f), a); + a = cons (cons (&scm_nil, &scm_nil), a); + a = cons (cons (&scm_t, &scm_t), a); + a = cons (cons (&scm_unspecified, &scm_unspecified), a); + #include "environment.i" return a; diff --git a/scm.mes b/scm.mes index 0382dfb4..edfa8bdc 100755 --- a/scm.mes +++ b/scm.mes @@ -199,6 +199,8 @@ (set! counter (+ counter 1)) (string->symbol (string-append "g" value)))))) + +() ;; srfi-1 (define (last-pair lst) (let loop ((lst lst)) diff --git a/syntax.mes b/syntax.mes index ebc7faee..6232fce7 100644 --- a/syntax.mes +++ b/syntax.mes @@ -41,7 +41,7 @@ (display "mes:define-syntax...") -(define-macro (mes:define-syntax macro-name transformer . stuff) +(define-macro (define-syntax macro-name transformer . stuff) `(define-macro (,macro-name . args) (,transformer (cons ',macro-name args) (lambda (x) x) @@ -63,7 +63,7 @@ (display "mes:define-syntax syntax-rules...") (newline) -(mes:define-syntax syntax-rules +(define-syntax syntax-rules (let () (define name? symbol?) @@ -242,25 +242,9 @@ (make-transformer rules)))) +(define-macro (define-syntax-rule id-pattern . template) + `(define-syntax ,(car id-pattern) + (syntax-rules () + ((,(car id-pattern) . ,(cdr id-pattern)) ,@template)))) -(mes:define-syntax mes:or - (syntax-rules () - ((mes:or) #f) - ((mes:or e) e) - ((mes:or e1 e ...) (let ((temp e1)) - (cond (temp temp) (#t (or e ...))))))) - -(display "(mes:or #f (= 0 1) 'hello-syntax-world): ") -(display (mes:or #f (= 0 1) 'hello-syntax-world)) -(display (mes:or #f '==>baaa)) -(newline) - -(mes:define-syntax mes:when - (syntax-rules () - ((when condition exp ...) - (if condition - (begin exp ...))))) - -(display (mes:when #t "when:hello syntax world")) -(newline) -'syntax-dun +(define else #t)