diff options
Diffstat (limited to 'stdlib/op.tl')
-rw-r--r-- | stdlib/op.tl | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/stdlib/op.tl b/stdlib/op.tl index a3a0135e..b443a2d2 100644 --- a/stdlib/op.tl +++ b/stdlib/op.tl @@ -172,6 +172,13 @@ ;; no cadr here to avoid circular autoload ^[sys:apply ,(car (cdr syntax-2)) (append ,rest-sym (list ,*fargs-l1))])) + ((and (eq sym 'lop1) fargs) + (let ((fargs-l1 (mapcar (lambda (farg) + ^(sys:l1-val ,farg)) + fargs)) + (arg1 (sys:ensure-op-arg ctx 1))) + ;; no cadr here to avoid circular autoload + ^[,(car (cdr syntax-2)) ,arg1 ,*fargs-l1])) (metas syntax-2) ((eq sym 'do) (let ((arg1 (sys:ensure-op-arg ctx 1))) @@ -199,6 +206,9 @@ (defmacro lop (:form f :env e . args) (sys:op-expand f e args)) +(defmacro lop1 (:form f :env e . args) + (sys:op-expand f e args)) + (defmacro ldo (op . args) ^(do ,op @1 ,*args)) @@ -243,7 +253,7 @@ (cons c (sys:opip-expand e opsym dosym rest)) (let ((sym (car c))) (cond - ((memq sym '(dwim uref qref op do lop ldo ap ip ado ido ret aret)) + ((memq sym '(dwim uref qref op do lop lop1 ldo ap ip ado ido ret aret)) (cons c (sys:opip-expand e opsym dosym rest))) ((sys:opip-single-let-p c) (tree-bind (t sym) c |