From 8a3963ddb1bea25a7ce658cad87684646602ae08 Mon Sep 17 00:00:00 2001 From: ESL Date: Sun, 29 Dec 2024 18:04:33 -0500 Subject: [PATCH] qq extension `(,@3) => 3; cond-expand fix --- pre/s.scm | 1 + pre/t.scm | 2 +- s.c | 26 +++++++++++++------------- t.c | 6 +++--- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/pre/s.scm b/pre/s.scm index 92a9183..36fca94 100644 --- a/pre/s.scm +++ b/pre/s.scm @@ -174,6 +174,7 @@ (define-syntax quasiquote (syntax-rules (unquote unquote-splicing quasiquote) [(_ ,x) x] + [(_ (,@x)) x] ; popular extension/optimization [(_ (,@x . y)) (append x `y)] [(_ `x . d) (cons 'quasiquote (quasiquote (x) d))] [(_ ,x d) (cons 'unquote (quasiquote (x) . d))] diff --git a/pre/t.scm b/pre/t.scm index 1ce498e..b5c9ab3 100644 --- a/pre/t.scm +++ b/pre/t.scm @@ -997,7 +997,7 @@ (define (make-cond-expand-transformer) (lambda (sexp env) (define (lit=? id sym) ; match literal as free identifier - (and (id? id) (free-id=? id env sym root-environment sym))) + (and (id? id) (free-id=? id env sym root-environment))) (cons begin-id (preprocess-cond-expand lit=? sexp env)))) diff --git a/s.c b/s.c index 42b400c..ba238ca 100644 --- a/s.c +++ b/s.c @@ -125,19 +125,19 @@ char *s_code[] = { ";y4:step;y3:...;;y3:...;;;;;;", "S", "quasiquote", - "l11:y12:syntax-rules;l3:y7:unquote;y16:unquote-splicing;y10:quasiquote" - ";;l2:l2:y1:_;l2:y7:unquote;y1:x;;;y1:x;;l2:l2:y1:_;pl2:y16:unquote-spl" - "icing;y1:x;;y1:y;;;l3:y6:append;y1:x;l2:y10:quasiquote;y1:y;;;;l2:py1:" - "_;pl2:y10:quasiquote;y1:x;;y1:d;;;l3:y4:cons;l2:y5:quote;y10:quasiquot" - "e;;l3:y10:quasiquote;l1:y1:x;;y1:d;;;;l2:l3:y1:_;l2:y7:unquote;y1:x;;y" - "1:d;;l3:y4:cons;l2:y5:quote;y7:unquote;;py10:quasiquote;pl1:y1:x;;y1:d" - ";;;;;l2:l3:y1:_;l2:y16:unquote-splicing;y1:x;;y1:d;;l3:y4:cons;l2:y5:q" - "uote;y16:unquote-splicing;;py10:quasiquote;pl1:y1:x;;y1:d;;;;;l2:py1:_" - ";ppy1:x;y1:y;;y1:d;;;l3:y4:cons;py10:quasiquote;py1:x;y1:d;;;py10:quas" - "iquote;py1:y;y1:d;;;;;l2:py1:_;pv2:y1:x;y3:...;;y1:d;;;l2:y12:list->ve" - "ctor;py10:quasiquote;pl2:y1:x;y3:...;;y1:d;;;;;l2:py1:_;pzy1:x;;y1:d;;" - ";l2:y3:box;py10:quasiquote;py1:x;y1:d;;;;;l2:py1:_;py1:x;y1:d;;;l2:y5:" - "quote;y1:x;;;", + "l12:y12:syntax-rules;l3:y7:unquote;y16:unquote-splicing;y10:quasiquote" + ";;l2:l2:y1:_;l2:y7:unquote;y1:x;;;y1:x;;l2:l2:y1:_;l1:l2:y16:unquote-s" + "plicing;y1:x;;;;y1:x;;l2:l2:y1:_;pl2:y16:unquote-splicing;y1:x;;y1:y;;" + ";l3:y6:append;y1:x;l2:y10:quasiquote;y1:y;;;;l2:py1:_;pl2:y10:quasiquo" + "te;y1:x;;y1:d;;;l3:y4:cons;l2:y5:quote;y10:quasiquote;;l3:y10:quasiquo" + "te;l1:y1:x;;y1:d;;;;l2:l3:y1:_;l2:y7:unquote;y1:x;;y1:d;;l3:y4:cons;l2" + ":y5:quote;y7:unquote;;py10:quasiquote;pl1:y1:x;;y1:d;;;;;l2:l3:y1:_;l2" + ":y16:unquote-splicing;y1:x;;y1:d;;l3:y4:cons;l2:y5:quote;y16:unquote-s" + "plicing;;py10:quasiquote;pl1:y1:x;;y1:d;;;;;l2:py1:_;ppy1:x;y1:y;;y1:d" + ";;;l3:y4:cons;py10:quasiquote;py1:x;y1:d;;;py10:quasiquote;py1:y;y1:d;" + ";;;;l2:py1:_;pv2:y1:x;y3:...;;y1:d;;;l2:y12:list->vector;py10:quasiquo" + "te;pl2:y1:x;y3:...;;y1:d;;;;;l2:py1:_;pzy1:x;;y1:d;;;l2:y3:box;py10:qu" + "asiquote;py1:x;y1:d;;;;;l2:py1:_;py1:x;y1:d;;;l2:y5:quote;y1:x;;;", "S", "when", "l3:y12:syntax-rules;n;l2:py1:_;py4:test;y4:rest;;;l3:y2:if;y4:test;py4" diff --git a/t.c b/t.c index 8ea97b5..b05b6e4 100644 --- a/t.c +++ b/t.c @@ -576,9 +576,9 @@ char *t_code[] = { "1,&2{%0:1d,:0^[01},.1,&1{%0:0ad]0},.2aa,:0^[13}.!0.0^_1[41", "P", "make-cond-expand-transformer", - "%0&0{%2,#0.2,&1{%2${.2,@(y3:id?)[01}?{.1,@(y16:root-environment),.3,:0" - ",.4,@(y9:free-id=?)[25}f]2}.!0${.4,.4,.4^,@(y22:preprocess-cond-expand" - ")[03},@(y8:begin-id)c]3}]0", + "%0&0{%2,#0.2,&1{%2${.2,@(y3:id?)[01}?{@(y16:root-environment),.2,:0,.3" + ",@(y9:free-id=?)[24}f]2}.!0${.4,.4,.4^,@(y22:preprocess-cond-expand)[0" + "3},@(y8:begin-id)c]3}]0", "P", "adjoin-code", "%2'(l1:y5:begin;),.1e?{.1]2}'(l1:y5:begin;),.2e?{.0]2}${.2,'(l3:y5:beg"