Skip to content

Commit c68cf4c

Browse files
authored
Merge pull request #452 from yamacir-kit/release-candidate
Release candidate
2 parents 873338d + 939ebd5 commit c68cf4c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1877
-1616
lines changed

.github/pull_request_template.md

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## New features
2+
None.
3+
4+
## Obsolete features
5+
None.
6+
7+
## Bug fixes
8+
None.
9+
10+
## Miscellaneous changes
11+
None.

.github/workflows/release.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ jobs:
1212
- run: ./script/setup.sh
1313
- run: cmake -B build -DCMAKE_BUILD_TYPE=Release
1414
- run: cmake --build build --target package
15-
- run: gh release create v${{ env.VERSION }} build/meevax_${{ env.VERSION }}_amd64.deb --generate-notes --title "Version ${{ env.VERSION }}"
15+
- run: gh release create v${{ env.VERSION }} build/meevax_${{ env.VERSION }}_amd64.deb --title "Version ${{ env.VERSION }}"
1616
env:
1717
GH_TOKEN: ${{ github.token }}

README.md

+25-24
Original file line numberDiff line numberDiff line change
@@ -52,27 +52,28 @@ Subset of R7RS-small.
5252

5353
### SRFIs
5454

55-
| Number | Title | Library name | Note |
56-
|--------------------------------------------------------:|:-------------------------------------------------------|:------------------------------------------------------|:------------------|
57-
| [ 1](https://srfi.schemers.org/srfi-1/srfi-1.html) | List Library | [`(srfi 1)`](./basis/srfi-1.ss) | |
58-
| [ 6](https://srfi.schemers.org/srfi-6/srfi-6.html) | Basic String Ports | [`(srfi 6)`](./basis/srfi-6.ss) | R7RS 6.13 |
59-
| [ 4](https://srfi.schemers.org/srfi-4/srfi-4.html) | Homogeneous numeric vector datatypes | [`(srfi 4)`](./basis/srfi-4.ss) | R7RS 6.9 |
60-
| [ 8](https://srfi.schemers.org/srfi-8/srfi-8.html) | receive: Binding to multiple values | [`(srfi 8)`](./basis/srfi-8.ss) | |
61-
| [ 9](https://srfi.schemers.org/srfi-9/srfi-9.html) | Defining Record Types | [`(srfi 9)`](./basis/srfi-9.ss) | R7RS 5.5 |
62-
| [ 10](https://srfi.schemers.org/srfi-10/srfi-10.html) | #, external form | | |
63-
| [ 11](https://srfi.schemers.org/srfi-11/srfi-11.html) | Syntax for receiving multiple values | [`(srfi 11)`](./basis/srfi-11.ss) | R7RS 4.2.2 |
64-
| [ 23](https://srfi.schemers.org/srfi-23/srfi-23.html) | Error reporting mechanism | [`(srfi 23)`](./basis/srfi-23.ss) | R7RS 6.11 |
65-
| [ 30](https://srfi.schemers.org/srfi-30/srfi-30.html) | Nested Multi-line Comments | | R7RS 2.2 |
66-
| [ 31](https://srfi.schemers.org/srfi-31/srfi-31.html) | A special form rec for recursive evaluation | [`(srfi 31)`](./basis/srfi-31.ss) | |
67-
| [ 34](https://srfi.schemers.org/srfi-34/srfi-34.html) | Exception Handling for Programs | [`(srfi 34)`](./basis/srfi-34.ss) | R7RS 6.11 |
68-
| [ 38](https://srfi.schemers.org/srfi-38/srfi-38.html) | External Representation for Data With Shared Structure | [`(srfi 38)`](./basis/srfi-38.ss) | R7RS 6.13.3 |
69-
| [ 39](https://srfi.schemers.org/srfi-39/srfi-39.html) | Parameter objects | [`(srfi 39)`](./basis/srfi-39.ss) | R7RS 4.2.6 |
70-
| [ 45](https://srfi.schemers.org/srfi-45/srfi-45.html) | Primitives for Expressing Iterative Lazy Algorithms | [`(srfi 45)`](./basis/srfi-45.ss) | R7RS 4.2.5 |
71-
| [ 62](https://srfi.schemers.org/srfi-62/srfi-62.html) | S-expression comments | | R7RS 2.2 |
72-
| [ 78](https://srfi.schemers.org/srfi-78/srfi-78.html) | Lightweight testing | [`(srfi 78)`](./basis/srfi-78.ss) | Except `check-ec` |
73-
| [ 87](https://srfi.schemers.org/srfi-87/srfi-87.html) | => in case clauses | | R7RS 4.2.1 |
74-
| [ 98](https://srfi.schemers.org/srfi-98/srfi-98.html) | An interface to access environment variables | [`(srfi 98)`](./basis/srfi-98.ss) | R7RS 6.14 |
75-
| [149](https://srfi.schemers.org/srfi-149/srfi-149.html) | Basic syntax-rules template extensions | [`(srfi 149)`](./basis/srfi-149.ss) | R7RS 4.3.2 |
55+
| Number | Title | Library name | Note |
56+
|--------------------------------------------------------:|:-------------------------------------------------------|:------------------------------------|:------------------|
57+
| [ 0](https://srfi.schemers.org/srfi-0/srfi-0.html) | Feature-based conditional expansion construct | [`(srfi 0)`](./basis/srfi-0.ss) | R7RS 4.2.1 |
58+
| [ 1](https://srfi.schemers.org/srfi-1/srfi-1.html) | List Library | [`(srfi 1)`](./basis/srfi-1.ss) | |
59+
| [ 6](https://srfi.schemers.org/srfi-6/srfi-6.html) | Basic String Ports | [`(srfi 6)`](./basis/srfi-6.ss) | R7RS 6.13 |
60+
| [ 4](https://srfi.schemers.org/srfi-4/srfi-4.html) | Homogeneous numeric vector datatypes | [`(srfi 4)`](./basis/srfi-4.ss) | R7RS 6.9 |
61+
| [ 8](https://srfi.schemers.org/srfi-8/srfi-8.html) | receive: Binding to multiple values | [`(srfi 8)`](./basis/srfi-8.ss) | |
62+
| [ 9](https://srfi.schemers.org/srfi-9/srfi-9.html) | Defining Record Types | [`(srfi 9)`](./basis/srfi-9.ss) | R7RS 5.5 |
63+
| [ 10](https://srfi.schemers.org/srfi-10/srfi-10.html) | #, external form | | |
64+
| [ 11](https://srfi.schemers.org/srfi-11/srfi-11.html) | Syntax for receiving multiple values | [`(srfi 11)`](./basis/srfi-11.ss) | R7RS 4.2.2 |
65+
| [ 23](https://srfi.schemers.org/srfi-23/srfi-23.html) | Error reporting mechanism | [`(srfi 23)`](./basis/srfi-23.ss) | R7RS 6.11 |
66+
| [ 30](https://srfi.schemers.org/srfi-30/srfi-30.html) | Nested Multi-line Comments | | R7RS 2.2 |
67+
| [ 31](https://srfi.schemers.org/srfi-31/srfi-31.html) | A special form rec for recursive evaluation | [`(srfi 31)`](./basis/srfi-31.ss) | |
68+
| [ 34](https://srfi.schemers.org/srfi-34/srfi-34.html) | Exception Handling for Programs | [`(srfi 34)`](./basis/srfi-34.ss) | R7RS 6.11 |
69+
| [ 38](https://srfi.schemers.org/srfi-38/srfi-38.html) | External Representation for Data With Shared Structure | [`(srfi 38)`](./basis/srfi-38.ss) | R7RS 6.13.3 |
70+
| [ 39](https://srfi.schemers.org/srfi-39/srfi-39.html) | Parameter objects | [`(srfi 39)`](./basis/srfi-39.ss) | R7RS 4.2.6 |
71+
| [ 45](https://srfi.schemers.org/srfi-45/srfi-45.html) | Primitives for Expressing Iterative Lazy Algorithms | [`(srfi 45)`](./basis/srfi-45.ss) | R7RS 4.2.5 |
72+
| [ 62](https://srfi.schemers.org/srfi-62/srfi-62.html) | S-expression comments | | R7RS 2.2 |
73+
| [ 78](https://srfi.schemers.org/srfi-78/srfi-78.html) | Lightweight testing | [`(srfi 78)`](./basis/srfi-78.ss) | Except `check-ec` |
74+
| [ 87](https://srfi.schemers.org/srfi-87/srfi-87.html) | => in case clauses | | R7RS 4.2.1 |
75+
| [ 98](https://srfi.schemers.org/srfi-98/srfi-98.html) | An interface to access environment variables | [`(srfi 98)`](./basis/srfi-98.ss) | R7RS 6.14 |
76+
| [149](https://srfi.schemers.org/srfi-149/srfi-149.html) | Basic syntax-rules template extensions | [`(srfi 149)`](./basis/srfi-149.ss) | R7RS 4.3.2 |
7677

7778
## Installation
7879

@@ -121,16 +122,16 @@ sudo rm -rf /usr/local/share/meevax
121122

122123
| Target Name | Description
123124
|--------------------|---
124-
| `all` (default) | Build shared-library `libmeevax.0.4.686.so` and executable `meevax`
125+
| `all` (default) | Build shared-library `libmeevax.0.4.724.so` and executable `meevax`
125126
| `test` | Test executable `meevax`
126-
| `package` | Generate debian package `meevax_0.4.686_amd64.deb`
127+
| `package` | Generate debian package `meevax_0.4.724_amd64.deb`
127128
| `install` | Copy files into `/usr/local`
128129
| `install.deb` | `all` + `package` + `sudo apt install <meevax>.deb`
129130

130131
## Usage
131132

132133
```
133-
Meevax Lisp 0.4.686
134+
Meevax Lisp 0.4.724
134135
135136
Usage:
136137
meevax [option...] [file...]

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.4.686
1+
0.4.724

basis/r4rs-essential.ss

+18-50
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
(meevax string)
1515
(meevax symbol)
1616
(meevax vector)
17-
(rename (meevax write)
18-
(write %write)))
17+
(prefix (meevax write) %))
1918

2019
(export quote lambda if set! cond case and or let letrec begin quasiquote
2120
define not boolean? eqv? eq? equal? pair? cons car cdr set-car!
@@ -140,34 +139,25 @@
140139
(else x)))
141140
(expand (cadr form) 0))))
142141

143-
(define (reverse xs)
144-
(if (null? xs) '()
145-
(append (reverse (cdr xs))
146-
(list (car xs)))))
142+
(define (every f xs)
143+
(if (pair? xs)
144+
(and (f (car xs))
145+
(every f (cdr xs)))
146+
#t))
147147

148148
(define (map f x . xs)
149-
(define (every f x)
150-
(if (pair? x)
151-
(letrec ((every (lambda (f x)
152-
(if (null? (cdr x))
153-
(f (car x))
154-
(if (f (car x))
155-
(every f (cdr x))
156-
#f)))))
157-
(every f x))
158-
#t))
159-
(define (map f x stack)
149+
(define (map f x a)
160150
(if (pair? x)
161151
(map f
162152
(cdr x)
163-
(cons (f (car x)) stack))
164-
(reverse stack)))
165-
(define (map* f xs stack)
153+
(cons (f (car x)) a))
154+
(reverse a)))
155+
(define (map* f xs a)
166156
(if (every pair? xs)
167157
(map* f
168158
(map cdr xs '())
169-
(cons (apply f (map car xs '())) stack))
170-
(reverse stack)))
159+
(cons (apply f (map car xs '())) a))
160+
(reverse a)))
171161
(if (null? xs)
172162
(map f x '())
173163
(map* f (cons x xs) '())))
@@ -221,32 +211,13 @@
221211
(null? x)))
222212
(null? x))))
223213

224-
(define (length x)
225-
(let length ((x x)
226-
(k 0))
227-
(if (pair? x)
228-
(length (cdr x)
229-
(+ k 1))
230-
k)))
231-
232-
(define (list-ref x k)
233-
(let list-ref ((x x)
234-
(k k))
235-
(if (zero? k)
236-
(car x)
237-
(list-ref (cdr x)
238-
(- k 1)))))
239-
240214
(define (member o x . c)
241215
(let ((compare (if (pair? c) (car c) equal?)))
242216
(let member ((x x))
243217
(and (pair? x)
244218
(if (compare o (car x)) x
245219
(member (cdr x)))))))
246220

247-
(define (memq o x)
248-
(member o x eq?))
249-
250221
(define (memv o x)
251222
(member o x eqv?))
252223

@@ -285,9 +256,6 @@
285256
(car alist)
286257
(assoc (cdr alist)))))))
287258

288-
(define (assq key alist)
289-
(assoc key alist eq?))
290-
291259
(define (assv key alist)
292260
(assoc key alist eqv?))
293261

@@ -553,17 +521,17 @@
553521
(current-output-port))))
554522

555523
(define (write-char x . port)
556-
(put-char x (if (pair? port)
557-
(car port)
558-
(current-output-port))))
524+
(%put-char x (if (pair? port)
525+
(car port)
526+
(current-output-port))))
559527

560528
(define (display x . xs)
561529
(cond ((char? x)
562530
(apply write-char x xs))
563531
((string? x)
564-
(put-string x (if (pair? xs) ; NOTE: The procedure write-string is not defined in R4RS.
565-
(car xs)
566-
(current-output-port))))
532+
(%put-string x (if (pair? xs) ; NOTE: The procedure write-string is not defined in R4RS.
533+
(car xs)
534+
(current-output-port))))
567535
(else (apply write x xs))))
568536

569537
(define (newline . port)

basis/r4rs.ss

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
(define-library (scheme r4rs)
22
(import (meevax inexact)
33
(only (meevax core) define-syntax)
4+
(only (meevax list) list-tail)
45
(only (meevax macro-transformer) er-macro-transformer)
56
(only (meevax number) exact-integer? expt exact inexact ratio? ratio-numerator ratio-denominator)
67
(prefix (meevax port) %)
@@ -121,13 +122,6 @@
121122
(atan (imag-part z)
122123
(real-part z)))
123124

124-
(define (list-tail x k)
125-
(let list-tail ((x x)
126-
(k k))
127-
(if (zero? k) x
128-
(list-tail (cdr x)
129-
(- k 1)))))
130-
131125
(define (string-fill! s c . o)
132126
(let ((start (if (and (pair? o)
133127
(exact-integer? (car o)))

basis/r7rs.ss

+15-18
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
(define-library (scheme base)
2-
(import (only (meevax error) error-object? read-error? file-error?)
2+
(import (only (meevax core) include include-case-insensitive)
3+
(only (meevax error) error-object? read-error? file-error?)
34
(only (meevax macro-transformer) er-macro-transformer)
5+
(only (meevax list) make-list)
46
(only (meevax number) exact-integer? exact-integer-square-root)
57
(only (meevax port) binary-port? eof-object flush get-output-u8vector open-input-u8vector open-output-u8vector open? port? standard-error-port standard-input-port standard-output-port textual-port?)
68
(prefix (meevax read) %)
7-
(only (meevax string) string-copy! vector->string)
9+
(only (meevax string) string-copy!)
810
(only (meevax vector homogeneous) u8vector? make-u8vector u8vector u8vector-length u8vector-ref u8vector-set! u8vector-copy u8vector-copy! u8vector-append u8vector->string string->u8vector)
9-
(only (meevax vector) vector-append vector-copy vector-copy! string->vector)
11+
(only (meevax vector) vector-append vector-copy vector-copy! vector->string string->vector)
1012
(only (meevax version) features)
1113
(prefix (meevax write) %)
1214
(scheme r5rs)
15+
(srfi 0)
1316
(srfi 6)
1417
(srfi 9)
1518
(srfi 11)
@@ -18,13 +21,11 @@
1821
(srfi 39))
1922

2023
(export ; 4.1. Primitive expression types
21-
quote lambda if set!
22-
; include include-ci
23-
cond else => case and or when unless
24-
; cond-expand
25-
let let* letrec letrec* let-values let*-values begin do
26-
make-parameter parameterize guard quasiquote unquote unquote-splicing
27-
let-syntax letrec-syntax syntax-rules _ ... syntax-error
24+
quote lambda if set! include include-ci cond else => case and or when
25+
unless cond-expand let let* letrec letrec* let-values let*-values
26+
begin do make-parameter parameterize guard quasiquote unquote
27+
unquote-splicing let-syntax letrec-syntax syntax-rules _ ...
28+
syntax-error
2829

2930
; 5.3. Variable definitions
3031
define define-values define-syntax define-record-type
@@ -95,7 +96,9 @@
9596
; 6.14. System interface
9697
features)
9798

98-
(begin (define-syntax when
99+
(begin (define include-ci include-case-insensitive)
100+
101+
(define-syntax when
99102
(er-macro-transformer
100103
(lambda (form rename compare)
101104
`(,(rename 'if) ,(cadr form)
@@ -185,12 +188,6 @@
185188

186189
(define boolean=? eqv?)
187190

188-
(define (make-list k . x)
189-
(let ((x (if (pair? x) (car x) #f)))
190-
(do ((i k (- i 1))
191-
(xs '() (cons x xs)))
192-
((<= i 0) xs))))
193-
194191
(define (list-set! xs k x)
195192
(set-car! (list-tail xs k) x))
196193

@@ -521,7 +518,7 @@
521518
(define-library (scheme file)
522519
(import (only (meevax file) delete-file file-exists?)
523520
(only (meevax port) open-binary-input-file open-binary-output-file)
524-
(only (scheme base) current-input-port current-output-port define parameterize)
521+
(only (scheme base) close-input-port close-output-port current-input-port current-output-port define parameterize)
525522
(only (scheme r5rs) call-with-input-file call-with-output-file open-input-file open-output-file))
526523

527524
(export call-with-input-file call-with-output-file delete-file file-exists?

basis/srfi-0.ss

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
(define-library (srfi 0)
2+
(import (only (meevax core) implementation-dependent))
3+
(export (rename implementation-dependent cond-expand)))

basis/srfi-149.ss

+11-28
Original file line numberDiff line numberDiff line change
@@ -48,35 +48,18 @@
4848

4949
(define (strip-syntactic-closures x) x)
5050

51-
(define (any f x . xs) ; TODO REMOVE
52-
(define (any-1 f x)
53-
(if (pair? (cdr x))
54-
((lambda (result)
55-
(if result result (any-1 f (cdr x))))
56-
(f (car x)))
57-
(f (car x))))
58-
(define (any-2+ f xs)
59-
(if (every pair? xs)
60-
((lambda (result)
61-
(if result result (any-2+ f (map cdr xs))))
62-
(apply f (map car xs)))
63-
#f))
64-
(if (null? xs)
65-
(if (pair? x)
66-
(any-1 f x)
67-
#f)
68-
(any-2+ f (cons x xs))))
51+
(define (any f xs)
52+
(if (pair? xs)
53+
(or (f (car xs))
54+
(any f (cdr xs)))
55+
#f))
6956

70-
(define (find pred list)
71-
(cond ((find-tail pred list) => car)
72-
(else #f)))
73-
74-
(define (find-tail pred list)
75-
(let lp ((list list))
76-
(and (not (null? list))
77-
(if (pred (car list)) list
78-
(lp (cdr list))))))
79-
)
57+
(define (find f xs)
58+
(if (pair? xs)
59+
(if (f (car xs))
60+
(car xs)
61+
(find f (cdr xs)))
62+
#f)))
8063

8164
(begin (define (syntax-rules-transformer expr rename compare)
8265
(let ((ellipsis-specified? (identifier? (cadr expr)))

0 commit comments

Comments
 (0)