diff --git a/runtime.c b/runtime.c index 190489e9..56b80064 100644 --- a/runtime.c +++ b/runtime.c @@ -1873,8 +1873,8 @@ object apply(object cont, object func, object args){ Cyc_rt_raise2("Call of non-procedure: ", func); } else if (strncmp(((symbol)fobj)->pname, "lambda", 7) == 0) { make_cons(c, func, args); - printf("JAE DEBUG, sending to eval: "); - Cyc_display(&c, stderr); + //printf("JAE DEBUG, sending to eval: "); + //Cyc_display(&c, stderr); ((closure)__glo_eval)->fn(2, __glo_eval, cont, &c, nil); // TODO: would be better to compare directly against symbols here, diff --git a/scheme/cyclone/transforms.scm b/scheme/cyclone/transforms.scm index 85f06d84..111e5db3 100644 --- a/scheme/cyclone/transforms.scm +++ b/scheme/cyclone/transforms.scm @@ -21,7 +21,7 @@ (list (cons 'and (lambda (expr rename compare) - (cond ((null? (cdr expr))) + (cond ((null? (cdr expr))) ;; TODO (?): #t) ((null? (cddr expr)) (cadr expr)) (else (list (rename 'if) (cadr expr) (cons (rename 'and) (cddr expr)) diff --git a/test2.scm b/test2.scm index 4277d77c..30a9e7c6 100644 --- a/test2.scm +++ b/test2.scm @@ -26,7 +26,19 @@ (cons (rename 'and) (cddr expr)) #f)))))) -(write - (test 1 2 3)) +(define-syntax or + (er-macro-transformer + (lambda (expr rename compare) + (cond ((null? (cdr expr)) #f) + ((null? (cddr expr)) (cadr expr)) + (else + (list (rename 'let) (list (list (rename 'tmp) (cadr expr))) + (list (rename 'if) (rename 'tmp) + (rename 'tmp) + (cons (rename 'or) (cddr expr))))))))) + +(write (test 1 2 3)) +(write (or 1 2 3 'or)) +(write (or #f 2 3 'or)) ;(test 'done) 'done