]> git.eshelyaron.com Git - emacs.git/commitdiff
* Add a number of type specifiers for pure function
authorAndrea Corallo <akrl@sdf.org>
Sat, 14 Nov 2020 15:55:39 +0000 (16:55 +0100)
committerAndrea Corallo <akrl@sdf.org>
Sat, 14 Nov 2020 21:06:31 +0000 (22:06 +0100)
* lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Add 60
pure function type specifiers.

lisp/emacs-lisp/comp.el

index 96b2b29043a2f58e23fa614a4134b2c92fef6126..fa94d399eb52776fa9d294fc438159e325e1ccc8 100644 (file)
@@ -191,6 +191,7 @@ For internal use only by the testsuite.")
 Each function in FUNCTIONS is run after PASS.
 Useful to hook into pass checkers.")
 
+;; FIXME this probably should not be here but... good for now.
 (defconst comp-known-type-specifiers
   `((cons (function (t t) cons))
     (1+ (function ((or number marker)) number))
@@ -199,7 +200,52 @@ Useful to hook into pass checkers.")
     (- (function (&rest (or number marker)) number))
     (* (function (&rest (or number marker)) number))
     (/ (function ((or number marker) &rest (or number marker)) number))
-    (% (function ((or number marker) (or number marker)) number)))
+    (% (function ((or number marker) (or number marker)) number))
+    (concat (function (&rest sequence) string))
+    (regexp-opt (function (list) string))
+    (string-to-char (function (string) integer))
+    (symbol-name (function (symbol) string))
+    (eq (function (t t) boolean))
+    (eql (function (t t) boolean))
+    (= (function ((or number marker) (or number marker)) boolean))
+    (/= (function ((or number marker) (or number marker)) boolean))
+    (< (function ((or number marker) &rest (or number marker)) boolean))
+    (<= (function ((or number marker) &rest (or number marker)) boolean))
+    (>= (function ((or number marker) &rest (or number marker)) boolean))
+    (> (function ((or number marker) &rest (or number marker)) boolean))
+    (min (function ((or number marker) &rest (or number marker)) number))
+    (max (function ((or number marker) &rest (or number marker)) number))
+    (mod (function ((or number marker) (or number marker))
+                   (or (integer 0 *) (float 0 *))))
+    (abs (function (number) number))
+    (ash (function (integer integer) integer))
+    (sqrt (function (number) float))
+    (logand (function (&rest (or integer marker)) integer))
+    (logior (function (&rest (or integer marker)) integer))
+    (lognot (function (integer) integer))
+    (logxor (function (&rest (or integer marker)) integer))
+    (logcount (function (integer) integer))
+    (copysign (function (float float) float))
+    (isnan (function (float) boolean))
+    (ldexp (function (number integer) float))
+    (float (function (number) float))
+    (logb (function (number) integer))
+    (floor (function (number &optional number) integer))
+    (ceiling (function (number &optional number) integer))
+    (round (function (number &optional number) integer))
+    (truncate (function (number &optional number) integer))
+    (ffloor (function (float) float))
+    (fceiling (function (float) float))
+    (fround (function (float) float))
+    (ftruncate (function (float) float))
+    (string= (function ((or string symbol) (or string symbol)) boolean))
+    (string-equal (function ((or string symbol) (or string symbol)) boolean))
+    (string< (function ((or string symbol) (or string symbol)) boolean))
+    (string-lessp (function ((or string symbol) (or string symbol)) boolean))
+    (string-search (function (string string) (or integer null)))
+    ;; Type hints
+    (comp-hint-fixnum (function (t) fixnum))
+    (comp-hint-cons (function (t) cons)))
   "Alist used for type propagation.")
 
 (defconst comp-symbol-values-optimizable '(most-positive-fixnum