Remove unnecessary boxing/unboxing
authorVasilij Schneidermann <v.schneidermann@gmail.com>
Tue, 1 Mar 2016 23:10:29 +0000 (00:10 +0100)
committerVasilij Schneidermann <v.schneidermann@gmail.com>
Tue, 1 Mar 2016 23:10:29 +0000 (00:10 +0100)
elisp/core.el
elisp/step7_quote.el
elisp/step8_macros.el
elisp/step9_try.el
elisp/stepA_mal.el

index d23d2f2..5f3d4a2 100644 (file)
@@ -5,11 +5,10 @@
       mal-false)))
 
 (defun mal-listify (mal-object)
-  ;; FIXME: avoid boxing
   (let ((type (mal-type mal-object)))
     (if (eq type 'vector)
-        (mal-list (append (mal-value mal-object) nil))
-      mal-object)))
+        (append (mal-value mal-object) nil)
+      (mal-value mal-object))))
 
 (defun mal-= (a b)
   (let ((a-type (mal-type a))
@@ -37,9 +36,7 @@
 (defun mal-seq-= (a b)
   (when (= (length (mal-value a))
            (length (mal-value b)))
-    (when (everyp 'mal-=
-                  (mal-value (mal-listify a))
-                  (mal-value (mal-listify b)))
+    (when (everyp 'mal-= (mal-listify a) (mal-listify b))
       t)))
 
 (defun everyp (predicate list-a list-b)
                                (value (apply (mal-value fn*) args*)))
                           (setf (aref atom 1) value)))))
 
-    (cons . ,(mal-fn (lambda (arg list) (mal-list (cons arg (mal-value (mal-listify list)))))))
+    (cons . ,(mal-fn (lambda (arg list) (mal-list (cons arg (mal-listify list))))))
     (concat . ,(mal-fn (lambda (&rest lists)
-                         (let ((lists* (mapcar (lambda (item) (mal-value (mal-listify item))) lists)))
+                         (let ((lists* (mapcar (lambda (item) (mal-listify item)) lists)))
                            (mal-list (apply 'append lists*))))))
 
     (nth . ,(mal-fn (lambda (seq index)
                       (let ((i (mal-value index))
-                            (list (mal-value (mal-listify seq))))
+                            (list (mal-listify seq)))
                         (or (nth i list)
                             ;; FIXME
                             (signal 'args-out-of-range (list (pr-str seq) i)))))))
     (first . ,(mal-fn (lambda (seq)
                         (if (mal-nil-p seq)
                             mal-nil
-                          (let* ((list (mal-value (mal-listify seq)))
+                          (let* ((list (mal-listify seq))
                                  (value (car list)))
                             (or value mal-nil))))))
-    (rest . ,(mal-fn (lambda (seq) (mal-list (cdr (mal-value (mal-listify seq)))))))
+    (rest . ,(mal-fn (lambda (seq) (mal-list (cdr (mal-listify seq))))))
 
     (throw . ,(mal-fn (lambda (mal-object) (signal 'mal-custom (list mal-object)))))
 
                         (let* ((butlast (butlast args))
                                (last (mal-listify (car (last args))))
                                (fn* (if (mal-func-p fn) (mal-func-fn fn) fn))
-                               (args* (append butlast (mal-value last))))
+                               (args* (append butlast last)))
                           (apply (mal-value fn*) args*)))))
     (map . ,(mal-fn (lambda (fn seq)
                       (let ((fn* (if (mal-func-p fn) (mal-func-fn fn) fn)))
index 2d497f0..6bfbad0 100644 (file)
@@ -30,7 +30,7 @@
 (defun quasiquote (ast)
   (if (not (mal-pair-p ast))
       (mal-list (list (mal-symbol 'quote) ast))
-    (let* ((a (mal-value (mal-listify ast)))
+    (let* ((a (mal-listify ast))
            (a0 (car a))
            (a0... (cdr a))
            (a1 (cadr a)))
index be75d85..8961ed0 100644 (file)
@@ -30,7 +30,7 @@
 (defun quasiquote (ast)
   (if (not (mal-pair-p ast))
       (mal-list (list (mal-symbol 'quote) ast))
-    (let* ((a (mal-value (mal-listify ast)))
+    (let* ((a (mal-listify ast))
            (a0 (car a))
            (a0... (cdr a))
            (a1 (cadr a)))
index 06f2b74..81b3a89 100644 (file)
@@ -30,7 +30,7 @@
 (defun quasiquote (ast)
   (if (not (mal-pair-p ast))
       (mal-list (list (mal-symbol 'quote) ast))
-    (let* ((a (mal-value (mal-listify ast)))
+    (let* ((a (mal-listify ast))
            (a0 (car a))
            (a0... (cdr a))
            (a1 (cadr a)))
index ed8b41a..929a239 100644 (file)
@@ -30,7 +30,7 @@
 (defun quasiquote (ast)
   (if (not (mal-pair-p ast))
       (mal-list (list (mal-symbol 'quote) ast))
-    (let* ((a (mal-value (mal-listify ast)))
+    (let* ((a (mal-listify ast))
            (a0 (car a))
            (a0... (cdr a))
            (a1 (cadr a)))