]> git.eshelyaron.com Git - emacs.git/commitdiff
add native_elisp field into Lisp_Subr
authorAndrea Corallo <akrl@sdf.org>
Wed, 18 Sep 2019 10:46:45 +0000 (12:46 +0200)
committerAndrea Corallo <akrl@sdf.org>
Wed, 1 Jan 2020 10:37:50 +0000 (11:37 +0100)
src/comp.c
src/data.c
src/lisp.h
src/pdumper.c

index 8aadd5acc91496fd7028d33b40e94db03f1c0481..ca22b81de133e82c6d3067a49e8d55a11c50830a 100644 (file)
@@ -3228,6 +3228,7 @@ load_comp_unit (dynlib_handle_ptr handle)
       x->s.min_args = minargs;
       x->s.max_args = maxargs;
       x->s.symbol_name = SSDATA (Fsymbol_name (Qsym));
+      x->s.native_elisp = true;
       defsubr(x);
 
       func_list = XCDR (func_list);
index 56e363f16b6ab27e250dca51b49d4faafbb77eff..70068c30a71548605209a39f345530471543f52c 100644 (file)
@@ -864,6 +864,17 @@ SUBR must be a built-in function.  */)
   return build_string (name);
 }
 
+#ifdef HAVE_NATIVE_COMP
+DEFUN ("subr-native-elispp", Fsubr_native_elispp, Ssubr_native_elispp, 1, 1, 0,
+       doc: /* Return t if the subr is native compiled elisp,
+nil otherwise.  */)
+  (Lisp_Object subr)
+{
+  CHECK_SUBR (subr);
+  return XSUBR (subr)->native_elisp ? Qt : Qnil;
+}
+#endif
+
 DEFUN ("interactive-form", Finteractive_form, Sinteractive_form, 1, 1, 0,
        doc: /* Return the interactive form of CMD or nil if none.
 If CMD is not a command, the return value is nil.
@@ -3983,6 +3994,9 @@ syms_of_data (void)
   defsubr (&Sbyteorder);
   defsubr (&Ssubr_arity);
   defsubr (&Ssubr_name);
+#ifdef HAVE_NATIVE_COMP
+  defsubr (&Ssubr_native_elispp);
+#endif
 #ifdef HAVE_MODULES
   defsubr (&Suser_ptrp);
 #endif
index cb3487675e7e964b5358545a80f5229784f55561..a84c08e56694124b3350d2c49a20b0f951f65932 100644 (file)
@@ -2088,6 +2088,9 @@ struct Lisp_Subr
     const char *symbol_name;
     const char *intspec;
     EMACS_INT doc;
+#ifdef HAVE_NATIVE_COMP
+    bool native_elisp;
+#endif
   } GCALIGNED_STRUCT;
 union Aligned_Lisp_Subr
   {
index 3ee11460405dd674989607935f8edb31d85347d7..7b3109607b4ab6a2e6c9992d2c8eacfab8d754a2 100644 (file)
@@ -2922,7 +2922,10 @@ dump_bool_vector (struct dump_context *ctx, const struct Lisp_Vector *v)
 static dump_off
 dump_subr (struct dump_context *ctx, const struct Lisp_Subr *subr)
 {
-#if CHECK_STRUCTS && !defined (HASH_Lisp_Subr_594AB72B54)
+#if CHECK_STRUCTS && ((defined (HAVE_NATIVE_COMP)                      \
+                      && !defined (HASH_Lisp_Subr_D4F15794AF))         \
+                     || (!defined (HAVE_NATIVE_COMP)                   \
+                         && !defined (HASH_Lisp_Subr_594AB72B54)))
 # error "Lisp_Subr changed. See CHECK_STRUCTS comment in config.h."
 #endif
   struct Lisp_Subr out;
@@ -2934,6 +2937,7 @@ dump_subr (struct dump_context *ctx, const struct Lisp_Subr *subr)
   dump_field_emacs_ptr (ctx, &out, subr, &subr->symbol_name);
   dump_field_emacs_ptr (ctx, &out, subr, &subr->intspec);
   DUMP_FIELD_COPY (&out, subr, doc);
+  DUMP_FIELD_COPY (&out, subr, native_elisp);
   return dump_object_finish (ctx, &out, sizeof (out));
 }