diff options
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/op.tl | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/stdlib/op.tl b/stdlib/op.tl index d1c1f3e7..a3a0135e 100644 --- a/stdlib/op.tl +++ b/stdlib/op.tl @@ -107,17 +107,20 @@ (defmacro op-ignerr (x) ^(sys:catch (error) ,x () (error (. args) (ignore args))))) +(defparml compat-225 (and (plusp sys:compat) (<= sys:compat 225))) + +(defparml compat-298 (and (plusp sys:compat) (<= sys:compat 298))) + (defun sys:op-expand (f e args) (unless args ['compile-error f "arguments required"]) - (let* ((compat (and (plusp sys:compat) (<= sys:compat 225))) - (ctx (make-struct 'sys:op-ctx ^(form ,f))) + (let* ((ctx (make-struct 'sys:op-ctx ^(form ,f))) (sys:*op-ctx* ctx) (sym (car f)) (do-gen (if (eq sym 'do) (gensym))) (syntax-0 (if (eq sym 'do) args ^[,*args])) - (syntax-1 (if (or (null syntax-0) (neq sym 'do) compat) - ;; Not do, or empty do syntax, or compat mode. + (syntax-1 (if (or (null syntax-0) (neq sym 'do) compat-225) + ;; Not do, or empty do syntax, or compat 225 mode. (sys:op-alpha-rename e syntax-0 nil) ;; Try to expand args as-is, catching errors. (let ((syn (op-ignerr (sys:op-alpha-rename e @@ -161,6 +164,7 @@ (lambda-interior (let ((fargs (tree-case syntax-2 ((t t . fa) fa)))) (cond + ((and metas (not compat-298)) syntax-2) ((and (eq sym 'lop) fargs) (let ((fargs-l1 (mapcar (lambda (farg) ^(sys:l1-val ,farg)) |