X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=ecmalisp.lisp;h=244d07cb45075cb50a4bff28a2ef92bdabedda53;hb=ada1317b0077e7caaf3e410fba76b4936202da65;hp=46b92932bca175ecddedabad07b1eb37f57dfad3;hpb=ea250a1c0f5e0bc48a43fba2cdcaea1a7932cf0f;p=jscl.git diff --git a/ecmalisp.lisp b/ecmalisp.lisp index 46b9293..244d07c 100644 --- a/ecmalisp.lisp +++ b/ecmalisp.lisp @@ -1538,10 +1538,19 @@ (type-check (("x" "number" x) ("y" "number" y)) (concat "x" op "y"))) -(define-builtin + (x y) (num-op-num x "+" y)) -(define-builtin - (x y) (num-op-num x "-" y)) -(define-builtin * (x y) (num-op-num x "*" y)) -(define-builtin / (x y) (num-op-num x "/" y)) +(defmacro define-builtin-arithmetic (op) +`(define-raw-builtin ,op (&rest args) + (if args + (let ((res (ls-compile (car args)))) + (dolist (x (cdr args)) + (setq res (num-op-num res ,(symbol-name op) (ls-compile x)))) + res) + "0"))) + +(define-builtin-arithmetic +) +(define-builtin-arithmetic -) +(define-builtin-arithmetic *) +(define-builtin-arithmetic /) (define-builtin mod (x y) (num-op-num x "%" y))