nendo 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/emacs/nendo-mode.el CHANGED
@@ -150,6 +150,8 @@ Editing commands are similar to those of 'scheme-mode'."
150
150
  (let-match . 2)
151
151
  (let-optionals* . 2)
152
152
  (let-values . 1)
153
+ (let-syntax . 1)
154
+ (letrec-syntax . 1)
153
155
  (let1 . 2)
154
156
  (let/cc . 1)
155
157
  (make . 1)
data/lib/init.nnd CHANGED
@@ -61,8 +61,8 @@
61
61
 
62
62
  (define %expand-define-form
63
63
  (lambda (arg-and-body)
64
- (let ((arg (car arg-and-body))
65
- (body (cdr arg-and-body)))
64
+ (%let ((arg (car arg-and-body))
65
+ (body (cdr arg-and-body)))
66
66
  ;; (define (func arg...) body)
67
67
  (if (not (pair? arg))
68
68
  ;; (define var body)
@@ -168,15 +168,20 @@
168
168
  (lambda str-lst
169
169
  (string-join str-lst "")))
170
170
 
171
+ (define (string=? a b)
172
+ (eq? a b))
171
173
 
172
174
  ;; ----------------------------------------
173
175
  ;; basic forms
174
176
  ;; ----------------------------------------
175
177
  (define (macroexpand sexp)
176
- (let ((newsexp (macroexpand-1 sexp)))
177
- (if (not (equal? sexp newsexp))
178
- (macroexpand newsexp)
179
- newsexp)))
178
+ (%let ((newsexp (macroexpand-1 sexp)))
179
+ (if (not (equal? sexp newsexp))
180
+ (macroexpand newsexp)
181
+ (strip-let-syntax-keyword
182
+ (strip-syntax-quote
183
+ newsexp)))))
184
+
180
185
 
181
186
  (define (feedto)
182
187
  (error "=> (feedto) appeared outside cond or case."))
@@ -185,9 +190,9 @@
185
190
  (macro lst
186
191
  (letrec ((case-block
187
192
  (lambda (elem . elseblock)
188
- (let ((condition (if (eq? 'else (car elem))
189
- true
190
- (car elem)))
193
+ (%let ((condition (if (eq? 'else (car elem))
194
+ true
195
+ (car elem)))
191
196
  (body (if (null? (cdr elem))
192
197
  '(#t)
193
198
  (cdr elem)))
@@ -221,7 +226,7 @@
221
226
  (define let1
222
227
  (macro (var expr . body)
223
228
  (append
224
- (list 'let (list (list var expr)))
229
+ (list '%let (list (list var expr)))
225
230
  body)))
226
231
 
227
232
  (define or
@@ -375,8 +380,8 @@
375
380
  (second x))
376
381
  (second lst))))
377
382
 
378
- ;; don't touch
379
- `(let ,@lst))))
383
+ ;; trasform to internal let syntax (%let)
384
+ `(%let ,@lst))))
380
385
 
381
386
  (define if-let1
382
387
  (macro (var _expr _then . _else)
@@ -384,6 +389,10 @@
384
389
  (if ,var ,_then ,@_else))))
385
390
 
386
391
 
392
+ (define push!
393
+ (macro (_lst _val)
394
+ `(set! ,_lst (append (list ,_val) ,_lst))))
395
+
387
396
  ;; ----------------------------------------
388
397
  ;; errorf
389
398
  ;; ----------------------------------------
@@ -541,9 +550,9 @@
541
550
  (define (%internal-define-to-letrec _sym _src)
542
551
  (if (not (list? (cadr _src)))
543
552
  `(,_sym ,@_src)
544
- (let ((body (cdr _src))
545
- (defs '())
546
- (rest '()))
553
+ (%let ((body (cdr _src))
554
+ (defs '())
555
+ (rest '()))
547
556
  (if (not (list? (car body)))
548
557
  `(,_sym ,@_src)
549
558
  (begin
@@ -554,8 +563,8 @@
554
563
  (set! defs (cons (%expand-define-form (cdr x)) defs))
555
564
  (set! rest (cons x rest))))
556
565
  body)
557
- (let ((defs (reverse defs))
558
- (rest (reverse rest)))
566
+ (%let ((defs (reverse defs))
567
+ (rest (reverse rest)))
559
568
  (if (< 0 (length defs))
560
569
  `(,_sym
561
570
  ,(car _src)
@@ -872,7 +881,7 @@
872
881
  (define (cons* arg . args)
873
882
  (if (null? args)
874
883
  arg
875
- (cons arg (apply list* args))))
884
+ (cons arg (apply cons* args))))
876
885
  (define list* cons*)
877
886
 
878
887
 
@@ -1304,11 +1313,11 @@
1304
1313
 
1305
1314
 
1306
1315
  ;; ----------------------------------------
1307
- ;; tail-call-optimization
1316
+ ;; tail call optimization
1308
1317
  ;; ----------------------------------------
1309
- (define (setup-tailcall-mark sexp)
1318
+ (define (%setup-%tailcall-mark sexp)
1310
1319
  (define (reserved? sym)
1311
- (let* ([reserved-orig '(quote syntax-quote macro %syntax begin lambda if let letrec define define-syntax)]
1320
+ (let* ([reserved-orig '(quote syntax-quote macro %syntax begin lambda if %let letrec define define-syntax)]
1312
1321
  [reserved (append reserved-orig
1313
1322
  (map
1314
1323
  (lambda (orig)
@@ -1324,7 +1333,7 @@
1324
1333
  (list name
1325
1334
  (if (list? body)
1326
1335
  (if (reserved? (car body))
1327
- (setup-tailcall-mark body)
1336
+ (%setup-%tailcall-mark body)
1328
1337
  body)
1329
1338
  body))))
1330
1339
  args))
@@ -1336,7 +1345,7 @@
1336
1345
  ((and (list? sexp)
1337
1346
  (< 0 (length sexp)))
1338
1347
  (if (reserved? (car sexp))
1339
- (setup-tailcall-mark sexp)
1348
+ (%setup-%tailcall-mark sexp)
1340
1349
  (if (pair? (car sexp))
1341
1350
  sexp ;; e.g. ((lambda (x) ...)
1342
1351
  `(%tailcall ,sexp))))
@@ -1356,7 +1365,7 @@
1356
1365
  (cons
1357
1366
  (if (reserved? (car last))
1358
1367
  ;; recursive
1359
- (setup-tailcall-mark last)
1368
+ (%setup-%tailcall-mark last)
1360
1369
  ;; this is the tailcall!
1361
1370
  `(%tailcall ,last))
1362
1371
  other))))))
@@ -1395,7 +1404,7 @@
1395
1404
  ,(second sexp)
1396
1405
  ,(setup-proc (third sexp))
1397
1406
  ,(setup-proc (fourth sexp))))))
1398
- ((let /nendo/core/let)
1407
+ ((%let /nendo/core/%let)
1399
1408
  `(,_car
1400
1409
  ,(setup-let-args (second sexp))
1401
1410
  ,@(setup-proc-body (cddr sexp))))
@@ -1410,7 +1419,7 @@
1410
1419
  ,(if (and (list? val)
1411
1420
  (not (null? val))
1412
1421
  (reserved? (car val)))
1413
- (setup-tailcall-mark val)
1422
+ (%setup-%tailcall-mark val)
1414
1423
  val))))
1415
1424
  ((set! /nendo/core/set!)
1416
1425
  (let1 val (third sexp)
@@ -1419,7 +1428,7 @@
1419
1428
  ,(if (and (list? val)
1420
1429
  (not (null? val))
1421
1430
  (reserved? (car val)))
1422
- (setup-tailcall-mark val)
1431
+ (%setup-%tailcall-mark val)
1423
1432
  val))))
1424
1433
  (else
1425
1434
  (if (symbol? (car sexp))
@@ -1429,29 +1438,29 @@
1429
1438
  sexp)))
1430
1439
 
1431
1440
 
1441
+
1432
1442
  ;; definition of 'compile-phase'
1433
1443
  (set! %compile-phase-functions
1434
1444
  (list
1435
- setup-tailcall-mark
1445
+ %setup-%tailcall-mark
1436
1446
  ))
1437
1447
 
1438
1448
 
1439
-
1440
1449
  ;; explicit renameing macro transformer
1441
1450
  ;; ported from chibi-scheme-0.3 by Kiyoka Nishiyama
1442
1451
  ;;
1443
1452
  ;; URL: http://community.schemewiki.org/?syntactic-closures
1444
1453
  ;;
1445
- (define (strip-syntactic-closures expr)
1446
- expr)
1447
-
1448
-
1449
1454
  (define (identifier? x)
1450
1455
  (symbol? x))
1451
1456
 
1452
1457
  (define (identifier=? use-env-x x use-env-y y)
1453
1458
  (eq? x y))
1454
1459
 
1460
+ (define (identifier->symbol id)
1461
+ (when (not (symbol? id))
1462
+ (error "Error: identifier->symbol requires only symbol"))
1463
+ id)
1455
1464
 
1456
1465
  ;; readable code for nendo. (original code is chibi-scheme-0.3)
1457
1466
  (define er-macro-transformer
@@ -1469,7 +1478,6 @@
1469
1478
  name)
1470
1479
  (make-syntactic-closure mac-env '() identifier))))))
1471
1480
  (define (_compare x y)
1472
- (sprintf "compare( %s %s )" x y)
1473
1481
  (identifier=? use-env x use-env y))
1474
1482
 
1475
1483
  (expander-main
@@ -1483,6 +1491,12 @@
1483
1491
  (define-syntax syntax-rules
1484
1492
  (er-macro-transformer
1485
1493
  (lambda (expr rename compare)
1494
+ (when (not (pair? (cdr expr)))
1495
+ (error "syntax-rules requires: (syntax-rules (ellipses...) ..patterns..) form (1). but got: " expr))
1496
+ (when (not (or (null? (cadr expr)) (list? (cadr expr))))
1497
+ (error "syntax-rules requires: (syntax-rules (ellipses...) ..patterns..) form (2). but got: " expr))
1498
+ (when (> 3 (length expr))
1499
+ (error "syntax-rules requires: (syntax-rules (ellipses...) ..patterns..) form (3). but got: " expr))
1486
1500
  (let ((ellipse-specified? (identifier? (cadr expr)))
1487
1501
  (count 0)
1488
1502
  (_er-macro-transformer (rename 'er-macro-transformer))
@@ -1502,7 +1516,8 @@
1502
1516
  (_- (rename '-)) (_>= (rename '>=)) (_error (rename 'error))
1503
1517
  (_ls (rename 'ls)) (_res (rename 'res)) (_i (rename 'i))
1504
1518
  (_vector->list (rename 'vector->list))
1505
- (_list->vector (rename 'list->vector)))
1519
+ (_list->vector (rename 'list->vector))
1520
+ (_list (rename 'list)))
1506
1521
  (define ellipse (rename (if ellipse-specified? (cadr expr) '...)))
1507
1522
  (define lits (if ellipse-specified? (caddr expr) (cadr expr)))
1508
1523
  (define forms (if ellipse-specified? (cdddr expr) (cddr expr)))
@@ -1689,5 +1704,6 @@
1689
1704
  (list (list _error "no expansion for"
1690
1705
  (list (rename 'strip-syntactic-closures) _expr)))))))))))
1691
1706
 
1707
+ (define-syntax %syntax-rules syntax-rules)
1692
1708
 
1693
1709
  ;;[EOS]