Skip to content

Commit 938b965

Browse files
authored
Merge pull request #386 from yamacir-kit/syntactic-closure
Syntactic closure
2 parents bb143aa + 7929742 commit 938b965

34 files changed

+634
-580
lines changed

.github/workflows/build.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
jobs:
77
Ubuntu:
88
runs-on: ${{ matrix.system }}
9-
timeout-minutes: 240
9+
timeout-minutes: 360
1010
env:
1111
CXX: ${{ matrix.compiler }}
1212
strategy:

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ sudo rm -rf /usr/local/share/meevax
100100

101101
| Target Name | Description
102102
|:-------------------|:--
103-
| `all` (default) | Build shared-library `libmeevax.0.3.948.so` and executable `meevax`.
103+
| `all` (default) | Build shared-library `libmeevax.0.3.970.so` and executable `meevax`.
104104
| `test` | Test executable `meevax`.
105-
| `package` | Generate debian package `meevax_0.3.948_amd64.deb`.
105+
| `package` | Generate debian package `meevax_0.3.970_amd64.deb`.
106106
| `install` | Copy files into `/usr/local` __(1)__.
107107
| `install.deb` | `all` + `package` + `sudo apt install <meevax>.deb`
108108
| `safe-install.deb` | `all` + `test` + `package` + `sudo apt install <meevax>.deb`
@@ -117,7 +117,7 @@ __(1)__ Meevax installed by `make install` cannot be uninstalled by the system's
117117
## Usage
118118

119119
```
120-
Meevax Lisp System, version 0.3.948
120+
Meevax Lisp System, version 0.3.970
121121
122122
Usage: meevax [OPTION...] [FILE...]
123123

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.3.948
1+
0.3.970

basis/overture.ss

+31-34
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
(lambda (form use-env mac-env)
1919
(make-syntactic-closure use-env '() (f form mac-env))))
2020

21-
(define (experimental:er-macro-transformer f)
21+
(define (er-macro-transformer f)
2222
(lambda (form use-env mac-env)
2323
(define rename:list (list))
2424
(define (rename x)
@@ -35,23 +35,21 @@
3535
(begin (set! rename:list (alist-cons x (make-syntactic-closure mac-env '() x) rename:list))
3636
(cdar rename:list)))))
3737
(define (compare x y)
38-
(free-identifier=? (if (syntactic-closure? x) x
39-
(make-syntactic-closure use-env '() x))
40-
(if (syntactic-closure? y) y
41-
(make-syntactic-closure use-env '() y))))
38+
(eqv? (if (syntactic-closure? x) x
39+
(make-syntactic-closure use-env '() x))
40+
(if (syntactic-closure? y) y
41+
(make-syntactic-closure use-env '() y))))
4242
(f form rename compare)))
4343

44-
(define define-syntax define)
45-
46-
(experimental:define-syntax import
47-
(experimental:er-macro-transformer
44+
(define-syntax import
45+
(er-macro-transformer
4846
(lambda (form rename compare)
4947
(list (rename 'quote) (cons 'import (cdr form))))))
5048

5149
; ------------------------------------------------------------------------------
5250

53-
(experimental:define-syntax cond
54-
(experimental:er-macro-transformer
51+
(define-syntax cond
52+
(er-macro-transformer
5553
(lambda (form rename compare)
5654
(if (null? (cdr form))
5755
(unspecified)
@@ -76,8 +74,8 @@
7674
(cons (rename 'cond) (cddr form))))))
7775
(cadr form))))))
7876

79-
(experimental:define-syntax and
80-
(experimental:er-macro-transformer
77+
(define-syntax and
78+
(er-macro-transformer
8179
(lambda (form rename compare)
8280
(cond ((null? (cdr form)))
8381
((null? (cddr form))
@@ -88,8 +86,8 @@
8886
(cddr form))
8987
#f))))))
9088

91-
(experimental:define-syntax or
92-
(experimental:er-macro-transformer
89+
(define-syntax or
90+
(er-macro-transformer
9391
(lambda (form rename compare)
9492
(cond ((null? (cdr form)) #f)
9593
((null? (cddr form))
@@ -125,8 +123,8 @@
125123
(car xs)))
126124
(reverse xs))))
127125

128-
(experimental:define-syntax quasiquote
129-
(experimental:er-macro-transformer
126+
(define-syntax quasiquote
127+
(er-macro-transformer
130128
(lambda (form rename compare)
131129
(define (expand x depth)
132130
(cond ((pair? x)
@@ -170,14 +168,14 @@
170168

171169
(define (not x) (if x #f #t))
172170

173-
(experimental:define-syntax when
174-
(experimental:er-macro-transformer
171+
(define-syntax when
172+
(er-macro-transformer
175173
(lambda (form rename compare)
176174
`(,(rename 'if) ,(cadr form)
177175
(,(rename 'begin) ,@(cddr form))))))
178176

179-
(experimental:define-syntax unless
180-
(experimental:er-macro-transformer
177+
(define-syntax unless
178+
(er-macro-transformer
181179
(lambda (form rename compare)
182180
`(,(rename 'if) (,(rename 'not) ,(cadr form))
183181
(,(rename 'begin) ,@(cddr form))))))
@@ -244,8 +242,8 @@
244242
#f)
245243
(any-2+ f (cons x xs))))
246244

247-
(experimental:define-syntax let
248-
(experimental:er-macro-transformer
245+
(define-syntax let
246+
(er-macro-transformer
249247
(lambda (form rename compare)
250248
(if (identifier? (cadr form))
251249
`(,(rename 'letrec) ((,(cadr form)
@@ -255,17 +253,17 @@
255253
,@(map cadr (cadr form)))))))
256254

257255

258-
(experimental:define-syntax let*
259-
(experimental:er-macro-transformer
256+
(define-syntax let*
257+
(er-macro-transformer
260258
(lambda (form rename compare)
261259
(if (null? (cadr form))
262260
`(,(rename 'let) () ,@(cddr form))
263261
`(,(rename 'let) (,(caadr form))
264262
(,(rename 'let*) ,(cdadr form)
265263
,@(cddr form)))))))
266264

267-
(experimental:define-syntax letrec*
268-
(experimental:er-macro-transformer
265+
(define-syntax letrec*
266+
(er-macro-transformer
269267
(lambda (form rename compare)
270268
`(,(rename 'let) ()
271269
,@(map (lambda (x) (cons (rename 'define) x))
@@ -282,8 +280,8 @@
282280
(define (memq o x) (member o x eq?))
283281
(define (memv o x) (member o x eqv?))
284282

285-
(experimental:define-syntax case
286-
(experimental:er-macro-transformer
283+
(define-syntax case
284+
(er-macro-transformer
287285
(lambda (form rename compare)
288286
(define (body xs)
289287
(cond ((null? xs) (rename 'result))
@@ -307,8 +305,8 @@
307305
`(,(rename 'let) ((,(rename 'result) ,(cadr form)))
308306
,(each-clause (cddr form))))))
309307

310-
(experimental:define-syntax do
311-
(experimental:er-macro-transformer
308+
(define-syntax do
309+
(er-macro-transformer
312310
(lambda (form rename compare)
313311
(let ((body `(,(rename 'begin) ,@(cdddr form)
314312
(,(rename 'rec) ,@(map (lambda (x)
@@ -660,11 +658,10 @@
660658
; (apply consumer xs)))
661659

662660
(define (call-with-values producer consumer)
663-
((lambda (vs)
661+
(let ((vs (producer)))
664662
(if (values? vs)
665663
(apply consumer (cdr vs))
666-
(consumer vs)))
667-
(producer)))
664+
(consumer vs))))
668665

669666
; ---- 6.11. Exceptions --------------------------------------------------------
670667

0 commit comments

Comments
 (0)