From b4ee13c94218062baa4d9d15176eee4aaf582d57 Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Thu, 24 Dec 2020 13:05:30 +0100 Subject: [PATCH] * Memoize `comp-subtype-p' * lisp/emacs-lisp/comp-cstr.el (comp-subtype-p): Memoize. (comp-cstr-ctxt): Add `subtype-p-mem' slot. --- lisp/emacs-lisp/comp-cstr.el | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el index 19905950b5a..32989f220a4 100644 --- a/lisp/emacs-lisp/comp-cstr.el +++ b/lisp/emacs-lisp/comp-cstr.el @@ -86,6 +86,9 @@ Integer values are handled in the `range' slot.") (common-supertype-mem (make-hash-table :test #'equal) :type hash-table :documentation "Serve memoization for `comp-common-supertype'.") + (subtype-p-mem (make-hash-table :test #'equal) :type hash-table + :documentation "Serve memoization for +`comp-subtype-p-mem'.") (union-1-mem-no-range (make-hash-table :test #'equal) :type hash-table :documentation "Serve memoization for `comp-cstr-union-1'.") @@ -215,7 +218,11 @@ Return them as multiple value." (defsubst comp-subtype-p (type1 type2) "Return t if TYPE1 is a subtype of TYPE2 or nil otherwise." - (eq (comp-common-supertype-2 type1 type2) type2)) + (let ((types (cons type1 type2))) + (or (gethash types (comp-cstr-ctxt-subtype-p-mem comp-ctxt)) + (puthash types + (eq (comp-common-supertype-2 type1 type2) type2) + (comp-cstr-ctxt-subtype-p-mem comp-ctxt))))) (defun comp-union-typesets (&rest typesets) "Union types present into TYPESETS." -- 2.39.5