emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/native-comp fd9e930: Make native compiler tollerant to redefined


From: Andrea Corallo
Subject: feature/native-comp fd9e930: Make native compiler tollerant to redefined primitives (bug#44221).
Date: Mon, 26 Oct 2020 12:38:39 -0400 (EDT)

branch: feature/native-comp
commit fd9e9308d27138a16e2e93417bd7ad4448fea40a
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>

    Make native compiler tollerant to redefined primitives (bug#44221).
    
        * lisp/emacs-lisp/comp.el (comp-emit-set-call-subr): Rework based
        on the fact that the subr can now be redefined.
        * test/src/comp-tests.el (primitive-redefine-compile-44221):
        New testcase.
---
 lisp/emacs-lisp/comp.el | 4 +---
 test/src/comp-tests.el  | 9 +++++++++
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 1808e72..15b8b3a 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -1153,9 +1153,7 @@ Return value is the fall through block name."
 SP-DELTA is the stack adjustment."
     (let ((subr (symbol-function subr-name))
           (nargs (1+ (- sp-delta))))
-      (unless (subrp subr)
-        (signal 'native-ice (list "not a subr" subr)))
-      (let* ((arity (subr-arity subr))
+      (let* ((arity (func-arity subr))
              (minarg (car arity))
              (maxarg (cdr arity)))
         (when (eq maxarg 'unevalled)
diff --git a/test/src/comp-tests.el b/test/src/comp-tests.el
index ae96e5d..446a615 100644
--- a/test/src/comp-tests.el
+++ b/test/src/comp-tests.el
@@ -430,6 +430,15 @@ 
https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html.";
   ;; Bug#42664, Bug#43280, Bug#44209.
   (should-not (subr-native-elisp-p (symbol-function #'comp-test-defsubst-f))))
 
+(comp-deftest primitive-redefine-compile-44221 ()
+  "Test the compiler still works while primitives are redefined (bug#44221)."
+  (cl-letf (((symbol-function #'delete-region)
+             (lambda (_ _))))
+    (should (subr-native-elisp-p
+             (native-compile
+              '(lambda ()
+                 (delete-region (point-min) (point-max))))))))
+
 
 ;;;;;;;;;;;;;;;;;;;;;
 ;; Tromey's tests. ;;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]