unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* coccinelle patch suggestion
@ 2012-06-27 17:12 Dan Nicolaescu
  2012-06-27 21:03 ` Andreas Schwab
  2012-06-27 21:24 ` Stefan Monnier
  0 siblings, 2 replies; 13+ messages in thread
From: Dan Nicolaescu @ 2012-06-27 17:12 UTC (permalink / raw)
  To: emacs-devel


Many lisp functions are declared in header files using the EXFUN macro,
like this:
EXFUN (Finteractive_form, 1);

this might have been good when wanting to support both pre-standard C
and standard  C, but we don't support the former anymore.

And EXFUN just adds an unneeded level of obfuscation that doesn't help
code readability.

It seems that with coccinelle it should be easy to create a patch that
replaces all EXFUN usages with the correct declaration, and then EXFUN
can be removed.




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-06-27 17:12 coccinelle patch suggestion Dan Nicolaescu
@ 2012-06-27 21:03 ` Andreas Schwab
  2012-06-28  0:06   ` John Wiegley
  2012-06-27 21:24 ` Stefan Monnier
  1 sibling, 1 reply; 13+ messages in thread
From: Andreas Schwab @ 2012-06-27 21:03 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: emacs-devel

Dan Nicolaescu <dann@gnu.org> writes:

> Many lisp functions are declared in header files using the EXFUN macro,
> like this:
> EXFUN (Finteractive_form, 1);
>
> this might have been good when wanting to support both pre-standard C
> and standard  C, but we don't support the former anymore.

It generates a prototype, which is useful in standard C.

> And EXFUN just adds an unneeded level of obfuscation that doesn't help
> code readability.

It tells you that it's a Lisp function with N arguments.  That's easier
to read than when you need to count them.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-06-27 17:12 coccinelle patch suggestion Dan Nicolaescu
  2012-06-27 21:03 ` Andreas Schwab
@ 2012-06-27 21:24 ` Stefan Monnier
  2012-06-27 21:45   ` Dan Nicolaescu
  1 sibling, 1 reply; 13+ messages in thread
From: Stefan Monnier @ 2012-06-27 21:24 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: emacs-devel

> And EXFUN just adds an unneeded level of obfuscation that doesn't help
> code readability.

I'm not sure the "plain" form is better, because of its length
(especially if there are 3 args or more).


        Stefan



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-06-27 21:24 ` Stefan Monnier
@ 2012-06-27 21:45   ` Dan Nicolaescu
  0 siblings, 0 replies; 13+ messages in thread
From: Dan Nicolaescu @ 2012-06-27 21:45 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

>> And EXFUN just adds an unneeded level of obfuscation that doesn't help
>> code readability.
>
> I'm not sure the "plain" form is better, because of its length
> (especially if there are 3 args or more).

The only thing that matter is that the number of arguments matters
between the declaration an the function.  
Why would anybody count the number of arguments?
There's no way to make mistakes in calling with the wrong number of
arguments, the compiler won't let you....

Adding strange constructs like EXFUN has not value...



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-06-27 21:03 ` Andreas Schwab
@ 2012-06-28  0:06   ` John Wiegley
  2012-06-28 12:39     ` Dmitry Antipov
  0 siblings, 1 reply; 13+ messages in thread
From: John Wiegley @ 2012-06-28  0:06 UTC (permalink / raw)
  To: emacs-devel

>>>>> Andreas Schwab <schwab@linux-m68k.org> writes:

>> And EXFUN just adds an unneeded level of obfuscation that doesn't help code
>> readability.

> It tells you that it's a Lisp function with N arguments.  That's easier to
> read than when you need to count them.

Also, it forms a meaningful parallel with DEFUN.  When I read an EXFUN
declaration, I know that there's a matching DEFUN.  This is not true of
everything other function that has a prototype.

John



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-06-28  0:06   ` John Wiegley
@ 2012-06-28 12:39     ` Dmitry Antipov
  2012-06-28 18:05       ` Stefan Monnier
  0 siblings, 1 reply; 13+ messages in thread
From: Dmitry Antipov @ 2012-06-28 12:39 UTC (permalink / raw)
  To: emacs-devel

On 06/28/2012 04:06 AM, John Wiegley wrote:

>>>>>> Andreas Schwab <schwab@linux-m68k.org> writes:
>
>>> And EXFUN just adds an unneeded level of obfuscation that doesn't help code
>>> readability.
>
>> It tells you that it's a Lisp function with N arguments.  That's easier to
>> read than when you need to count them.
>
> Also, it forms a meaningful parallel with DEFUN.  When I read an EXFUN
> declaration, I know that there's a matching DEFUN.  This is not true of
> everything other function that has a prototype.

+10. Of course, it would be a toy task for coccinelle. But, IMHO,
EXFUN makes the things clearer rather than obfuscating them.

Dmitry





^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-06-28 12:39     ` Dmitry Antipov
@ 2012-06-28 18:05       ` Stefan Monnier
  2012-06-29 16:36         ` Tom Tromey
  2012-07-02 15:40         ` Samuel Bronson
  0 siblings, 2 replies; 13+ messages in thread
From: Stefan Monnier @ 2012-06-28 18:05 UTC (permalink / raw)
  To: Dmitry Antipov; +Cc: emacs-devel

> +10. Of course, it would be a toy task for coccinelle.  But, IMHO,
> EXFUN makes the things clearer rather than obfuscating them.

Agreed.  An alternative is to autogenerate all the EXFUNs for all F<foo>
functions into src/global.h, to make it more Lispy.


        Stefan



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-06-28 18:05       ` Stefan Monnier
@ 2012-06-29 16:36         ` Tom Tromey
  2012-07-02 18:12           ` Stefan Monnier
  2012-07-02 15:40         ` Samuel Bronson
  1 sibling, 1 reply; 13+ messages in thread
From: Tom Tromey @ 2012-06-29 16:36 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Dmitry Antipov, emacs-devel

>>>>> "Stefan" == Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

Stefan> Agreed.  An alternative is to autogenerate all the EXFUNs for
Stefan> all F<foo> functions into src/global.h, to make it more Lispy.

What do you think of the appended?

It builds for me on x86-64 Fedora 16.
I didn't try any other platforms; there could be hiccups I suppose.

The one wrinkle is that this makes some functions non-static.

Tom

b/lib-src/ChangeLog:
2012-06-29  Tom Tromey  <tromey@redhat.com>

	* make-docfile.c (enum global_type) <FUNCTION>: New constant.
	(struct global) <value>: New field.
	(add_global): Add 'value' argument.
	(compare_globals): Sort functions at the end.
	(close_emacs_globals): New function.
	(write_globals): Handle functions.
	(scan_c_file): Call add_global for DEFUN.

b/src/ChangeLog:
2012-06-29  Tom Tromey  <tromey@redhat.com>

	* window.c (Fset_window_margins, Fset_window_fringes)
	(Fset_window_scroll_bars, Fset_window_vscroll): No longer static.
	* textprop.c (Fprevious_property_change): No longer static.
	* syntax.c (Fsyntax_table_p): No longer static.
	* process.c (Fget_process, Fprocess_datagram_address): No longer
	static.
	* keymap.c (Flookup_key, Fcopy_keymap): No longer static.
	* keyboard.c (Fcommand_execute): No longer static.
	Remove EXFUN.
	* insdel.c (Fcombine_after_change_execute): No longer static.
	* image.c (Finit_image_library): No longer static.
	* fileio.c (Fmake_symbolic_link): No longer static.
	* eval.c (Ffetch_bytecode): No longer static.
	* editfns.c (Fuser_full_name): No longer static.
	* doc.c: (Fdocumentation_property, Fsnarf_documentation): No
	longer static.
	* buffer.c (Fset_buffer_major_mode, Fdelete_overlay): No longer
	static.
	* dired.c (Ffile_attributes): No longer static.
	* composite.c (Fcomposition_get_gstring): No longer static.
	* callproc.c (Fgetenv_internal): No longer static.

	* ccl.h: Remove EXFUNs.
	* buffer.h: Remove EXFUNs.
	* dispextern.h: Remove EXFUNs.
	* intervals.h: Remove EXFUNs.
	* fontset.h: Remove EXFUN.
	* font.h: Remove EXFUNs.
	* dosfns.c (system_process_attributes): Remove EXFUN.
	* keymap.h: Remove EXFUNs.
	* lisp.h: Remove EXFUNs.
	* w32term.h: Remove EXFUNs.
	* window.h: Remove EXFUNs.
	* xsettings.h: Remove EXFUN.
	* xterm.h: Remove EXFUN.

diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index 8156db9..2a5f028 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -564,6 +564,7 @@ write_c_args (FILE *out, char *func, char *buf, int minargs, int maxargs)
 /* The types of globals.  */
 enum global_type
 {
+  FUNCTION,
   EMACS_INTEGER,
   BOOLEAN,
   LISP_OBJECT,
@@ -575,6 +576,7 @@ struct global
 {
   enum global_type type;
   char *name;
+  int value;
 };
 
 /* All the variable names we saw while scanning C sources in `-g'
@@ -584,7 +586,7 @@ int num_globals_allocated;
 struct global *globals;
 
 static void
-add_global (enum global_type type, char *name)
+add_global (enum global_type type, char *name, int value)
 {
   /* Ignore the one non-symbol that can occur.  */
   if (strcmp (name, "..."))
@@ -605,6 +607,7 @@ add_global (enum global_type type, char *name)
 
       globals[num_globals - 1].type = type;
       globals[num_globals - 1].name = name;
+      globals[num_globals - 1].value = value;
     }
 }
 
@@ -613,13 +616,29 @@ compare_globals (const void *a, const void *b)
 {
   const struct global *ga = a;
   const struct global *gb = b;
+
+  if (ga->type == FUNCTION)
+    {
+      if (gb->type != FUNCTION)
+	return 1;
+    }
+  else if (gb->type == FUNCTION)
+    return -1;
+
   return strcmp (ga->name, gb->name);
 }
 
 static void
+close_emacs_globals (void)
+{
+  fprintf (outfile, "};\n");
+  fprintf (outfile, "extern struct emacs_globals globals;\n");
+}
+
+static void
 write_globals (void)
 {
-  int i;
+  int i, seen_defun = 0;
   qsort (globals, num_globals, sizeof (struct global), compare_globals);
   for (i = 0; i < num_globals; ++i)
     {
@@ -636,20 +655,49 @@ write_globals (void)
 	case LISP_OBJECT:
 	  type = "Lisp_Object";
 	  break;
+	case FUNCTION:
+	  if (!seen_defun)
+	    {
+	      close_emacs_globals ();
+	      fprintf (outfile, "\n");
+	      seen_defun = 1;
+	    }
+	  break;
 	default:
 	  fatal ("not a recognized DEFVAR_", 0);
 	}
 
-      fprintf (outfile, "  %s f_%s;\n", type, globals[i].name);
-      fprintf (outfile, "#define %s globals.f_%s\n",
-	       globals[i].name, globals[i].name);
+      if (globals[i].type != FUNCTION)
+	{
+	  fprintf (outfile, "  %s f_%s;\n", type, globals[i].name);
+	  fprintf (outfile, "#define %s globals.f_%s\n",
+		   globals[i].name, globals[i].name);
+	}
+      else
+	{
+	  /* It would be nice to have a cleaner way to deal with these
+	     special hacks.  */
+	  if (strcmp (globals[i].name, "Fthrow") == 0
+	      || strcmp (globals[i].name, "Ftop_level") == 0
+	      || strcmp (globals[i].name, "Fkill_emacs") == 0)
+	    fprintf (outfile, "_Noreturn ");
+	  fprintf (outfile, "EXFUN (%s, ", globals[i].name);
+	  if (globals[i].value == -1)
+	    fprintf (outfile, "MANY");
+	  else if (globals[i].value == -2)
+	    fprintf (outfile, "UNEVALLED");
+	  else
+	    fprintf (outfile, "%d", globals[i].value);
+	  fprintf (outfile, ");\n");
+	}
+
       while (i + 1 < num_globals
 	     && !strcmp (globals[i].name, globals[i + 1].name))
 	++i;
     }
 
-  fprintf (outfile, "};\n");
-  fprintf (outfile, "extern struct emacs_globals globals;\n");
+  if (!seen_defun)
+    close_emacs_globals ();
 }
 
 \f
@@ -699,6 +747,7 @@ scan_c_file (char *filename, const char *mode)
       int defvarperbufferflag = 0;
       int defvarflag = 0;
       enum global_type type = INVALID;
+      char *name;
 
       if (c != '\n' && c != '\r')
 	{
@@ -764,8 +813,9 @@ scan_c_file (char *filename, const char *mode)
 	}
       else continue;
 
-      if (generate_globals && (!defvarflag || defvarperbufferflag
-			       || type == INVALID))
+      if (generate_globals
+	  && (!defvarflag || defvarperbufferflag || type == INVALID)
+	  && !defunflag)
 	continue;
 
       while (c != '(')
@@ -784,7 +834,6 @@ scan_c_file (char *filename, const char *mode)
       if (generate_globals)
 	{
 	  int i = 0;
-	  char *name;
 
 	  /* Skip "," and whitespace.  */
 	  do
@@ -805,8 +854,12 @@ scan_c_file (char *filename, const char *mode)
 
 	  name = xmalloc (i + 1);
 	  memcpy (name, input_buffer, i + 1);
-	  add_global (type, name);
-	  continue;
+
+	  if (!defunflag)
+	    {
+	      add_global (type, name, 0);
+	      continue;
+	    }
 	}
 
       /* DEFVAR_LISP ("name", addr, "doc")
@@ -814,7 +867,7 @@ scan_c_file (char *filename, const char *mode)
 	 DEFVAR_LISP ("name", addr, doc: /\* doc *\/)  */
 
       if (defunflag)
-	commas = 5;
+	commas = generate_globals ? 4 : 5;
       else if (defvarperbufferflag)
 	commas = 3;
       else if (defvarflag)
@@ -841,7 +894,12 @@ scan_c_file (char *filename, const char *mode)
 		    scanned = fscanf (infile, "%d", &minargs);
 		  else /* Pick up maxargs.  */
 		    if (c == 'M' || c == 'U') /* MANY || UNEVALLED */
-		      maxargs = -1;
+		      {
+			if (generate_globals)
+			  maxargs = (c == 'M') ? -1 : -2;
+			else
+			  maxargs = -1;
+		      }
 		    else
 		      scanned = fscanf (infile, "%d", &maxargs);
 		  if (scanned < 0)
@@ -854,6 +912,12 @@ scan_c_file (char *filename, const char *mode)
 	  c = getc (infile);
 	}
 
+      if (generate_globals)
+	{
+	  add_global (FUNCTION, name, maxargs);
+	  continue;
+	}
+
       while (c == ' ' || c == '\n' || c == '\r' || c == '\t')
 	c = getc (infile);
 
diff --git a/src/buffer.c b/src/buffer.c
index 89a4e26..936f1a7 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -107,8 +107,6 @@ static char buffer_permanent_local_flags[MAX_PER_BUFFER_VARS];
 
 int last_per_buffer_idx;
 
-static Lisp_Object Fset_buffer_major_mode (Lisp_Object);
-static Lisp_Object Fdelete_overlay (Lisp_Object);
 static void call_overlay_mod_hooks (Lisp_Object list, Lisp_Object overlay,
                                     int after, Lisp_Object arg1,
                                     Lisp_Object arg2, Lisp_Object arg3);
diff --git a/src/buffer.h b/src/buffer.h
index b1ace46..a12406d 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -909,11 +909,6 @@ extern void mmap_set_vars (int);
       }									\
   } while (0)
 
-EXFUN (Fbuffer_live_p, 1);
-EXFUN (Fbuffer_name, 1);
-EXFUN (Fnext_overlay_change, 1);
-EXFUN (Fbuffer_local_value, 2);
-
 extern Lisp_Object Qbefore_change_functions;
 extern Lisp_Object Qafter_change_functions;
 extern Lisp_Object Qfirst_change_hook;
diff --git a/src/callproc.c b/src/callproc.c
index 804af1e..7078099 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -97,8 +97,6 @@ int synch_process_retcode;
 /* Nonzero if this is termination due to exit.  */
 static int call_process_exited;
 
-static Lisp_Object Fgetenv_internal (Lisp_Object, Lisp_Object);
-
 static Lisp_Object
 call_process_kill (Lisp_Object fdpid)
 {
diff --git a/src/ccl.h b/src/ccl.h
index f55b295..7113917 100644
--- a/src/ccl.h
+++ b/src/ccl.h
@@ -1,6 +1,6 @@
 /* Header for CCL (Code Conversion Language) interpreter.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-     2005, 2006, 2007, 2008, 2009, 2010, 2011
+     2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H14PRO021
    Copyright (C) 2003
@@ -101,8 +101,6 @@ extern void ccl_driver (struct ccl_program *, int *, int *, int, int,
 
 extern Lisp_Object Qccl, Qcclp;
 
-EXFUN (Fccl_program_p, 1);
-
 #define CHECK_CCL_PROGRAM(x)			\
   do {						\
     if (NILP (Fccl_program_p (x)))		\
diff --git a/src/composite.c b/src/composite.c
index 79942ac..6c24bc8 100644
--- a/src/composite.c
+++ b/src/composite.c
@@ -158,9 +158,6 @@ static Lisp_Object Qauto_composition_function;
    auto-compositions.  */
 #define MAX_AUTO_COMPOSITION_LOOKBACK 3
 
-static Lisp_Object Fcomposition_get_gstring (Lisp_Object, Lisp_Object,
-					     Lisp_Object, Lisp_Object);
-
 /* Temporary variable used in macros COMPOSITION_XXX.  */
 Lisp_Object composition_temp;
 
diff --git a/src/dired.c b/src/dired.c
index b319072..48d3da1 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -88,7 +88,6 @@ static Lisp_Object Qfile_attributes;
 static Lisp_Object Qfile_attributes_lessp;
 
 static ptrdiff_t scmp (const char *, const char *, ptrdiff_t);
-static Lisp_Object Ffile_attributes (Lisp_Object, Lisp_Object);
 \f
 #ifdef WINDOWSNT
 Lisp_Object
diff --git a/src/dispextern.h b/src/dispextern.h
index c7adc4d..4672d10 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3244,7 +3244,6 @@ void x_implicitly_set_name (struct frame *, Lisp_Object, Lisp_Object);
 
 extern Lisp_Object tip_frame;
 extern Window tip_window;
-EXFUN (Fx_hide_tip, 0);
 extern void start_hourglass (void);
 extern void cancel_hourglass (void);
 extern int hourglass_shown_p;
@@ -3356,8 +3355,6 @@ extern void produce_special_glyphs (struct it *, enum display_element_type);
 extern int tty_capable_p (struct tty_display_info *, unsigned, unsigned long, unsigned long);
 extern void set_tty_color_mode (struct tty_display_info *, struct frame *);
 extern struct terminal *get_named_tty (const char *);
-EXFUN (Ftty_type, 1);
-EXFUN (Fcontrolling_tty_p, 1);
 extern void create_tty_output (struct frame *);
 extern struct terminal *init_tty (const char *, const char *, int);
 extern void tty_append_glyph (struct it *);
diff --git a/src/doc.c b/src/doc.c
index cbfeb06..6c532e3 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -42,9 +42,6 @@ static char *get_doc_string_buffer;
 static ptrdiff_t get_doc_string_buffer_size;
 
 static unsigned char *read_bytecode_pointer;
-static Lisp_Object Fdocumentation_property (Lisp_Object, Lisp_Object,
-					    Lisp_Object);
-static Lisp_Object Fsnarf_documentation (Lisp_Object);
 
 /* readchar in lread.c calls back here to fetch the next byte.
    If UNREADFLAG is 1, we unread a byte.  */
diff --git a/src/dosfns.c b/src/dosfns.c
index 11d2258..a952215 100644
--- a/src/dosfns.c
+++ b/src/dosfns.c
@@ -540,7 +540,6 @@ system_process_attributes (Lisp_Object pid)
       int i;
       Lisp_Object cmd_str, decoded_cmd, tem;
       double pmem;
-      EXFUN (Fget_internal_run_time, 0);
 #ifndef SYSTEM_MALLOC
       extern unsigned long ret_lim_data ();
 #endif
diff --git a/src/editfns.c b/src/editfns.c
index 4c3b80b..8812ed9 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -79,7 +79,6 @@ static int tm_diff (struct tm *, struct tm *);
 static void update_buffer_properties (ptrdiff_t, ptrdiff_t);
 
 static Lisp_Object Qbuffer_access_fontify_functions;
-static Lisp_Object Fuser_full_name (Lisp_Object);
 
 /* Symbol for the text property used to mark fields.  */
 
diff --git a/src/eval.c b/src/eval.c
index bff9974..906adb8 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -133,7 +133,6 @@ Lisp_Object inhibit_lisp_code;
 static Lisp_Object funcall_lambda (Lisp_Object, ptrdiff_t, Lisp_Object *);
 static int interactive_p (int);
 static Lisp_Object apply_lambda (Lisp_Object fun, Lisp_Object args);
-static Lisp_Object Ffetch_bytecode (Lisp_Object);
 \f
 void
 init_eval_once (void)
diff --git a/src/fileio.c b/src/fileio.c
index 824a921..9429570 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -148,7 +148,6 @@ Lisp_Object Qfile_name_history;
 
 static Lisp_Object Qcar_less_than_car;
 
-static Lisp_Object Fmake_symbolic_link (Lisp_Object, Lisp_Object, Lisp_Object);
 static int a_write (int, Lisp_Object, ptrdiff_t, ptrdiff_t,
                     Lisp_Object *, struct coding_system *);
 static int e_write (int, Lisp_Object, ptrdiff_t, ptrdiff_t,
diff --git a/src/font.h b/src/font.h
index b058be6..adb2566 100644
--- a/src/font.h
+++ b/src/font.h
@@ -734,13 +734,8 @@ struct font_data_list
   struct font_data_list *next;
 };
 
-EXFUN (Ffont_spec, MANY);
 extern Lisp_Object copy_font_spec (Lisp_Object);
 extern Lisp_Object merge_font_spec (Lisp_Object, Lisp_Object);
-EXFUN (Ffont_get, 2);
-EXFUN (Ffont_put, 3);
-EXFUN (Flist_fonts, 4);
-EXFUN (Ffont_xlfd_name, 2);
 
 extern Lisp_Object font_make_entity (void);
 extern Lisp_Object font_make_object (int, Lisp_Object, int);
diff --git a/src/fontset.h b/src/fontset.h
index 6d6ad5d..3eb8d63 100644
--- a/src/fontset.h
+++ b/src/fontset.h
@@ -39,7 +39,6 @@ extern Lisp_Object font_for_char (struct face *, int, int, Lisp_Object);
 extern int make_fontset_for_ascii_face (FRAME_PTR, int, struct face *);
 extern int fontset_from_font (Lisp_Object);
 extern int fs_query_fontset (Lisp_Object, int);
-EXFUN (Fquery_fontset, 2);
 extern Lisp_Object list_fontsets (struct frame *, Lisp_Object, int);
 
 extern Lisp_Object Qlatin;
diff --git a/src/image.c b/src/image.c
index 9b1c7f1..d67faff 100644
--- a/src/image.c
+++ b/src/image.c
@@ -138,7 +138,6 @@ static unsigned long lookup_rgb_color (struct frame *f, int r, int g, int b);
 static void free_color_table (void);
 static unsigned long *colors_in_color_table (int *n);
 #endif
-static Lisp_Object Finit_image_library (Lisp_Object, Lisp_Object);
 
 /* Code to deal with bitmaps.  Bitmaps are referenced by their bitmap
    id, which is just an int that this section returns.  Bitmaps are
diff --git a/src/insdel.c b/src/insdel.c
index 060f83f..2074916 100644
--- a/src/insdel.c
+++ b/src/insdel.c
@@ -41,8 +41,6 @@ static void insert_from_buffer_1 (struct buffer *buf,
 static void gap_left (ptrdiff_t charpos, ptrdiff_t bytepos, int newgap);
 static void gap_right (ptrdiff_t charpos, ptrdiff_t bytepos);
 
-static Lisp_Object Fcombine_after_change_execute (void);
-
 /* List of elements of the form (BEG-UNCHANGED END-UNCHANGED CHANGE-AMOUNT)
    describing changes which happened while combine_after_change_calls
    was nonzero.  We use this to decide how to call them
diff --git a/src/intervals.h b/src/intervals.h
index 6a2a8c9..8d2ee83 100644
--- a/src/intervals.h
+++ b/src/intervals.h
@@ -308,16 +308,6 @@ extern Lisp_Object Qinvisible, Qintangible;
 /* Sticky properties.  */
 extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
 
-EXFUN (Fget_char_property, 3);
-EXFUN (Fget_text_property, 3);
-EXFUN (Ftext_properties_at, 2);
-EXFUN (Fnext_property_change, 3);
-EXFUN (Fadd_text_properties, 4);
-EXFUN (Fset_text_properties, 4);
-EXFUN (Fremove_text_properties, 4);
-EXFUN (Fremove_list_of_text_properties, 4);
-EXFUN (Ftext_property_any, 5);
-EXFUN (Fprevious_single_char_property_change, 4);
 extern Lisp_Object copy_text_properties (Lisp_Object, Lisp_Object,
                                          Lisp_Object, Lisp_Object,
                                          Lisp_Object, Lisp_Object);
diff --git a/src/keyboard.c b/src/keyboard.c
index fccef03..65b7d53 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -459,8 +459,6 @@ static void interrupt_signal (int signalnum);
 #ifdef SIGIO
 static void input_available_signal (int signo);
 #endif
-static Lisp_Object (Fcommand_execute) (Lisp_Object, Lisp_Object, Lisp_Object,
-				       Lisp_Object);
 static void handle_interrupt (void);
 static _Noreturn void quit_throw_to_read_char (int);
 static void process_special_events (void);
@@ -1324,7 +1322,6 @@ cancel_hourglass_unwind (Lisp_Object arg)
 /* FIXME: This is wrong rather than test window-system, we should call
    a new set-selection, which will then dispatch to x-set-selection, or
    tty-set-selection, or w32-set-selection, ...  */
-EXFUN (Fwindow_system, 1);
 
 Lisp_Object
 command_loop_1 (void)
diff --git a/src/keymap.c b/src/keymap.c
index 6c59a4a..db4d5d1 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -92,7 +92,6 @@ static Lisp_Object where_is_cache;
 /* Which keymaps are reverse-stored in the cache.  */
 static Lisp_Object where_is_cache_keymaps;
 
-static Lisp_Object Flookup_key (Lisp_Object, Lisp_Object, Lisp_Object);
 static Lisp_Object store_in_keymap (Lisp_Object, Lisp_Object, Lisp_Object);
 
 static Lisp_Object define_as_prefix (Lisp_Object, Lisp_Object);
@@ -956,8 +955,6 @@ store_in_keymap (Lisp_Object keymap, register Lisp_Object idx, Lisp_Object def)
   return def;
 }
 
-static Lisp_Object Fcopy_keymap (Lisp_Object);
-
 static Lisp_Object
 copy_keymap_item (Lisp_Object elt)
 {
diff --git a/src/keymap.h b/src/keymap.h
index d9334cd..5ed70c6 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -34,19 +34,9 @@ extern Lisp_Object Qkeymap, Qmenu_bar;
 extern Lisp_Object Qremap;
 extern Lisp_Object Qmenu_item;
 extern Lisp_Object current_global_map;
-EXFUN (Fmake_sparse_keymap, 1);
-EXFUN (Fkeymap_prompt, 1);
-EXFUN (Fdefine_key, 3);
-EXFUN (Fcommand_remapping, 3);
-EXFUN (Fkey_binding, 4);
-EXFUN (Fkey_description, 2);
 extern char *push_key_description (EMACS_INT, char *, int);
-EXFUN (Fsingle_key_description, 2);
-EXFUN (Fwhere_is_internal, 5);
-EXFUN (Fcurrent_active_maps, 2);
 extern Lisp_Object access_keymap (Lisp_Object, Lisp_Object, int, int, int);
 extern Lisp_Object get_keymap (Lisp_Object, int, int);
-EXFUN (Fset_keymap_parent, 2);
 extern void describe_map_tree (Lisp_Object, int, Lisp_Object, Lisp_Object,
 			      const char *, int, int, int, int);
 extern ptrdiff_t current_minor_maps (Lisp_Object **, Lisp_Object **);
diff --git a/src/lisp.h b/src/lisp.h
index cac5370..ed7b69a 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2308,56 +2308,12 @@ extern Lisp_Object Qinteger;
 
 extern Lisp_Object Qfont_spec, Qfont_entity, Qfont_object;
 
-EXFUN (Finteractive_form, 1);
-EXFUN (Fbyteorder, 0);
-
 /* Defined in frame.c */
 extern Lisp_Object Qframep;
 
 /* Defined in data.c */
-EXFUN (Fcar, 1);
-EXFUN (Fcar_safe, 1);
-EXFUN (Fcdr, 1);
-EXFUN (Fcdr_safe, 1);
-EXFUN (Fsetcar, 2);
-EXFUN (Fsetcdr, 2);
-EXFUN (Fboundp, 1);
-EXFUN (Ffboundp, 1);
-EXFUN (Fsymbol_function, 1);
-EXFUN (Fsymbol_name, 1);
 extern Lisp_Object indirect_function (Lisp_Object);
-EXFUN (Findirect_function, 2);
-EXFUN (Ffset, 2);
-EXFUN (Fsymbol_value, 1);
 extern Lisp_Object find_symbol_value (Lisp_Object);
-EXFUN (Fset, 2);
-EXFUN (Fdefault_value, 1);
-EXFUN (Fset_default, 2);
-EXFUN (Fdefault_boundp, 1);
-EXFUN (Fmake_local_variable, 1);
-EXFUN (Flocal_variable_p, 2);
-
-EXFUN (Faref, 2);
-EXFUN (Faset, 3);
-
-EXFUN (Fstring_to_number, 2);
-EXFUN (Fnumber_to_string, 1);
-EXFUN (Fgtr, 2);
-EXFUN (Flss, 2);
-EXFUN (Fgeq, 2);
-EXFUN (Fleq, 2);
-EXFUN (Fzerop, 1);
-EXFUN (Fplus, MANY);
-EXFUN (Fminus, MANY);
-EXFUN (Ftimes, MANY);
-EXFUN (Fquo, MANY);
-EXFUN (Frem, 2);
-EXFUN (Fmax, MANY);
-EXFUN (Fmin, MANY);
-
-EXFUN (Fadd1, 1);
-EXFUN (Fsub1, 1);
-EXFUN (Fmake_variable_buffer_local, 1);
 
 /* Convert the integer I to an Emacs representation, either the integer
    itself, or a cons of two or three integers, or if all else fails a float.
@@ -2399,22 +2355,11 @@ extern void init_data (void);
 extern void swap_in_global_binding (struct Lisp_Symbol *);
 
 /* Defined in cmds.c */
-EXFUN (Fend_of_line, 1);
-EXFUN (Fforward_char, 1);
-EXFUN (Fforward_line, 1);
 extern void syms_of_cmds (void);
 extern void keys_of_cmds (void);
 
 /* Defined in coding.c */
 extern Lisp_Object Qcharset;
-EXFUN (Fcoding_system_p, 1);
-EXFUN (Fcoding_system_base, 1);
-EXFUN (Fcoding_system_eol_type, 1);
-EXFUN (Fcheck_coding_system, 1);
-EXFUN (Fread_coding_system, 2);
-EXFUN (Fread_non_nil_coding_system, 1);
-EXFUN (Ffind_operation_coding_system, MANY);
-EXFUN (Fdecode_coding_string, 4);
 extern Lisp_Object detect_coding_system (const unsigned char *, ptrdiff_t,
                                          ptrdiff_t, int, int, Lisp_Object);
 extern void init_coding (void);
@@ -2422,8 +2367,6 @@ extern void init_coding_once (void);
 extern void syms_of_coding (void);
 
 /* Defined in character.c */
-EXFUN (Fchar_width, 1);
-EXFUN (Fstring, MANY);
 extern ptrdiff_t chars_in_text (const unsigned char *, ptrdiff_t);
 extern ptrdiff_t multibyte_chars_in_text (const unsigned char *, ptrdiff_t);
 extern int multibyte_char_to_unibyte (int);
@@ -2442,9 +2385,6 @@ struct charset;
 extern void syms_of_composite (void);
 
 /* Defined in syntax.c */
-EXFUN (Fforward_word, 1);
-EXFUN (Fskip_chars_forward, 2);
-EXFUN (Fskip_chars_backward, 2);
 extern void init_syntax_once (void);
 extern void syms_of_syntax (void);
 
@@ -2467,46 +2407,10 @@ ptrdiff_t hash_put (struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object,
 		    EMACS_UINT);
 void init_weak_hash_tables (void);
 extern void init_fns (void);
-EXFUN (Fmake_hash_table, MANY);
-EXFUN (Fgethash, 3);
-EXFUN (Fputhash, 3);
-EXFUN (Fremhash, 2);
-
-EXFUN (Fidentity, 1);
-EXFUN (Flength, 1);
-EXFUN (Fappend, MANY);
-EXFUN (Fconcat, MANY);
-EXFUN (Fvconcat, MANY);
-EXFUN (Fcopy_sequence, 1);
-EXFUN (Fstring_make_multibyte, 1);
-EXFUN (Fstring_make_unibyte, 1);
-EXFUN (Fstring_as_multibyte, 1);
-EXFUN (Fstring_as_unibyte, 1);
-EXFUN (Fstring_to_multibyte, 1);
-EXFUN (Fsubstring, 3);
+
 extern Lisp_Object substring_both (Lisp_Object, ptrdiff_t, ptrdiff_t,
 				   ptrdiff_t, ptrdiff_t);
-EXFUN (Fnth, 2);
-EXFUN (Fnthcdr, 2);
-EXFUN (Fmemq, 2);
-EXFUN (Fassq, 2);
-EXFUN (Fassoc, 2);
-EXFUN (Felt, 2);
-EXFUN (Fmember, 2);
-EXFUN (Frassq, 2);
-EXFUN (Fdelq, 2);
-EXFUN (Fdelete, 2);
-EXFUN (Fsort, 2);
-EXFUN (Freverse, 1);
-EXFUN (Fnreverse, 1);
-EXFUN (Fget, 2);
-EXFUN (Fput, 3);
-EXFUN (Fequal, 2);
-EXFUN (Fnconc, MANY);
-EXFUN (Fmapcar, 2);
-EXFUN (Fmapconcat, 3);
 extern Lisp_Object do_yes_or_no_p (Lisp_Object);
-EXFUN (Fprovide, 2);
 extern Lisp_Object concat2 (Lisp_Object, Lisp_Object);
 extern Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object);
 extern Lisp_Object nconc2 (Lisp_Object, Lisp_Object);
@@ -2517,20 +2421,10 @@ extern ptrdiff_t string_char_to_byte (Lisp_Object, ptrdiff_t);
 extern ptrdiff_t string_byte_to_char (Lisp_Object, ptrdiff_t);
 extern Lisp_Object string_to_multibyte (Lisp_Object);
 extern Lisp_Object string_make_unibyte (Lisp_Object);
-EXFUN (Fcopy_alist, 1);
-EXFUN (Fplist_get, 2);
-EXFUN (Fplist_put, 3);
-EXFUN (Fplist_member, 2);
-EXFUN (Frassoc, 2);
-EXFUN (Fstring_equal, 2);
-EXFUN (Fcompare_strings, 7);
-EXFUN (Fstring_lessp, 2);
 extern void syms_of_fns (void);
 
 /* Defined in floatfns.c */
 extern double extract_float (Lisp_Object);
-EXFUN (Ffloat, 1);
-EXFUN (Ftruncate, 2);
 extern void init_floatfns (void);
 extern void syms_of_floatfns (void);
 extern Lisp_Object fmod_float (Lisp_Object x, Lisp_Object y);
@@ -2603,11 +2497,7 @@ _Noreturn void __executable_start (void);
 #endif
 extern Lisp_Object selected_frame;
 extern Lisp_Object Vwindow_system;
-EXFUN (Fding, 1);
-EXFUN (Fredraw_frame, 1);
 void duration_to_sec_usec (double, int *, int *);
-EXFUN (Fsleep_for, 2);
-EXFUN (Fredisplay, 1);
 extern Lisp_Object sit_for (Lisp_Object, int, int);
 extern void init_display (void);
 extern void syms_of_display (void);
@@ -2684,22 +2574,14 @@ extern void refill_memory_reserve (void);
 #endif
 extern const char *pending_malloc_warning;
 extern Lisp_Object *stack_base;
-EXFUN (Fcons, 2);
 extern Lisp_Object list1 (Lisp_Object);
 extern Lisp_Object list2 (Lisp_Object, Lisp_Object);
 extern Lisp_Object list3 (Lisp_Object, Lisp_Object, Lisp_Object);
 extern Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
 extern Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
 			  Lisp_Object);
-EXFUN (Flist, MANY);
-EXFUN (Fmake_list, 2);
 extern Lisp_Object allocate_misc (void);
-EXFUN (Fmake_vector, 2);
-EXFUN (Fvector, MANY);
-EXFUN (Fmake_symbol, 1);
-EXFUN (Fmake_marker, 0);
 extern _Noreturn void string_overflow (void);
-EXFUN (Fmake_string, 2);
 extern Lisp_Object make_string (const char *, ptrdiff_t);
 extern Lisp_Object make_unibyte_string (const char *, ptrdiff_t);
 extern Lisp_Object make_multibyte_string (const char *, ptrdiff_t, ptrdiff_t);
@@ -2709,7 +2591,6 @@ extern Lisp_Object make_uninit_multibyte_string (EMACS_INT, EMACS_INT);
 extern Lisp_Object make_string_from_bytes (const char *, ptrdiff_t, ptrdiff_t);
 extern Lisp_Object make_specified_string (const char *,
 					  ptrdiff_t, ptrdiff_t, int);
-EXFUN (Fpurecopy, 1);
 extern Lisp_Object make_pure_string (const char *, ptrdiff_t, ptrdiff_t, int);
 extern Lisp_Object make_pure_c_string (const char *data);
 
@@ -2723,10 +2604,7 @@ build_string (const char *str)
 }
 
 extern Lisp_Object pure_cons (Lisp_Object, Lisp_Object);
-EXFUN (Fgarbage_collect, 0);
 extern void make_byte_code (struct Lisp_Vector *);
-EXFUN (Fmake_byte_code, MANY);
-EXFUN (Fmake_bool_vector, 2);
 extern Lisp_Object Qchar_table_extra_slots;
 extern struct Lisp_Vector *allocate_vector (EMACS_INT);
 extern struct Lisp_Vector *allocate_pseudovector (int memlen, int lisplen, int tag);
@@ -2763,12 +2641,6 @@ extern void r_alloc_inhibit_buffer_relocation (int);
 #endif
 
 /* Defined in chartab.c */
-EXFUN (Fmake_char_table, 2);
-EXFUN (Fset_char_table_parent, 2);
-EXFUN (Fchar_table_extra_slot, 2);
-EXFUN (Fset_char_table_extra_slot, 3);
-EXFUN (Fset_char_table_range, 3);
-EXFUN (Foptimize_char_table, 2);
 extern Lisp_Object copy_char_table (Lisp_Object);
 extern Lisp_Object char_table_ref (Lisp_Object, int);
 extern Lisp_Object char_table_ref_and_range (Lisp_Object, int,
@@ -2790,11 +2662,6 @@ extern void syms_of_chartab (void);
 /* Defined in print.c */
 extern Lisp_Object Vprin1_to_string_buffer;
 extern void debug_print (Lisp_Object) EXTERNALLY_VISIBLE;
-EXFUN (Fprin1, 2);
-EXFUN (Fprin1_to_string, 2);
-EXFUN (Fterpri, 1);
-EXFUN (Fprint, 2);
-EXFUN (Ferror_message_string, 1);
 extern Lisp_Object Qstandard_output;
 extern Lisp_Object Qexternal_debugging_output;
 extern void temp_output_buffer_setup (const char *);
@@ -2824,15 +2691,6 @@ extern ptrdiff_t evxprintf (char **, ptrdiff_t *, char const *, ptrdiff_t,
 /* Defined in lread.c.  */
 extern Lisp_Object Qvariable_documentation, Qstandard_input;
 extern Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction;
-EXFUN (Fread, 1);
-EXFUN (Fread_from_string, 3);
-EXFUN (Fintern, 2);
-EXFUN (Fintern_soft, 2);
-EXFUN (Funintern, 2);
-EXFUN (Fload, 5);
-EXFUN (Fget_load_suffixes, 0);
-EXFUN (Fread_char, 3);
-EXFUN (Fread_event, 3);
 extern Lisp_Object check_obarray (Lisp_Object);
 extern Lisp_Object intern (const char *);
 extern Lisp_Object intern_c_string (const char *);
@@ -2872,17 +2730,10 @@ extern struct handler *handlerlist;
 
    should no longer be used.  */
 extern Lisp_Object Vrun_hooks;
-EXFUN (Frun_hooks, MANY);
-EXFUN (Frun_hook_with_args, MANY);
-EXFUN (Frun_hook_with_args_until_failure, MANY);
 extern void run_hook_with_args_2 (Lisp_Object, Lisp_Object, Lisp_Object);
 extern Lisp_Object run_hook_with_args (ptrdiff_t nargs, Lisp_Object *args,
 				       Lisp_Object (*funcall)
 				       (ptrdiff_t nargs, Lisp_Object *args));
-EXFUN (Fprogn, UNEVALLED);
-EXFUN (Finteractive_p, 0);
-_Noreturn EXFUN (Fthrow, 2);
-EXFUN (Fsignal, 2);
 extern _Noreturn void xsignal (Lisp_Object, Lisp_Object);
 extern _Noreturn void xsignal0 (Lisp_Object);
 extern _Noreturn void xsignal1 (Lisp_Object, Lisp_Object);
@@ -2890,12 +2741,7 @@ extern _Noreturn void xsignal2 (Lisp_Object, Lisp_Object, Lisp_Object);
 extern _Noreturn void xsignal3 (Lisp_Object, Lisp_Object, Lisp_Object,
 				Lisp_Object);
 extern _Noreturn void signal_error (const char *, Lisp_Object);
-EXFUN (Fcommandp, 2);
-EXFUN (Ffunctionp, 1);
-EXFUN (Feval, 2);
 extern Lisp_Object eval_sub (Lisp_Object form);
-EXFUN (Fapply, MANY);
-EXFUN (Ffuncall, MANY);
 extern Lisp_Object apply1 (Lisp_Object, Lisp_Object);
 extern Lisp_Object call0 (Lisp_Object);
 extern Lisp_Object call1 (Lisp_Object, Lisp_Object);
@@ -2905,7 +2751,6 @@ extern Lisp_Object call4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Li
 extern Lisp_Object call5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
 extern Lisp_Object call6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
 extern Lisp_Object call7 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
-EXFUN (Fdo_auto_save, 2);
 extern Lisp_Object internal_catch (Lisp_Object, Lisp_Object (*) (Lisp_Object), Lisp_Object);
 extern Lisp_Object internal_lisp_condition_case (Lisp_Object, Lisp_Object, Lisp_Object);
 extern Lisp_Object internal_condition_case (Lisp_Object (*) (void), Lisp_Object, Lisp_Object (*) (Lisp_Object));
@@ -2932,57 +2777,24 @@ extern void syms_of_eval (void);
 
 /* Defined in editfns.c */
 extern Lisp_Object Qfield;
-EXFUN (Fcurrent_message, 0);
-EXFUN (Fgoto_char, 1);
-EXFUN (Fpoint_max_marker, 0);
-EXFUN (Fpoint, 0);
-EXFUN (Fpoint_marker, 0);
-EXFUN (Fline_beginning_position, 1);
-EXFUN (Fline_end_position, 1);
-EXFUN (Ffollowing_char, 0);
-EXFUN (Fprevious_char, 0);
-EXFUN (Fchar_after, 1);
-EXFUN (Finsert, MANY);
-EXFUN (Finsert_char, 3);
 extern void insert1 (Lisp_Object);
-EXFUN (Feolp, 0);
-EXFUN (Feobp, 0);
-EXFUN (Fbolp, 0);
-EXFUN (Fbobp, 0);
-EXFUN (Fformat, MANY);
-EXFUN (Fmessage, MANY);
 extern Lisp_Object format2 (const char *, Lisp_Object, Lisp_Object);
-EXFUN (Fbuffer_substring, 2);
-EXFUN (Fbuffer_string, 0);
 extern Lisp_Object save_excursion_save (void);
 extern Lisp_Object save_restriction_save (void);
 extern Lisp_Object save_excursion_restore (Lisp_Object);
 extern Lisp_Object save_restriction_restore (Lisp_Object);
-EXFUN (Fchar_to_string, 1);
-EXFUN (Fdelete_region, 2);
-EXFUN (Fnarrow_to_region, 2);
-EXFUN (Fwiden, 0);
-EXFUN (Fuser_login_name, 1);
-EXFUN (Fsystem_name, 0);
 extern _Noreturn void time_overflow (void);
-EXFUN (Fcurrent_time, 0);
-EXFUN (Fget_internal_run_time, 0);
 extern Lisp_Object make_buffer_string (ptrdiff_t, ptrdiff_t, int);
 extern Lisp_Object make_buffer_string_both (ptrdiff_t, ptrdiff_t, ptrdiff_t,
 					    ptrdiff_t, int);
 extern void init_editfns (void);
 const char *get_system_name (void);
 extern void syms_of_editfns (void);
-EXFUN (Fconstrain_to_field, 5);
-EXFUN (Ffield_end, 3);
 extern void set_time_zone_rule (const char *);
 
 /* Defined in buffer.c */
 extern int mouse_face_overlay_overlaps (Lisp_Object);
 extern _Noreturn void nsberror (Lisp_Object);
-EXFUN (Fset_buffer_multibyte, 1);
-EXFUN (Foverlay_start, 1);
-EXFUN (Foverlay_end, 1);
 extern void adjust_overlays_for_insert (ptrdiff_t, ptrdiff_t);
 extern void adjust_overlays_for_delete (ptrdiff_t, ptrdiff_t);
 extern void fix_start_end_in_overlays (ptrdiff_t, ptrdiff_t);
@@ -2990,27 +2802,11 @@ extern void report_overlay_modification (Lisp_Object, Lisp_Object, int,
                                          Lisp_Object, Lisp_Object, Lisp_Object);
 extern int overlay_touches_p (ptrdiff_t);
 extern Lisp_Object Vbuffer_alist;
-EXFUN (Fget_buffer, 1);
-EXFUN (Fget_buffer_create, 1);
-EXFUN (Fgenerate_new_buffer_name, 2);
-EXFUN (Fset_buffer, 1);
 extern Lisp_Object set_buffer_if_live (Lisp_Object);
-EXFUN (Fbarf_if_buffer_read_only, 0);
-EXFUN (Fcurrent_buffer, 0);
-EXFUN (Fother_buffer, 3);
 extern Lisp_Object other_buffer_safely (Lisp_Object);
-EXFUN (Foverlay_get, 2);
-EXFUN (Fbuffer_modified_p, 1);
-EXFUN (Fset_buffer_modified_p, 1);
-EXFUN (Fkill_buffer, 1);
-EXFUN (Fkill_all_local_variables, 0);
-EXFUN (Fbuffer_enable_undo, 1);
-EXFUN (Ferase_buffer, 0);
 extern Lisp_Object Qpriority, Qwindow, Qbefore_string, Qafter_string;
 extern Lisp_Object get_truename_buffer (Lisp_Object);
 extern struct buffer *all_buffers;
-EXFUN (Fprevious_overlay_change, 1);
-EXFUN (Fbuffer_file_name, 1);
 extern void init_buffer_once (void);
 extern void init_buffer (void);
 extern void syms_of_buffer (void);
@@ -3018,10 +2814,6 @@ extern void keys_of_buffer (void);
 
 /* Defined in marker.c */
 
-EXFUN (Fmarker_position, 1);
-EXFUN (Fmarker_buffer, 1);
-EXFUN (Fcopy_marker, 2);
-EXFUN (Fset_marker, 3);
 extern ptrdiff_t marker_position (Lisp_Object);
 extern ptrdiff_t marker_byte_position (Lisp_Object);
 extern void clear_charpos_cache (struct buffer *);
@@ -3042,24 +2834,7 @@ extern Lisp_Object Qfile_exists_p;
 extern Lisp_Object Qfile_directory_p;
 extern Lisp_Object Qinsert_file_contents;
 extern Lisp_Object Qfile_name_history;
-EXFUN (Ffind_file_name_handler, 2);
-EXFUN (Ffile_name_as_directory, 1);
-EXFUN (Fexpand_file_name, 2);
-EXFUN (Ffile_name_nondirectory, 1);
-EXFUN (Fsubstitute_in_file_name, 1);
-EXFUN (Ffile_symlink_p, 1);
-EXFUN (Fverify_visited_file_modtime, 1);
-EXFUN (Ffile_exists_p, 1);
-EXFUN (Ffile_name_absolute_p, 1);
-EXFUN (Fdirectory_file_name, 1);
-EXFUN (Ffile_name_directory, 1);
 extern Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
-EXFUN (Ffile_accessible_directory_p, 1);
-EXFUN (Funhandled_file_name_directory, 1);
-EXFUN (Ffile_directory_p, 1);
-EXFUN (Fwrite_region, 7);
-EXFUN (Ffile_readable_p, 1);
-EXFUN (Fread_file_name, 6);
 extern Lisp_Object close_file_unwind (Lisp_Object);
 extern Lisp_Object restore_point_unwind (Lisp_Object);
 extern _Noreturn void report_file_error (const char *, Lisp_Object);
@@ -3070,12 +2845,7 @@ extern Lisp_Object Qdelete_file;
 
 /* Defined in search.c */
 extern void shrink_regexp_cache (void);
-EXFUN (Fstring_match, 3);
 extern void restore_search_regs (void);
-EXFUN (Fmatch_data, 3);
-EXFUN (Fset_match_data, 2);
-EXFUN (Fmatch_beginning, 1);
-EXFUN (Fmatch_end, 1);
 extern void record_unwind_save_match_data (void);
 struct re_registers;
 extern struct re_pattern_buffer *compile_pattern (Lisp_Object,
@@ -3101,14 +2871,6 @@ extern void clear_regexp_cache (void);
 extern Lisp_Object Qcompletion_ignore_case;
 extern Lisp_Object Vminibuffer_list;
 extern Lisp_Object last_minibuf_string;
-EXFUN (Fcompleting_read, 8);
-EXFUN (Fread_from_minibuffer, 7);
-EXFUN (Fread_variable, 2);
-EXFUN (Fread_buffer, 3);
-EXFUN (Fread_minibuffer, 2);
-EXFUN (Feval_minibuffer, 2);
-EXFUN (Fread_string, 5);
-EXFUN (Fassoc_string, 3);
 extern Lisp_Object get_minibuffer (EMACS_INT);
 extern void init_minibuf_once (void);
 extern void syms_of_minibuf (void);
@@ -3118,24 +2880,16 @@ extern void syms_of_minibuf (void);
 extern Lisp_Object Qminus, Qplus;
 extern Lisp_Object Qwhen;
 extern Lisp_Object Qcall_interactively, Qmouse_leave_buffer_hook;
-EXFUN (Fprefix_numeric_value, 1);
 extern void syms_of_callint (void);
 
 /* Defined in casefiddle.c */
 
 extern Lisp_Object Qidentity;
-EXFUN (Fdowncase, 1);
-EXFUN (Fupcase, 1);
-EXFUN (Fupcase_region, 2);
-EXFUN (Fupcase_initials, 1);
-EXFUN (Fupcase_initials_region, 2);
 extern void syms_of_casefiddle (void);
 extern void keys_of_casefiddle (void);
 
 /* Defined in casetab.c */
 
-EXFUN (Fset_case_table, 1);
-EXFUN (Fset_standard_case_table, 1);
 extern void init_casetab_once (void);
 extern void syms_of_casetab (void);
 
@@ -3148,16 +2902,9 @@ extern Lisp_Object Qdisabled, QCfilter;
 extern Lisp_Object Qup, Qdown, Qbottom;
 extern Lisp_Object Qtop;
 extern int input_pending;
-EXFUN (Fdiscard_input, 0);
-EXFUN (Frecursive_edit, 0);
-_Noreturn EXFUN (Ftop_level, 0);
 extern Lisp_Object menu_bar_items (Lisp_Object);
 extern Lisp_Object tool_bar_items (Lisp_Object, int *);
 extern void discard_mouse_events (void);
-EXFUN (Fevent_convert_list, 1);
-EXFUN (Fread_key_sequence, 5);
-EXFUN (Fset_input_interrupt_mode, 1);
-EXFUN (Fset_input_mode, 4);
 extern Lisp_Object pending_funcalls;
 extern int detect_input_pending (void);
 extern int detect_input_pending_ignore_squeezables (void);
@@ -3175,9 +2922,6 @@ extern void syms_of_keyboard (void);
 extern void keys_of_keyboard (void);
 
 /* Defined in indent.c */
-EXFUN (Fvertical_motion, 2);
-EXFUN (Findent_to, 2);
-EXFUN (Fmove_to_column, 2);
 extern ptrdiff_t current_column (void);
 extern void invalidate_current_column (void);
 extern int indented_beyond_p (ptrdiff_t, ptrdiff_t, EMACS_INT);
@@ -3195,14 +2939,6 @@ extern Lisp_Object do_switch_frame (Lisp_Object, int, int, Lisp_Object);
 extern Lisp_Object get_frame_param (struct frame *, Lisp_Object);
 #endif
 extern Lisp_Object frame_buffer_predicate (Lisp_Object);
-EXFUN (Fselect_frame, 2);
-EXFUN (Fselected_frame, 0);
-EXFUN (Fmake_frame_visible, 1);
-EXFUN (Ficonify_frame, 1);
-EXFUN (Fframe_parameter, 2);
-EXFUN (Fmodify_frame_parameters, 2);
-EXFUN (Fraise_frame, 1);
-EXFUN (Fredirect_frame_focus, 2);
 extern void frames_discard_buffer (Lisp_Object);
 extern void syms_of_frame (void);
 
@@ -3219,7 +2955,6 @@ extern Lisp_Object Qfile_name_handler_alist;
 extern void fatal_error_signal (int);
 #endif
 extern Lisp_Object Qkill_emacs;
-_Noreturn EXFUN (Fkill_emacs, 1);
 #if HAVE_SETLOCALE
 void fixup_locale (void);
 void synchronize_system_messages_locale (void);
@@ -3249,10 +2984,6 @@ extern int running_asynch_code;
 
 /* Defined in process.c.  */
 extern Lisp_Object QCtype, Qlocal;
-EXFUN (Fget_buffer_process, 1);
-EXFUN (Fprocess_status, 1);
-EXFUN (Fkill_process, 2);
-EXFUN (Fwaiting_for_user_input_p, 0);
 extern Lisp_Object Qprocessp;
 extern void kill_buffer_processes (Lisp_Object);
 extern int wait_reading_process_output (intmax_t, int, int, int,
@@ -3278,7 +3009,6 @@ extern void init_process (void);
 extern void syms_of_process (void);
 extern void setup_process_coding_systems (Lisp_Object);
 
-EXFUN (Fcall_process, MANY);
 #ifndef DOS_NT
  _Noreturn
 #endif
@@ -3290,7 +3020,6 @@ extern void syms_of_callproc (void);
 
 /* Defined in doc.c */
 extern Lisp_Object Qfunction_documentation;
-EXFUN (Fsubstitute_command_keys, 1);
 extern Lisp_Object read_doc_string (Lisp_Object);
 extern Lisp_Object get_doc_string (Lisp_Object, int, int);
 extern void syms_of_doc (void);
@@ -3309,15 +3038,12 @@ extern Lisp_Object exec_byte_code (Lisp_Object, Lisp_Object, Lisp_Object,
 
 /* Defined in macros.c */
 extern Lisp_Object Qexecute_kbd_macro;
-EXFUN (Fexecute_kbd_macro, 3);
-EXFUN (Fcancel_kbd_macro_events, 0);
 extern void init_macros (void);
 extern void syms_of_macros (void);
 
 /* Defined in undo.c */
 extern Lisp_Object Qapply;
 extern Lisp_Object Qinhibit_read_only;
-EXFUN (Fundo_boundary, 0);
 extern void truncate_undo_list (struct buffer *);
 extern void record_marker_adjustment (Lisp_Object, ptrdiff_t);
 extern void record_insert (ptrdiff_t, ptrdiff_t);
@@ -3334,21 +3060,12 @@ extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
 extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
 extern Lisp_Object Qminibuffer_prompt;
 
-EXFUN (Fnext_single_property_change, 4);
-EXFUN (Fnext_single_char_property_change, 4);
-EXFUN (Fprevious_single_property_change, 4);
-EXFUN (Fget_text_property, 3);
-EXFUN (Fput_text_property, 5);
-EXFUN (Fprevious_char_property_change, 2);
-EXFUN (Fnext_char_property_change, 2);
 extern void report_interval_modification (Lisp_Object, Lisp_Object);
 
 /* Defined in menu.c */
 extern void syms_of_menu (void);
 
 /* Defined in xmenu.c */
-EXFUN (Fx_popup_menu, 2);
-EXFUN (Fx_popup_dialog, 3);
 extern void syms_of_xmenu (void);
 
 /* Defined in termchar.h */
@@ -3385,7 +3102,6 @@ extern ptrdiff_t emacs_write (int, const char *, ptrdiff_t);
 enum { READLINK_BUFSIZE = 1024 };
 extern char *emacs_readlink (const char *, char [READLINK_BUFSIZE]);
 
-EXFUN (Funlock_buffer, 0);
 extern void unlock_all_files (void);
 extern void lock_file (Lisp_Object);
 extern void unlock_file (Lisp_Object);
@@ -3419,8 +3135,6 @@ extern _Noreturn void fatal (const char *msgid, ...)
   ATTRIBUTE_FORMAT_PRINTF (1, 2);
 
 /* Defined in terminal.c */
-EXFUN (Fframe_terminal, 1);
-EXFUN (Fdelete_terminal, 2);
 extern void syms_of_terminal (void);
 
 /* Defined in font.c */
@@ -3433,8 +3147,6 @@ extern void syms_of_fontset (void);
 
 /* Defined in xfns.c, w32fns.c, or macfns.c */
 extern Lisp_Object Qfont_param;
-EXFUN (Fxw_display_color_p, 1);
-EXFUN (Fx_focus_frame, 1);
 #endif
 
 /* Defined in xfaces.c */
@@ -3447,8 +3159,6 @@ extern Lisp_Object QCfamily, QCweight, QCslant;
 extern Lisp_Object QCheight, QCname, QCwidth, QCforeground, QCbackground;
 extern Lisp_Object Vface_alternative_font_family_alist;
 extern Lisp_Object Vface_alternative_font_registry_alist;
-EXFUN (Fclear_face_cache, 1);
-EXFUN (Fx_load_color_file, 1);
 extern void syms_of_xfaces (void);
 
 #ifdef HAVE_X_WINDOWS
@@ -3470,11 +3180,6 @@ extern void syms_of_xterm (void);
 extern char *x_get_keysym_name (int);
 #endif /* HAVE_WINDOW_SYSTEM */
 
-#ifdef MSDOS
-/* Defined in msdos.c */
-EXFUN (Fmsdos_downcase_filename, 1);
-#endif
-
 #ifdef HAVE_LIBXML2
 /* Defined in xml.c */
 extern void syms_of_xml (void);
diff --git a/src/nsterm.h b/src/nsterm.h
index 9158b78..80d25d6 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -707,8 +707,6 @@ extern void ns_term_shutdown (int sig);
 #define NS_DUMPGLYPH_MOUSEFACE          3
 
 
-EXFUN (Fx_display_grayscale_p, 1);
-EXFUN (Fx_display_planes, 1);
 
 /* In nsfont, called from fontset.c */
 extern void nsfont_make_fontset_for_font (Lisp_Object name,
diff --git a/src/process.c b/src/process.c
index de7fc14..b30e87c 100644
--- a/src/process.c
+++ b/src/process.c
@@ -249,7 +249,6 @@ static int process_output_skip;
 #define process_output_delay_count 0
 #endif
 
-static Lisp_Object Fget_process (Lisp_Object);
 static void create_process (Lisp_Object, char **, Lisp_Object);
 #ifdef SIGIO
 static int keyboard_bit_set (SELECT_TYPE *);
@@ -1089,10 +1088,6 @@ DEFUN ("process-query-on-exit-flag",
   return (XPROCESS (process)->kill_without_query ? Qnil : Qt);
 }
 
-#ifdef DATAGRAM_SOCKETS
-static Lisp_Object Fprocess_datagram_address (Lisp_Object);
-#endif
-
 DEFUN ("process-contact", Fprocess_contact, Sprocess_contact,
        1, 2, 0,
        doc: /* Return the contact info of PROCESS; t for a real child.
diff --git a/src/syntax.c b/src/syntax.c
index 1ad6683..e7e68e2 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -143,7 +143,6 @@ static ptrdiff_t find_start_begv;
 static EMACS_INT find_start_modiff;
 
 
-static Lisp_Object Fsyntax_table_p (Lisp_Object);
 static Lisp_Object skip_chars (int, Lisp_Object, Lisp_Object, int);
 static Lisp_Object skip_syntaxes (int, Lisp_Object, Lisp_Object);
 static Lisp_Object scan_lists (EMACS_INT, EMACS_INT, EMACS_INT, int);
diff --git a/src/textprop.c b/src/textprop.c
index fb58f8e..4562cc0 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -72,9 +72,6 @@ Lisp_Object Qfront_sticky, Qrear_nonsticky;
 static Lisp_Object interval_insert_behind_hooks;
 static Lisp_Object interval_insert_in_front_hooks;
 
-static Lisp_Object Fprevious_property_change (Lisp_Object, Lisp_Object,
-					      Lisp_Object);
-
 
 /* Signal a `text-read-only' error.  This function makes it easier
    to capture that error in GDB by putting a breakpoint on it.  */
diff --git a/src/w32term.h b/src/w32term.h
index 68e62b2..4fdf560 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -688,9 +688,6 @@ struct face;
 XGCValues *XCreateGC (void *, Window, unsigned long, XGCValues *);
 struct frame * check_x_frame (Lisp_Object);
 
-EXFUN (Fx_display_color_p, 1);
-EXFUN (Fx_display_grayscale_p, 1);
-
 typedef DWORD (WINAPI * ClipboardSequence_Proc) (void);
 typedef BOOL (WINAPI * AppendMenuW_Proc) (
     IN HMENU,
diff --git a/src/window.c b/src/window.c
index 9d78a3e..dc8539f 100644
--- a/src/window.c
+++ b/src/window.c
@@ -2873,13 +2873,6 @@ adjust_window_margins (struct window *w)
   return 1;
 }
 \f
-static Lisp_Object Fset_window_margins (Lisp_Object, Lisp_Object, Lisp_Object);
-static Lisp_Object Fset_window_fringes (Lisp_Object, Lisp_Object, Lisp_Object,
-					Lisp_Object);
-static Lisp_Object Fset_window_scroll_bars (Lisp_Object, Lisp_Object,
-					    Lisp_Object, Lisp_Object);
-static Lisp_Object Fset_window_vscroll (Lisp_Object, Lisp_Object, Lisp_Object);
-
 /* The following three routines are needed for running a window's
    configuration change hook.  */
 static void
diff --git a/src/window.h b/src/window.h
index 50bd713..fd4f755 100644
--- a/src/window.h
+++ b/src/window.h
@@ -814,14 +814,9 @@ extern Lisp_Object Vmouse_window;
 
 extern Lisp_Object Vmouse_event;
 
-EXFUN (Fnext_window, 3);
-EXFUN (Fselect_window, 2);
-EXFUN (Fset_window_buffer, 3);
-EXFUN (Fset_window_point, 2);
 extern Lisp_Object make_window (void);
 extern Lisp_Object window_from_coordinates (struct frame *, int, int,
                                             enum window_part *, int);
-EXFUN (Fwindow_dedicated_p, 1);
 extern void resize_frame_windows (struct frame *, int, int);
 extern void delete_all_child_windows (Lisp_Object);
 extern void freeze_window_starts (struct frame *, int);
@@ -892,21 +887,10 @@ struct glyph *get_phys_cursor_glyph (struct window *w);
 extern Lisp_Object Qwindowp, Qwindow_live_p;
 extern Lisp_Object Vwindow_list;
 
-EXFUN (Fwindow_buffer, 1);
-EXFUN (Fget_buffer_window, 2);
-EXFUN (Fwindow_minibuffer_p, 1);
-EXFUN (Fselected_window, 0);
-EXFUN (Fframe_root_window, 1);
-EXFUN (Fframe_first_window, 1);
-EXFUN (Fset_frame_selected_window, 3);
-EXFUN (Fset_window_configuration, 1);
-EXFUN (Fcurrent_window_configuration, 1);
 extern int compare_window_configurations (Lisp_Object, Lisp_Object, int);
-EXFUN (Fpos_visible_in_window_p, 3);
 extern void mark_window_cursors_off (struct window *);
 extern int window_internal_height (struct window *);
 extern int window_body_cols (struct window *w);
-EXFUN (Frecenter, 1);
 extern void temp_output_buffer_show (Lisp_Object);
 extern void replace_buffer_in_windows (Lisp_Object);
 extern void replace_buffer_in_windows_safely (Lisp_Object);
diff --git a/src/xsettings.h b/src/xsettings.h
index d6b0c09..10dc7ef 100644
--- a/src/xsettings.h
+++ b/src/xsettings.h
@@ -20,8 +20,6 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #ifndef XSETTINGS_H
 #define XSETTINGS_H
 
-EXFUN (Ftool_bar_get_system_style, 0);
-
 extern void xsettings_initialize (struct x_display_info *dpyinfo);
 extern void xft_settings_event (struct x_display_info *dpyinfo,
                                 XEvent *);
diff --git a/src/xterm.h b/src/xterm.h
index 68e0372..573d8bf 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -937,7 +937,6 @@ void x_handle_property_notify (XPropertyEvent *);
 /* From xfns.c.  */
 
 struct frame *check_x_frame (Lisp_Object);
-EXFUN (Fx_display_grayscale_p, 1);
 extern void x_free_gcs (struct frame *);
 
 /* From xrdb.c.  */



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-06-28 18:05       ` Stefan Monnier
  2012-06-29 16:36         ` Tom Tromey
@ 2012-07-02 15:40         ` Samuel Bronson
  2012-07-02 17:11           ` Tom Tromey
  1 sibling, 1 reply; 13+ messages in thread
From: Samuel Bronson @ 2012-07-02 15:40 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Dmitry Antipov, emacs-devel


On Jun 28, 2012, at 2:05 PM, Stefan Monnier wrote:

>> +10. Of course, it would be a toy task for coccinelle.  But, IMHO,
>> EXFUN makes the things clearer rather than obfuscating them.
>
> Agreed.  An alternative is to autogenerate all the EXFUNs for all  
> F<foo>
> functions into src/global.h, to make it more Lispy.


But wouldn't that trigger full rebuilds?  I think it would probably be  
better to put them in headers which are associated with, say, the  
relevant subsystem...



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-07-02 15:40         ` Samuel Bronson
@ 2012-07-02 17:11           ` Tom Tromey
  0 siblings, 0 replies; 13+ messages in thread
From: Tom Tromey @ 2012-07-02 17:11 UTC (permalink / raw)
  To: Samuel Bronson; +Cc: Dmitry Antipov, Stefan Monnier, emacs-devel

>>>>> "Samuel" == Samuel Bronson <naesten@gmail.com> writes:

Stefan> Agreed.  An alternative is to autogenerate all the EXFUNs for all
Stefan> F<foo>
Stefan> functions into src/global.h, to make it more Lispy.

Samuel> But wouldn't that trigger full rebuilds?  I think it would probably be
Samuel> better to put them in headers which are associated with, say, the
Samuel> relevant subsystem...

You already get full rebuilds if you change one, since most are declared
in lisp.h; but changing one is rare anyway.

Tom



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-06-29 16:36         ` Tom Tromey
@ 2012-07-02 18:12           ` Stefan Monnier
  2012-07-02 19:05             ` Tom Tromey
  0 siblings, 1 reply; 13+ messages in thread
From: Stefan Monnier @ 2012-07-02 18:12 UTC (permalink / raw)
  To: Tom Tromey; +Cc: Dmitry Antipov, emacs-devel

> What do you think of the appended?

I think it's going in the right direction.  I do wonder/worry about
handling dependencies: for the current globals.h, there's no real
problem since if the vars in it can be pretty much only missing or
extraneous but can't be incorrect (they *very* rarely change type), but
it's slightly less rare to change the type of a DEFUN'd function
(i.e. adding/removing arguments).


        Stefan


> It builds for me on x86-64 Fedora 16.
> I didn't try any other platforms; there could be hiccups I suppose.

> The one wrinkle is that this makes some functions non-static.

> Tom

> b/lib-src/ChangeLog:
> 2012-06-29  Tom Tromey  <tromey@redhat.com>

> 	* make-docfile.c (enum global_type) <FUNCTION>: New constant.
> 	(struct global) <value>: New field.
> 	(add_global): Add 'value' argument.
> 	(compare_globals): Sort functions at the end.
> 	(close_emacs_globals): New function.
> 	(write_globals): Handle functions.
> 	(scan_c_file): Call add_global for DEFUN.

> b/src/ChangeLog:
> 2012-06-29  Tom Tromey  <tromey@redhat.com>

> 	* window.c (Fset_window_margins, Fset_window_fringes)
> 	(Fset_window_scroll_bars, Fset_window_vscroll): No longer static.
> 	* textprop.c (Fprevious_property_change): No longer static.
> 	* syntax.c (Fsyntax_table_p): No longer static.
> 	* process.c (Fget_process, Fprocess_datagram_address): No longer
> 	static.
> 	* keymap.c (Flookup_key, Fcopy_keymap): No longer static.
> 	* keyboard.c (Fcommand_execute): No longer static.
> 	Remove EXFUN.
> 	* insdel.c (Fcombine_after_change_execute): No longer static.
> 	* image.c (Finit_image_library): No longer static.
> 	* fileio.c (Fmake_symbolic_link): No longer static.
> 	* eval.c (Ffetch_bytecode): No longer static.
> 	* editfns.c (Fuser_full_name): No longer static.
> 	* doc.c: (Fdocumentation_property, Fsnarf_documentation): No
> 	longer static.
> 	* buffer.c (Fset_buffer_major_mode, Fdelete_overlay): No longer
> 	static.
> 	* dired.c (Ffile_attributes): No longer static.
> 	* composite.c (Fcomposition_get_gstring): No longer static.
> 	* callproc.c (Fgetenv_internal): No longer static.

> 	* ccl.h: Remove EXFUNs.
> 	* buffer.h: Remove EXFUNs.
> 	* dispextern.h: Remove EXFUNs.
> 	* intervals.h: Remove EXFUNs.
> 	* fontset.h: Remove EXFUN.
> 	* font.h: Remove EXFUNs.
> 	* dosfns.c (system_process_attributes): Remove EXFUN.
> 	* keymap.h: Remove EXFUNs.
> 	* lisp.h: Remove EXFUNs.
> 	* w32term.h: Remove EXFUNs.
> 	* window.h: Remove EXFUNs.
> 	* xsettings.h: Remove EXFUN.
> 	* xterm.h: Remove EXFUN.

> diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
> index 8156db9..2a5f028 100644
> --- a/lib-src/make-docfile.c
> +++ b/lib-src/make-docfile.c
> @@ -564,6 +564,7 @@ write_c_args (FILE *out, char *func, char *buf, int minargs, int maxargs)
>  /* The types of globals.  */
>  enum global_type
>  {
> +  FUNCTION,
>    EMACS_INTEGER,
>    BOOLEAN,
>    LISP_OBJECT,
> @@ -575,6 +576,7 @@ struct global
>  {
>    enum global_type type;
>    char *name;
> +  int value;
>  };
 
>  /* All the variable names we saw while scanning C sources in `-g'
> @@ -584,7 +586,7 @@ int num_globals_allocated;
>  struct global *globals;
 
>  static void
> -add_global (enum global_type type, char *name)
> +add_global (enum global_type type, char *name, int value)
>  {
>    /* Ignore the one non-symbol that can occur.  */
>    if (strcmp (name, "..."))
> @@ -605,6 +607,7 @@ add_global (enum global_type type, char *name)
 
>        globals[num_globals - 1].type = type;
>        globals[num_globals - 1].name = name;
> +      globals[num_globals - 1].value = value;
>      }
>  }
 
> @@ -613,13 +616,29 @@ compare_globals (const void *a, const void *b)
>  {
>    const struct global *ga = a;
>    const struct global *gb = b;
> +
> +  if (ga->type == FUNCTION)
> +    {
> +      if (gb->type != FUNCTION)
> +	return 1;
> +    }
> +  else if (gb->type == FUNCTION)
> +    return -1;
> +
>    return strcmp (ga->name, gb->name);
>  }
 
>  static void
> +close_emacs_globals (void)
> +{
> +  fprintf (outfile, "};\n");
> +  fprintf (outfile, "extern struct emacs_globals globals;\n");
> +}
> +
> +static void
>  write_globals (void)
>  {
> -  int i;
> +  int i, seen_defun = 0;
>    qsort (globals, num_globals, sizeof (struct global), compare_globals);
>    for (i = 0; i < num_globals; ++i)
>      {
> @@ -636,20 +655,49 @@ write_globals (void)
>  	case LISP_OBJECT:
>  	  type = "Lisp_Object";
>  	  break;
> +	case FUNCTION:
> +	  if (!seen_defun)
> +	    {
> +	      close_emacs_globals ();
> +	      fprintf (outfile, "\n");
> +	      seen_defun = 1;
> +	    }
> +	  break;
>  	default:
>  	  fatal ("not a recognized DEFVAR_", 0);
>  	}
 
> -      fprintf (outfile, "  %s f_%s;\n", type, globals[i].name);
> -      fprintf (outfile, "#define %s globals.f_%s\n",
> -	       globals[i].name, globals[i].name);
> +      if (globals[i].type != FUNCTION)
> +	{
> +	  fprintf (outfile, "  %s f_%s;\n", type, globals[i].name);
> +	  fprintf (outfile, "#define %s globals.f_%s\n",
> +		   globals[i].name, globals[i].name);
> +	}
> +      else
> +	{
> +	  /* It would be nice to have a cleaner way to deal with these
> +	     special hacks.  */
> +	  if (strcmp (globals[i].name, "Fthrow") == 0
> +	      || strcmp (globals[i].name, "Ftop_level") == 0
> +	      || strcmp (globals[i].name, "Fkill_emacs") == 0)
> +	    fprintf (outfile, "_Noreturn ");
> +	  fprintf (outfile, "EXFUN (%s, ", globals[i].name);
> +	  if (globals[i].value == -1)
> +	    fprintf (outfile, "MANY");
> +	  else if (globals[i].value == -2)
> +	    fprintf (outfile, "UNEVALLED");
> +	  else
> +	    fprintf (outfile, "%d", globals[i].value);
> +	  fprintf (outfile, ");\n");
> +	}
> +
>        while (i + 1 < num_globals
>  	     && !strcmp (globals[i].name, globals[i + 1].name))
>  	++i;
>      }
 
> -  fprintf (outfile, "};\n");
> -  fprintf (outfile, "extern struct emacs_globals globals;\n");
> +  if (!seen_defun)
> +    close_emacs_globals ();
>  }
 
>  \f
> @@ -699,6 +747,7 @@ scan_c_file (char *filename, const char *mode)
>        int defvarperbufferflag = 0;
>        int defvarflag = 0;
>        enum global_type type = INVALID;
> +      char *name;
 
>        if (c != '\n' && c != '\r')
>  	{
> @@ -764,8 +813,9 @@ scan_c_file (char *filename, const char *mode)
>  	}
>        else continue;
 
> -      if (generate_globals && (!defvarflag || defvarperbufferflag
> -			       || type == INVALID))
> +      if (generate_globals
> +	  && (!defvarflag || defvarperbufferflag || type == INVALID)
> +	  && !defunflag)
>  	continue;
 
>        while (c != '(')
> @@ -784,7 +834,6 @@ scan_c_file (char *filename, const char *mode)
>        if (generate_globals)
>  	{
>  	  int i = 0;
> -	  char *name;
 
>  	  /* Skip "," and whitespace.  */
>  	  do
> @@ -805,8 +854,12 @@ scan_c_file (char *filename, const char *mode)
 
>  	  name = xmalloc (i + 1);
>  	  memcpy (name, input_buffer, i + 1);
> -	  add_global (type, name);
> -	  continue;
> +
> +	  if (!defunflag)
> +	    {
> +	      add_global (type, name, 0);
> +	      continue;
> +	    }
>  	}
 
>        /* DEFVAR_LISP ("name", addr, "doc")
> @@ -814,7 +867,7 @@ scan_c_file (char *filename, const char *mode)
>  	 DEFVAR_LISP ("name", addr, doc: /\* doc *\/)  */
 
>        if (defunflag)
> -	commas = 5;
> +	commas = generate_globals ? 4 : 5;
>        else if (defvarperbufferflag)
>  	commas = 3;
>        else if (defvarflag)
> @@ -841,7 +894,12 @@ scan_c_file (char *filename, const char *mode)
>  		    scanned = fscanf (infile, "%d", &minargs);
>  		  else /* Pick up maxargs.  */
>  		    if (c == 'M' || c == 'U') /* MANY || UNEVALLED */
> -		      maxargs = -1;
> +		      {
> +			if (generate_globals)
> +			  maxargs = (c == 'M') ? -1 : -2;
> +			else
> +			  maxargs = -1;
> +		      }
>  		    else
>  		      scanned = fscanf (infile, "%d", &maxargs);
>  		  if (scanned < 0)
> @@ -854,6 +912,12 @@ scan_c_file (char *filename, const char *mode)
>  	  c = getc (infile);
>  	}
 
> +      if (generate_globals)
> +	{
> +	  add_global (FUNCTION, name, maxargs);
> +	  continue;
> +	}
> +
>        while (c == ' ' || c == '\n' || c == '\r' || c == '\t')
>  	c = getc (infile);
 
> diff --git a/src/buffer.c b/src/buffer.c
> index 89a4e26..936f1a7 100644
> --- a/src/buffer.c
> +++ b/src/buffer.c
> @@ -107,8 +107,6 @@ static char buffer_permanent_local_flags[MAX_PER_BUFFER_VARS];
 
>  int last_per_buffer_idx;
 
> -static Lisp_Object Fset_buffer_major_mode (Lisp_Object);
> -static Lisp_Object Fdelete_overlay (Lisp_Object);
>  static void call_overlay_mod_hooks (Lisp_Object list, Lisp_Object overlay,
>                                      int after, Lisp_Object arg1,
>                                      Lisp_Object arg2, Lisp_Object arg3);
> diff --git a/src/buffer.h b/src/buffer.h
> index b1ace46..a12406d 100644
> --- a/src/buffer.h
> +++ b/src/buffer.h
> @@ -909,11 +909,6 @@ extern void mmap_set_vars (int);
>        }									\
>    } while (0)
 
> -EXFUN (Fbuffer_live_p, 1);
> -EXFUN (Fbuffer_name, 1);
> -EXFUN (Fnext_overlay_change, 1);
> -EXFUN (Fbuffer_local_value, 2);
> -
>  extern Lisp_Object Qbefore_change_functions;
>  extern Lisp_Object Qafter_change_functions;
>  extern Lisp_Object Qfirst_change_hook;
> diff --git a/src/callproc.c b/src/callproc.c
> index 804af1e..7078099 100644
> --- a/src/callproc.c
> +++ b/src/callproc.c
> @@ -97,8 +97,6 @@ int synch_process_retcode;
>  /* Nonzero if this is termination due to exit.  */
>  static int call_process_exited;
 
> -static Lisp_Object Fgetenv_internal (Lisp_Object, Lisp_Object);
> -
>  static Lisp_Object
>  call_process_kill (Lisp_Object fdpid)
>  {
> diff --git a/src/ccl.h b/src/ccl.h
> index f55b295..7113917 100644
> --- a/src/ccl.h
> +++ b/src/ccl.h
> @@ -1,6 +1,6 @@
>  /* Header for CCL (Code Conversion Language) interpreter.
>     Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
> -     2005, 2006, 2007, 2008, 2009, 2010, 2011
> +     2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
>       National Institute of Advanced Industrial Science and Technology (AIST)
>       Registration Number H14PRO021
>     Copyright (C) 2003
> @@ -101,8 +101,6 @@ extern void ccl_driver (struct ccl_program *, int *, int *, int, int,
 
>  extern Lisp_Object Qccl, Qcclp;
 
> -EXFUN (Fccl_program_p, 1);
> -
>  #define CHECK_CCL_PROGRAM(x)			\
>    do {						\
>      if (NILP (Fccl_program_p (x)))		\
> diff --git a/src/composite.c b/src/composite.c
> index 79942ac..6c24bc8 100644
> --- a/src/composite.c
> +++ b/src/composite.c
> @@ -158,9 +158,6 @@ static Lisp_Object Qauto_composition_function;
>     auto-compositions.  */
>  #define MAX_AUTO_COMPOSITION_LOOKBACK 3
 
> -static Lisp_Object Fcomposition_get_gstring (Lisp_Object, Lisp_Object,
> -					     Lisp_Object, Lisp_Object);
> -
>  /* Temporary variable used in macros COMPOSITION_XXX.  */
>  Lisp_Object composition_temp;
 
> diff --git a/src/dired.c b/src/dired.c
> index b319072..48d3da1 100644
> --- a/src/dired.c
> +++ b/src/dired.c
> @@ -88,7 +88,6 @@ static Lisp_Object Qfile_attributes;
>  static Lisp_Object Qfile_attributes_lessp;
 
>  static ptrdiff_t scmp (const char *, const char *, ptrdiff_t);
> -static Lisp_Object Ffile_attributes (Lisp_Object, Lisp_Object);
>  \f
>  #ifdef WINDOWSNT
>  Lisp_Object
> diff --git a/src/dispextern.h b/src/dispextern.h
> index c7adc4d..4672d10 100644
> --- a/src/dispextern.h
> +++ b/src/dispextern.h
> @@ -3244,7 +3244,6 @@ void x_implicitly_set_name (struct frame *, Lisp_Object, Lisp_Object);
 
>  extern Lisp_Object tip_frame;
>  extern Window tip_window;
> -EXFUN (Fx_hide_tip, 0);
>  extern void start_hourglass (void);
>  extern void cancel_hourglass (void);
>  extern int hourglass_shown_p;
> @@ -3356,8 +3355,6 @@ extern void produce_special_glyphs (struct it *, enum display_element_type);
>  extern int tty_capable_p (struct tty_display_info *, unsigned, unsigned long, unsigned long);
>  extern void set_tty_color_mode (struct tty_display_info *, struct frame *);
>  extern struct terminal *get_named_tty (const char *);
> -EXFUN (Ftty_type, 1);
> -EXFUN (Fcontrolling_tty_p, 1);
>  extern void create_tty_output (struct frame *);
>  extern struct terminal *init_tty (const char *, const char *, int);
>  extern void tty_append_glyph (struct it *);
> diff --git a/src/doc.c b/src/doc.c
> index cbfeb06..6c532e3 100644
> --- a/src/doc.c
> +++ b/src/doc.c
> @@ -42,9 +42,6 @@ static char *get_doc_string_buffer;
>  static ptrdiff_t get_doc_string_buffer_size;
 
>  static unsigned char *read_bytecode_pointer;
> -static Lisp_Object Fdocumentation_property (Lisp_Object, Lisp_Object,
> -					    Lisp_Object);
> -static Lisp_Object Fsnarf_documentation (Lisp_Object);
 
>  /* readchar in lread.c calls back here to fetch the next byte.
>     If UNREADFLAG is 1, we unread a byte.  */
> diff --git a/src/dosfns.c b/src/dosfns.c
> index 11d2258..a952215 100644
> --- a/src/dosfns.c
> +++ b/src/dosfns.c
> @@ -540,7 +540,6 @@ system_process_attributes (Lisp_Object pid)
>        int i;
>        Lisp_Object cmd_str, decoded_cmd, tem;
>        double pmem;
> -      EXFUN (Fget_internal_run_time, 0);
>  #ifndef SYSTEM_MALLOC
>        extern unsigned long ret_lim_data ();
>  #endif
> diff --git a/src/editfns.c b/src/editfns.c
> index 4c3b80b..8812ed9 100644
> --- a/src/editfns.c
> +++ b/src/editfns.c
> @@ -79,7 +79,6 @@ static int tm_diff (struct tm *, struct tm *);
>  static void update_buffer_properties (ptrdiff_t, ptrdiff_t);
 
>  static Lisp_Object Qbuffer_access_fontify_functions;
> -static Lisp_Object Fuser_full_name (Lisp_Object);
 
>  /* Symbol for the text property used to mark fields.  */
 
> diff --git a/src/eval.c b/src/eval.c
> index bff9974..906adb8 100644
> --- a/src/eval.c
> +++ b/src/eval.c
> @@ -133,7 +133,6 @@ Lisp_Object inhibit_lisp_code;
>  static Lisp_Object funcall_lambda (Lisp_Object, ptrdiff_t, Lisp_Object *);
>  static int interactive_p (int);
>  static Lisp_Object apply_lambda (Lisp_Object fun, Lisp_Object args);
> -static Lisp_Object Ffetch_bytecode (Lisp_Object);
>  \f
>  void
>  init_eval_once (void)
> diff --git a/src/fileio.c b/src/fileio.c
> index 824a921..9429570 100644
> --- a/src/fileio.c
> +++ b/src/fileio.c
> @@ -148,7 +148,6 @@ Lisp_Object Qfile_name_history;
 
>  static Lisp_Object Qcar_less_than_car;
 
> -static Lisp_Object Fmake_symbolic_link (Lisp_Object, Lisp_Object, Lisp_Object);
>  static int a_write (int, Lisp_Object, ptrdiff_t, ptrdiff_t,
>                      Lisp_Object *, struct coding_system *);
>  static int e_write (int, Lisp_Object, ptrdiff_t, ptrdiff_t,
> diff --git a/src/font.h b/src/font.h
> index b058be6..adb2566 100644
> --- a/src/font.h
> +++ b/src/font.h
> @@ -734,13 +734,8 @@ struct font_data_list
>    struct font_data_list *next;
>  };
 
> -EXFUN (Ffont_spec, MANY);
>  extern Lisp_Object copy_font_spec (Lisp_Object);
>  extern Lisp_Object merge_font_spec (Lisp_Object, Lisp_Object);
> -EXFUN (Ffont_get, 2);
> -EXFUN (Ffont_put, 3);
> -EXFUN (Flist_fonts, 4);
> -EXFUN (Ffont_xlfd_name, 2);
 
>  extern Lisp_Object font_make_entity (void);
>  extern Lisp_Object font_make_object (int, Lisp_Object, int);
> diff --git a/src/fontset.h b/src/fontset.h
> index 6d6ad5d..3eb8d63 100644
> --- a/src/fontset.h
> +++ b/src/fontset.h
> @@ -39,7 +39,6 @@ extern Lisp_Object font_for_char (struct face *, int, int, Lisp_Object);
>  extern int make_fontset_for_ascii_face (FRAME_PTR, int, struct face *);
>  extern int fontset_from_font (Lisp_Object);
>  extern int fs_query_fontset (Lisp_Object, int);
> -EXFUN (Fquery_fontset, 2);
>  extern Lisp_Object list_fontsets (struct frame *, Lisp_Object, int);
 
>  extern Lisp_Object Qlatin;
> diff --git a/src/image.c b/src/image.c
> index 9b1c7f1..d67faff 100644
> --- a/src/image.c
> +++ b/src/image.c
> @@ -138,7 +138,6 @@ static unsigned long lookup_rgb_color (struct frame *f, int r, int g, int b);
>  static void free_color_table (void);
>  static unsigned long *colors_in_color_table (int *n);
>  #endif
> -static Lisp_Object Finit_image_library (Lisp_Object, Lisp_Object);
 
>  /* Code to deal with bitmaps.  Bitmaps are referenced by their bitmap
>     id, which is just an int that this section returns.  Bitmaps are
> diff --git a/src/insdel.c b/src/insdel.c
> index 060f83f..2074916 100644
> --- a/src/insdel.c
> +++ b/src/insdel.c
> @@ -41,8 +41,6 @@ static void insert_from_buffer_1 (struct buffer *buf,
>  static void gap_left (ptrdiff_t charpos, ptrdiff_t bytepos, int newgap);
>  static void gap_right (ptrdiff_t charpos, ptrdiff_t bytepos);
 
> -static Lisp_Object Fcombine_after_change_execute (void);
> -
>  /* List of elements of the form (BEG-UNCHANGED END-UNCHANGED CHANGE-AMOUNT)
>     describing changes which happened while combine_after_change_calls
>     was nonzero.  We use this to decide how to call them
> diff --git a/src/intervals.h b/src/intervals.h
> index 6a2a8c9..8d2ee83 100644
> --- a/src/intervals.h
> +++ b/src/intervals.h
> @@ -308,16 +308,6 @@ extern Lisp_Object Qinvisible, Qintangible;
>  /* Sticky properties.  */
>  extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
 
> -EXFUN (Fget_char_property, 3);
> -EXFUN (Fget_text_property, 3);
> -EXFUN (Ftext_properties_at, 2);
> -EXFUN (Fnext_property_change, 3);
> -EXFUN (Fadd_text_properties, 4);
> -EXFUN (Fset_text_properties, 4);
> -EXFUN (Fremove_text_properties, 4);
> -EXFUN (Fremove_list_of_text_properties, 4);
> -EXFUN (Ftext_property_any, 5);
> -EXFUN (Fprevious_single_char_property_change, 4);
>  extern Lisp_Object copy_text_properties (Lisp_Object, Lisp_Object,
>                                           Lisp_Object, Lisp_Object,
>                                           Lisp_Object, Lisp_Object);
> diff --git a/src/keyboard.c b/src/keyboard.c
> index fccef03..65b7d53 100644
> --- a/src/keyboard.c
> +++ b/src/keyboard.c
> @@ -459,8 +459,6 @@ static void interrupt_signal (int signalnum);
>  #ifdef SIGIO
>  static void input_available_signal (int signo);
>  #endif
> -static Lisp_Object (Fcommand_execute) (Lisp_Object, Lisp_Object, Lisp_Object,
> -				       Lisp_Object);
>  static void handle_interrupt (void);
>  static _Noreturn void quit_throw_to_read_char (int);
>  static void process_special_events (void);
> @@ -1324,7 +1322,6 @@ cancel_hourglass_unwind (Lisp_Object arg)
>  /* FIXME: This is wrong rather than test window-system, we should call
>     a new set-selection, which will then dispatch to x-set-selection, or
>     tty-set-selection, or w32-set-selection, ...  */
> -EXFUN (Fwindow_system, 1);
 
>  Lisp_Object
>  command_loop_1 (void)
> diff --git a/src/keymap.c b/src/keymap.c
> index 6c59a4a..db4d5d1 100644
> --- a/src/keymap.c
> +++ b/src/keymap.c
> @@ -92,7 +92,6 @@ static Lisp_Object where_is_cache;
>  /* Which keymaps are reverse-stored in the cache.  */
>  static Lisp_Object where_is_cache_keymaps;
 
> -static Lisp_Object Flookup_key (Lisp_Object, Lisp_Object, Lisp_Object);
>  static Lisp_Object store_in_keymap (Lisp_Object, Lisp_Object, Lisp_Object);
 
>  static Lisp_Object define_as_prefix (Lisp_Object, Lisp_Object);
> @@ -956,8 +955,6 @@ store_in_keymap (Lisp_Object keymap, register Lisp_Object idx, Lisp_Object def)
>    return def;
>  }
 
> -static Lisp_Object Fcopy_keymap (Lisp_Object);
> -
>  static Lisp_Object
>  copy_keymap_item (Lisp_Object elt)
>  {
> diff --git a/src/keymap.h b/src/keymap.h
> index d9334cd..5ed70c6 100644
> --- a/src/keymap.h
> +++ b/src/keymap.h
> @@ -34,19 +34,9 @@ extern Lisp_Object Qkeymap, Qmenu_bar;
>  extern Lisp_Object Qremap;
>  extern Lisp_Object Qmenu_item;
>  extern Lisp_Object current_global_map;
> -EXFUN (Fmake_sparse_keymap, 1);
> -EXFUN (Fkeymap_prompt, 1);
> -EXFUN (Fdefine_key, 3);
> -EXFUN (Fcommand_remapping, 3);
> -EXFUN (Fkey_binding, 4);
> -EXFUN (Fkey_description, 2);
>  extern char *push_key_description (EMACS_INT, char *, int);
> -EXFUN (Fsingle_key_description, 2);
> -EXFUN (Fwhere_is_internal, 5);
> -EXFUN (Fcurrent_active_maps, 2);
>  extern Lisp_Object access_keymap (Lisp_Object, Lisp_Object, int, int, int);
>  extern Lisp_Object get_keymap (Lisp_Object, int, int);
> -EXFUN (Fset_keymap_parent, 2);
>  extern void describe_map_tree (Lisp_Object, int, Lisp_Object, Lisp_Object,
>  			      const char *, int, int, int, int);
>  extern ptrdiff_t current_minor_maps (Lisp_Object **, Lisp_Object **);
> diff --git a/src/lisp.h b/src/lisp.h
> index cac5370..ed7b69a 100644
> --- a/src/lisp.h
> +++ b/src/lisp.h
> @@ -2308,56 +2308,12 @@ extern Lisp_Object Qinteger;
 
>  extern Lisp_Object Qfont_spec, Qfont_entity, Qfont_object;
 
> -EXFUN (Finteractive_form, 1);
> -EXFUN (Fbyteorder, 0);
> -
>  /* Defined in frame.c */
>  extern Lisp_Object Qframep;
 
>  /* Defined in data.c */
> -EXFUN (Fcar, 1);
> -EXFUN (Fcar_safe, 1);
> -EXFUN (Fcdr, 1);
> -EXFUN (Fcdr_safe, 1);
> -EXFUN (Fsetcar, 2);
> -EXFUN (Fsetcdr, 2);
> -EXFUN (Fboundp, 1);
> -EXFUN (Ffboundp, 1);
> -EXFUN (Fsymbol_function, 1);
> -EXFUN (Fsymbol_name, 1);
>  extern Lisp_Object indirect_function (Lisp_Object);
> -EXFUN (Findirect_function, 2);
> -EXFUN (Ffset, 2);
> -EXFUN (Fsymbol_value, 1);
>  extern Lisp_Object find_symbol_value (Lisp_Object);
> -EXFUN (Fset, 2);
> -EXFUN (Fdefault_value, 1);
> -EXFUN (Fset_default, 2);
> -EXFUN (Fdefault_boundp, 1);
> -EXFUN (Fmake_local_variable, 1);
> -EXFUN (Flocal_variable_p, 2);
> -
> -EXFUN (Faref, 2);
> -EXFUN (Faset, 3);
> -
> -EXFUN (Fstring_to_number, 2);
> -EXFUN (Fnumber_to_string, 1);
> -EXFUN (Fgtr, 2);
> -EXFUN (Flss, 2);
> -EXFUN (Fgeq, 2);
> -EXFUN (Fleq, 2);
> -EXFUN (Fzerop, 1);
> -EXFUN (Fplus, MANY);
> -EXFUN (Fminus, MANY);
> -EXFUN (Ftimes, MANY);
> -EXFUN (Fquo, MANY);
> -EXFUN (Frem, 2);
> -EXFUN (Fmax, MANY);
> -EXFUN (Fmin, MANY);
> -
> -EXFUN (Fadd1, 1);
> -EXFUN (Fsub1, 1);
> -EXFUN (Fmake_variable_buffer_local, 1);
 
>  /* Convert the integer I to an Emacs representation, either the integer
>     itself, or a cons of two or three integers, or if all else fails a float.
> @@ -2399,22 +2355,11 @@ extern void init_data (void);
>  extern void swap_in_global_binding (struct Lisp_Symbol *);
 
>  /* Defined in cmds.c */
> -EXFUN (Fend_of_line, 1);
> -EXFUN (Fforward_char, 1);
> -EXFUN (Fforward_line, 1);
>  extern void syms_of_cmds (void);
>  extern void keys_of_cmds (void);
 
>  /* Defined in coding.c */
>  extern Lisp_Object Qcharset;
> -EXFUN (Fcoding_system_p, 1);
> -EXFUN (Fcoding_system_base, 1);
> -EXFUN (Fcoding_system_eol_type, 1);
> -EXFUN (Fcheck_coding_system, 1);
> -EXFUN (Fread_coding_system, 2);
> -EXFUN (Fread_non_nil_coding_system, 1);
> -EXFUN (Ffind_operation_coding_system, MANY);
> -EXFUN (Fdecode_coding_string, 4);
>  extern Lisp_Object detect_coding_system (const unsigned char *, ptrdiff_t,
>                                           ptrdiff_t, int, int, Lisp_Object);
>  extern void init_coding (void);
> @@ -2422,8 +2367,6 @@ extern void init_coding_once (void);
>  extern void syms_of_coding (void);
 
>  /* Defined in character.c */
> -EXFUN (Fchar_width, 1);
> -EXFUN (Fstring, MANY);
>  extern ptrdiff_t chars_in_text (const unsigned char *, ptrdiff_t);
>  extern ptrdiff_t multibyte_chars_in_text (const unsigned char *, ptrdiff_t);
>  extern int multibyte_char_to_unibyte (int);
> @@ -2442,9 +2385,6 @@ struct charset;
>  extern void syms_of_composite (void);
 
>  /* Defined in syntax.c */
> -EXFUN (Fforward_word, 1);
> -EXFUN (Fskip_chars_forward, 2);
> -EXFUN (Fskip_chars_backward, 2);
>  extern void init_syntax_once (void);
>  extern void syms_of_syntax (void);
 
> @@ -2467,46 +2407,10 @@ ptrdiff_t hash_put (struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object,
>  		    EMACS_UINT);
>  void init_weak_hash_tables (void);
>  extern void init_fns (void);
> -EXFUN (Fmake_hash_table, MANY);
> -EXFUN (Fgethash, 3);
> -EXFUN (Fputhash, 3);
> -EXFUN (Fremhash, 2);
> -
> -EXFUN (Fidentity, 1);
> -EXFUN (Flength, 1);
> -EXFUN (Fappend, MANY);
> -EXFUN (Fconcat, MANY);
> -EXFUN (Fvconcat, MANY);
> -EXFUN (Fcopy_sequence, 1);
> -EXFUN (Fstring_make_multibyte, 1);
> -EXFUN (Fstring_make_unibyte, 1);
> -EXFUN (Fstring_as_multibyte, 1);
> -EXFUN (Fstring_as_unibyte, 1);
> -EXFUN (Fstring_to_multibyte, 1);
> -EXFUN (Fsubstring, 3);
> +
>  extern Lisp_Object substring_both (Lisp_Object, ptrdiff_t, ptrdiff_t,
>  				   ptrdiff_t, ptrdiff_t);
> -EXFUN (Fnth, 2);
> -EXFUN (Fnthcdr, 2);
> -EXFUN (Fmemq, 2);
> -EXFUN (Fassq, 2);
> -EXFUN (Fassoc, 2);
> -EXFUN (Felt, 2);
> -EXFUN (Fmember, 2);
> -EXFUN (Frassq, 2);
> -EXFUN (Fdelq, 2);
> -EXFUN (Fdelete, 2);
> -EXFUN (Fsort, 2);
> -EXFUN (Freverse, 1);
> -EXFUN (Fnreverse, 1);
> -EXFUN (Fget, 2);
> -EXFUN (Fput, 3);
> -EXFUN (Fequal, 2);
> -EXFUN (Fnconc, MANY);
> -EXFUN (Fmapcar, 2);
> -EXFUN (Fmapconcat, 3);
>  extern Lisp_Object do_yes_or_no_p (Lisp_Object);
> -EXFUN (Fprovide, 2);
>  extern Lisp_Object concat2 (Lisp_Object, Lisp_Object);
>  extern Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object);
>  extern Lisp_Object nconc2 (Lisp_Object, Lisp_Object);
> @@ -2517,20 +2421,10 @@ extern ptrdiff_t string_char_to_byte (Lisp_Object, ptrdiff_t);
>  extern ptrdiff_t string_byte_to_char (Lisp_Object, ptrdiff_t);
>  extern Lisp_Object string_to_multibyte (Lisp_Object);
>  extern Lisp_Object string_make_unibyte (Lisp_Object);
> -EXFUN (Fcopy_alist, 1);
> -EXFUN (Fplist_get, 2);
> -EXFUN (Fplist_put, 3);
> -EXFUN (Fplist_member, 2);
> -EXFUN (Frassoc, 2);
> -EXFUN (Fstring_equal, 2);
> -EXFUN (Fcompare_strings, 7);
> -EXFUN (Fstring_lessp, 2);
>  extern void syms_of_fns (void);
 
>  /* Defined in floatfns.c */
>  extern double extract_float (Lisp_Object);
> -EXFUN (Ffloat, 1);
> -EXFUN (Ftruncate, 2);
>  extern void init_floatfns (void);
>  extern void syms_of_floatfns (void);
>  extern Lisp_Object fmod_float (Lisp_Object x, Lisp_Object y);
> @@ -2603,11 +2497,7 @@ _Noreturn void __executable_start (void);
>  #endif
>  extern Lisp_Object selected_frame;
>  extern Lisp_Object Vwindow_system;
> -EXFUN (Fding, 1);
> -EXFUN (Fredraw_frame, 1);
>  void duration_to_sec_usec (double, int *, int *);
> -EXFUN (Fsleep_for, 2);
> -EXFUN (Fredisplay, 1);
>  extern Lisp_Object sit_for (Lisp_Object, int, int);
>  extern void init_display (void);
>  extern void syms_of_display (void);
> @@ -2684,22 +2574,14 @@ extern void refill_memory_reserve (void);
>  #endif
>  extern const char *pending_malloc_warning;
>  extern Lisp_Object *stack_base;
> -EXFUN (Fcons, 2);
>  extern Lisp_Object list1 (Lisp_Object);
>  extern Lisp_Object list2 (Lisp_Object, Lisp_Object);
>  extern Lisp_Object list3 (Lisp_Object, Lisp_Object, Lisp_Object);
>  extern Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
>  extern Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
>  			  Lisp_Object);
> -EXFUN (Flist, MANY);
> -EXFUN (Fmake_list, 2);
>  extern Lisp_Object allocate_misc (void);
> -EXFUN (Fmake_vector, 2);
> -EXFUN (Fvector, MANY);
> -EXFUN (Fmake_symbol, 1);
> -EXFUN (Fmake_marker, 0);
>  extern _Noreturn void string_overflow (void);
> -EXFUN (Fmake_string, 2);
>  extern Lisp_Object make_string (const char *, ptrdiff_t);
>  extern Lisp_Object make_unibyte_string (const char *, ptrdiff_t);
>  extern Lisp_Object make_multibyte_string (const char *, ptrdiff_t, ptrdiff_t);
> @@ -2709,7 +2591,6 @@ extern Lisp_Object make_uninit_multibyte_string (EMACS_INT, EMACS_INT);
>  extern Lisp_Object make_string_from_bytes (const char *, ptrdiff_t, ptrdiff_t);
>  extern Lisp_Object make_specified_string (const char *,
>  					  ptrdiff_t, ptrdiff_t, int);
> -EXFUN (Fpurecopy, 1);
>  extern Lisp_Object make_pure_string (const char *, ptrdiff_t, ptrdiff_t, int);
>  extern Lisp_Object make_pure_c_string (const char *data);
 
> @@ -2723,10 +2604,7 @@ build_string (const char *str)
>  }
 
>  extern Lisp_Object pure_cons (Lisp_Object, Lisp_Object);
> -EXFUN (Fgarbage_collect, 0);
>  extern void make_byte_code (struct Lisp_Vector *);
> -EXFUN (Fmake_byte_code, MANY);
> -EXFUN (Fmake_bool_vector, 2);
>  extern Lisp_Object Qchar_table_extra_slots;
>  extern struct Lisp_Vector *allocate_vector (EMACS_INT);
>  extern struct Lisp_Vector *allocate_pseudovector (int memlen, int lisplen, int tag);
> @@ -2763,12 +2641,6 @@ extern void r_alloc_inhibit_buffer_relocation (int);
>  #endif
 
>  /* Defined in chartab.c */
> -EXFUN (Fmake_char_table, 2);
> -EXFUN (Fset_char_table_parent, 2);
> -EXFUN (Fchar_table_extra_slot, 2);
> -EXFUN (Fset_char_table_extra_slot, 3);
> -EXFUN (Fset_char_table_range, 3);
> -EXFUN (Foptimize_char_table, 2);
>  extern Lisp_Object copy_char_table (Lisp_Object);
>  extern Lisp_Object char_table_ref (Lisp_Object, int);
>  extern Lisp_Object char_table_ref_and_range (Lisp_Object, int,
> @@ -2790,11 +2662,6 @@ extern void syms_of_chartab (void);
>  /* Defined in print.c */
>  extern Lisp_Object Vprin1_to_string_buffer;
>  extern void debug_print (Lisp_Object) EXTERNALLY_VISIBLE;
> -EXFUN (Fprin1, 2);
> -EXFUN (Fprin1_to_string, 2);
> -EXFUN (Fterpri, 1);
> -EXFUN (Fprint, 2);
> -EXFUN (Ferror_message_string, 1);
>  extern Lisp_Object Qstandard_output;
>  extern Lisp_Object Qexternal_debugging_output;
>  extern void temp_output_buffer_setup (const char *);
> @@ -2824,15 +2691,6 @@ extern ptrdiff_t evxprintf (char **, ptrdiff_t *, char const *, ptrdiff_t,
>  /* Defined in lread.c.  */
>  extern Lisp_Object Qvariable_documentation, Qstandard_input;
>  extern Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction;
> -EXFUN (Fread, 1);
> -EXFUN (Fread_from_string, 3);
> -EXFUN (Fintern, 2);
> -EXFUN (Fintern_soft, 2);
> -EXFUN (Funintern, 2);
> -EXFUN (Fload, 5);
> -EXFUN (Fget_load_suffixes, 0);
> -EXFUN (Fread_char, 3);
> -EXFUN (Fread_event, 3);
>  extern Lisp_Object check_obarray (Lisp_Object);
>  extern Lisp_Object intern (const char *);
>  extern Lisp_Object intern_c_string (const char *);
> @@ -2872,17 +2730,10 @@ extern struct handler *handlerlist;
 
>     should no longer be used.  */
>  extern Lisp_Object Vrun_hooks;
> -EXFUN (Frun_hooks, MANY);
> -EXFUN (Frun_hook_with_args, MANY);
> -EXFUN (Frun_hook_with_args_until_failure, MANY);
>  extern void run_hook_with_args_2 (Lisp_Object, Lisp_Object, Lisp_Object);
>  extern Lisp_Object run_hook_with_args (ptrdiff_t nargs, Lisp_Object *args,
>  				       Lisp_Object (*funcall)
>  				       (ptrdiff_t nargs, Lisp_Object *args));
> -EXFUN (Fprogn, UNEVALLED);
> -EXFUN (Finteractive_p, 0);
> -_Noreturn EXFUN (Fthrow, 2);
> -EXFUN (Fsignal, 2);
>  extern _Noreturn void xsignal (Lisp_Object, Lisp_Object);
>  extern _Noreturn void xsignal0 (Lisp_Object);
>  extern _Noreturn void xsignal1 (Lisp_Object, Lisp_Object);
> @@ -2890,12 +2741,7 @@ extern _Noreturn void xsignal2 (Lisp_Object, Lisp_Object, Lisp_Object);
>  extern _Noreturn void xsignal3 (Lisp_Object, Lisp_Object, Lisp_Object,
>  				Lisp_Object);
>  extern _Noreturn void signal_error (const char *, Lisp_Object);
> -EXFUN (Fcommandp, 2);
> -EXFUN (Ffunctionp, 1);
> -EXFUN (Feval, 2);
>  extern Lisp_Object eval_sub (Lisp_Object form);
> -EXFUN (Fapply, MANY);
> -EXFUN (Ffuncall, MANY);
>  extern Lisp_Object apply1 (Lisp_Object, Lisp_Object);
>  extern Lisp_Object call0 (Lisp_Object);
>  extern Lisp_Object call1 (Lisp_Object, Lisp_Object);
> @@ -2905,7 +2751,6 @@ extern Lisp_Object call4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Li
>  extern Lisp_Object call5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
>  extern Lisp_Object call6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
>  extern Lisp_Object call7 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
> -EXFUN (Fdo_auto_save, 2);
>  extern Lisp_Object internal_catch (Lisp_Object, Lisp_Object (*) (Lisp_Object), Lisp_Object);
>  extern Lisp_Object internal_lisp_condition_case (Lisp_Object, Lisp_Object, Lisp_Object);
>  extern Lisp_Object internal_condition_case (Lisp_Object (*) (void), Lisp_Object, Lisp_Object (*) (Lisp_Object));
> @@ -2932,57 +2777,24 @@ extern void syms_of_eval (void);
 
>  /* Defined in editfns.c */
>  extern Lisp_Object Qfield;
> -EXFUN (Fcurrent_message, 0);
> -EXFUN (Fgoto_char, 1);
> -EXFUN (Fpoint_max_marker, 0);
> -EXFUN (Fpoint, 0);
> -EXFUN (Fpoint_marker, 0);
> -EXFUN (Fline_beginning_position, 1);
> -EXFUN (Fline_end_position, 1);
> -EXFUN (Ffollowing_char, 0);
> -EXFUN (Fprevious_char, 0);
> -EXFUN (Fchar_after, 1);
> -EXFUN (Finsert, MANY);
> -EXFUN (Finsert_char, 3);
>  extern void insert1 (Lisp_Object);
> -EXFUN (Feolp, 0);
> -EXFUN (Feobp, 0);
> -EXFUN (Fbolp, 0);
> -EXFUN (Fbobp, 0);
> -EXFUN (Fformat, MANY);
> -EXFUN (Fmessage, MANY);
>  extern Lisp_Object format2 (const char *, Lisp_Object, Lisp_Object);
> -EXFUN (Fbuffer_substring, 2);
> -EXFUN (Fbuffer_string, 0);
>  extern Lisp_Object save_excursion_save (void);
>  extern Lisp_Object save_restriction_save (void);
>  extern Lisp_Object save_excursion_restore (Lisp_Object);
>  extern Lisp_Object save_restriction_restore (Lisp_Object);
> -EXFUN (Fchar_to_string, 1);
> -EXFUN (Fdelete_region, 2);
> -EXFUN (Fnarrow_to_region, 2);
> -EXFUN (Fwiden, 0);
> -EXFUN (Fuser_login_name, 1);
> -EXFUN (Fsystem_name, 0);
>  extern _Noreturn void time_overflow (void);
> -EXFUN (Fcurrent_time, 0);
> -EXFUN (Fget_internal_run_time, 0);
>  extern Lisp_Object make_buffer_string (ptrdiff_t, ptrdiff_t, int);
>  extern Lisp_Object make_buffer_string_both (ptrdiff_t, ptrdiff_t, ptrdiff_t,
>  					    ptrdiff_t, int);
>  extern void init_editfns (void);
>  const char *get_system_name (void);
>  extern void syms_of_editfns (void);
> -EXFUN (Fconstrain_to_field, 5);
> -EXFUN (Ffield_end, 3);
>  extern void set_time_zone_rule (const char *);
 
>  /* Defined in buffer.c */
>  extern int mouse_face_overlay_overlaps (Lisp_Object);
>  extern _Noreturn void nsberror (Lisp_Object);
> -EXFUN (Fset_buffer_multibyte, 1);
> -EXFUN (Foverlay_start, 1);
> -EXFUN (Foverlay_end, 1);
>  extern void adjust_overlays_for_insert (ptrdiff_t, ptrdiff_t);
>  extern void adjust_overlays_for_delete (ptrdiff_t, ptrdiff_t);
>  extern void fix_start_end_in_overlays (ptrdiff_t, ptrdiff_t);
> @@ -2990,27 +2802,11 @@ extern void report_overlay_modification (Lisp_Object, Lisp_Object, int,
>                                           Lisp_Object, Lisp_Object, Lisp_Object);
>  extern int overlay_touches_p (ptrdiff_t);
>  extern Lisp_Object Vbuffer_alist;
> -EXFUN (Fget_buffer, 1);
> -EXFUN (Fget_buffer_create, 1);
> -EXFUN (Fgenerate_new_buffer_name, 2);
> -EXFUN (Fset_buffer, 1);
>  extern Lisp_Object set_buffer_if_live (Lisp_Object);
> -EXFUN (Fbarf_if_buffer_read_only, 0);
> -EXFUN (Fcurrent_buffer, 0);
> -EXFUN (Fother_buffer, 3);
>  extern Lisp_Object other_buffer_safely (Lisp_Object);
> -EXFUN (Foverlay_get, 2);
> -EXFUN (Fbuffer_modified_p, 1);
> -EXFUN (Fset_buffer_modified_p, 1);
> -EXFUN (Fkill_buffer, 1);
> -EXFUN (Fkill_all_local_variables, 0);
> -EXFUN (Fbuffer_enable_undo, 1);
> -EXFUN (Ferase_buffer, 0);
>  extern Lisp_Object Qpriority, Qwindow, Qbefore_string, Qafter_string;
>  extern Lisp_Object get_truename_buffer (Lisp_Object);
>  extern struct buffer *all_buffers;
> -EXFUN (Fprevious_overlay_change, 1);
> -EXFUN (Fbuffer_file_name, 1);
>  extern void init_buffer_once (void);
>  extern void init_buffer (void);
>  extern void syms_of_buffer (void);
> @@ -3018,10 +2814,6 @@ extern void keys_of_buffer (void);
 
>  /* Defined in marker.c */
 
> -EXFUN (Fmarker_position, 1);
> -EXFUN (Fmarker_buffer, 1);
> -EXFUN (Fcopy_marker, 2);
> -EXFUN (Fset_marker, 3);
>  extern ptrdiff_t marker_position (Lisp_Object);
>  extern ptrdiff_t marker_byte_position (Lisp_Object);
>  extern void clear_charpos_cache (struct buffer *);
> @@ -3042,24 +2834,7 @@ extern Lisp_Object Qfile_exists_p;
>  extern Lisp_Object Qfile_directory_p;
>  extern Lisp_Object Qinsert_file_contents;
>  extern Lisp_Object Qfile_name_history;
> -EXFUN (Ffind_file_name_handler, 2);
> -EXFUN (Ffile_name_as_directory, 1);
> -EXFUN (Fexpand_file_name, 2);
> -EXFUN (Ffile_name_nondirectory, 1);
> -EXFUN (Fsubstitute_in_file_name, 1);
> -EXFUN (Ffile_symlink_p, 1);
> -EXFUN (Fverify_visited_file_modtime, 1);
> -EXFUN (Ffile_exists_p, 1);
> -EXFUN (Ffile_name_absolute_p, 1);
> -EXFUN (Fdirectory_file_name, 1);
> -EXFUN (Ffile_name_directory, 1);
>  extern Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
> -EXFUN (Ffile_accessible_directory_p, 1);
> -EXFUN (Funhandled_file_name_directory, 1);
> -EXFUN (Ffile_directory_p, 1);
> -EXFUN (Fwrite_region, 7);
> -EXFUN (Ffile_readable_p, 1);
> -EXFUN (Fread_file_name, 6);
>  extern Lisp_Object close_file_unwind (Lisp_Object);
>  extern Lisp_Object restore_point_unwind (Lisp_Object);
>  extern _Noreturn void report_file_error (const char *, Lisp_Object);
> @@ -3070,12 +2845,7 @@ extern Lisp_Object Qdelete_file;
 
>  /* Defined in search.c */
>  extern void shrink_regexp_cache (void);
> -EXFUN (Fstring_match, 3);
>  extern void restore_search_regs (void);
> -EXFUN (Fmatch_data, 3);
> -EXFUN (Fset_match_data, 2);
> -EXFUN (Fmatch_beginning, 1);
> -EXFUN (Fmatch_end, 1);
>  extern void record_unwind_save_match_data (void);
>  struct re_registers;
>  extern struct re_pattern_buffer *compile_pattern (Lisp_Object,
> @@ -3101,14 +2871,6 @@ extern void clear_regexp_cache (void);
>  extern Lisp_Object Qcompletion_ignore_case;
>  extern Lisp_Object Vminibuffer_list;
>  extern Lisp_Object last_minibuf_string;
> -EXFUN (Fcompleting_read, 8);
> -EXFUN (Fread_from_minibuffer, 7);
> -EXFUN (Fread_variable, 2);
> -EXFUN (Fread_buffer, 3);
> -EXFUN (Fread_minibuffer, 2);
> -EXFUN (Feval_minibuffer, 2);
> -EXFUN (Fread_string, 5);
> -EXFUN (Fassoc_string, 3);
>  extern Lisp_Object get_minibuffer (EMACS_INT);
>  extern void init_minibuf_once (void);
>  extern void syms_of_minibuf (void);
> @@ -3118,24 +2880,16 @@ extern void syms_of_minibuf (void);
>  extern Lisp_Object Qminus, Qplus;
>  extern Lisp_Object Qwhen;
>  extern Lisp_Object Qcall_interactively, Qmouse_leave_buffer_hook;
> -EXFUN (Fprefix_numeric_value, 1);
>  extern void syms_of_callint (void);
 
>  /* Defined in casefiddle.c */
 
>  extern Lisp_Object Qidentity;
> -EXFUN (Fdowncase, 1);
> -EXFUN (Fupcase, 1);
> -EXFUN (Fupcase_region, 2);
> -EXFUN (Fupcase_initials, 1);
> -EXFUN (Fupcase_initials_region, 2);
>  extern void syms_of_casefiddle (void);
>  extern void keys_of_casefiddle (void);
 
>  /* Defined in casetab.c */
 
> -EXFUN (Fset_case_table, 1);
> -EXFUN (Fset_standard_case_table, 1);
>  extern void init_casetab_once (void);
>  extern void syms_of_casetab (void);
 
> @@ -3148,16 +2902,9 @@ extern Lisp_Object Qdisabled, QCfilter;
>  extern Lisp_Object Qup, Qdown, Qbottom;
>  extern Lisp_Object Qtop;
>  extern int input_pending;
> -EXFUN (Fdiscard_input, 0);
> -EXFUN (Frecursive_edit, 0);
> -_Noreturn EXFUN (Ftop_level, 0);
>  extern Lisp_Object menu_bar_items (Lisp_Object);
>  extern Lisp_Object tool_bar_items (Lisp_Object, int *);
>  extern void discard_mouse_events (void);
> -EXFUN (Fevent_convert_list, 1);
> -EXFUN (Fread_key_sequence, 5);
> -EXFUN (Fset_input_interrupt_mode, 1);
> -EXFUN (Fset_input_mode, 4);
>  extern Lisp_Object pending_funcalls;
>  extern int detect_input_pending (void);
>  extern int detect_input_pending_ignore_squeezables (void);
> @@ -3175,9 +2922,6 @@ extern void syms_of_keyboard (void);
>  extern void keys_of_keyboard (void);
 
>  /* Defined in indent.c */
> -EXFUN (Fvertical_motion, 2);
> -EXFUN (Findent_to, 2);
> -EXFUN (Fmove_to_column, 2);
>  extern ptrdiff_t current_column (void);
>  extern void invalidate_current_column (void);
>  extern int indented_beyond_p (ptrdiff_t, ptrdiff_t, EMACS_INT);
> @@ -3195,14 +2939,6 @@ extern Lisp_Object do_switch_frame (Lisp_Object, int, int, Lisp_Object);
>  extern Lisp_Object get_frame_param (struct frame *, Lisp_Object);
>  #endif
>  extern Lisp_Object frame_buffer_predicate (Lisp_Object);
> -EXFUN (Fselect_frame, 2);
> -EXFUN (Fselected_frame, 0);
> -EXFUN (Fmake_frame_visible, 1);
> -EXFUN (Ficonify_frame, 1);
> -EXFUN (Fframe_parameter, 2);
> -EXFUN (Fmodify_frame_parameters, 2);
> -EXFUN (Fraise_frame, 1);
> -EXFUN (Fredirect_frame_focus, 2);
>  extern void frames_discard_buffer (Lisp_Object);
>  extern void syms_of_frame (void);
 
> @@ -3219,7 +2955,6 @@ extern Lisp_Object Qfile_name_handler_alist;
>  extern void fatal_error_signal (int);
>  #endif
>  extern Lisp_Object Qkill_emacs;
> -_Noreturn EXFUN (Fkill_emacs, 1);
>  #if HAVE_SETLOCALE
>  void fixup_locale (void);
>  void synchronize_system_messages_locale (void);
> @@ -3249,10 +2984,6 @@ extern int running_asynch_code;
 
>  /* Defined in process.c.  */
>  extern Lisp_Object QCtype, Qlocal;
> -EXFUN (Fget_buffer_process, 1);
> -EXFUN (Fprocess_status, 1);
> -EXFUN (Fkill_process, 2);
> -EXFUN (Fwaiting_for_user_input_p, 0);
>  extern Lisp_Object Qprocessp;
>  extern void kill_buffer_processes (Lisp_Object);
>  extern int wait_reading_process_output (intmax_t, int, int, int,
> @@ -3278,7 +3009,6 @@ extern void init_process (void);
>  extern void syms_of_process (void);
>  extern void setup_process_coding_systems (Lisp_Object);
 
> -EXFUN (Fcall_process, MANY);
>  #ifndef DOS_NT
>   _Noreturn
>  #endif
> @@ -3290,7 +3020,6 @@ extern void syms_of_callproc (void);
 
>  /* Defined in doc.c */
>  extern Lisp_Object Qfunction_documentation;
> -EXFUN (Fsubstitute_command_keys, 1);
>  extern Lisp_Object read_doc_string (Lisp_Object);
>  extern Lisp_Object get_doc_string (Lisp_Object, int, int);
>  extern void syms_of_doc (void);
> @@ -3309,15 +3038,12 @@ extern Lisp_Object exec_byte_code (Lisp_Object, Lisp_Object, Lisp_Object,
 
>  /* Defined in macros.c */
>  extern Lisp_Object Qexecute_kbd_macro;
> -EXFUN (Fexecute_kbd_macro, 3);
> -EXFUN (Fcancel_kbd_macro_events, 0);
>  extern void init_macros (void);
>  extern void syms_of_macros (void);
 
>  /* Defined in undo.c */
>  extern Lisp_Object Qapply;
>  extern Lisp_Object Qinhibit_read_only;
> -EXFUN (Fundo_boundary, 0);
>  extern void truncate_undo_list (struct buffer *);
>  extern void record_marker_adjustment (Lisp_Object, ptrdiff_t);
>  extern void record_insert (ptrdiff_t, ptrdiff_t);
> @@ -3334,21 +3060,12 @@ extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
>  extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
>  extern Lisp_Object Qminibuffer_prompt;
 
> -EXFUN (Fnext_single_property_change, 4);
> -EXFUN (Fnext_single_char_property_change, 4);
> -EXFUN (Fprevious_single_property_change, 4);
> -EXFUN (Fget_text_property, 3);
> -EXFUN (Fput_text_property, 5);
> -EXFUN (Fprevious_char_property_change, 2);
> -EXFUN (Fnext_char_property_change, 2);
>  extern void report_interval_modification (Lisp_Object, Lisp_Object);
 
>  /* Defined in menu.c */
>  extern void syms_of_menu (void);
 
>  /* Defined in xmenu.c */
> -EXFUN (Fx_popup_menu, 2);
> -EXFUN (Fx_popup_dialog, 3);
>  extern void syms_of_xmenu (void);
 
>  /* Defined in termchar.h */
> @@ -3385,7 +3102,6 @@ extern ptrdiff_t emacs_write (int, const char *, ptrdiff_t);
>  enum { READLINK_BUFSIZE = 1024 };
>  extern char *emacs_readlink (const char *, char [READLINK_BUFSIZE]);
 
> -EXFUN (Funlock_buffer, 0);
>  extern void unlock_all_files (void);
>  extern void lock_file (Lisp_Object);
>  extern void unlock_file (Lisp_Object);
> @@ -3419,8 +3135,6 @@ extern _Noreturn void fatal (const char *msgid, ...)
>    ATTRIBUTE_FORMAT_PRINTF (1, 2);
 
>  /* Defined in terminal.c */
> -EXFUN (Fframe_terminal, 1);
> -EXFUN (Fdelete_terminal, 2);
>  extern void syms_of_terminal (void);
 
>  /* Defined in font.c */
> @@ -3433,8 +3147,6 @@ extern void syms_of_fontset (void);
 
>  /* Defined in xfns.c, w32fns.c, or macfns.c */
>  extern Lisp_Object Qfont_param;
> -EXFUN (Fxw_display_color_p, 1);
> -EXFUN (Fx_focus_frame, 1);
>  #endif
 
>  /* Defined in xfaces.c */
> @@ -3447,8 +3159,6 @@ extern Lisp_Object QCfamily, QCweight, QCslant;
>  extern Lisp_Object QCheight, QCname, QCwidth, QCforeground, QCbackground;
>  extern Lisp_Object Vface_alternative_font_family_alist;
>  extern Lisp_Object Vface_alternative_font_registry_alist;
> -EXFUN (Fclear_face_cache, 1);
> -EXFUN (Fx_load_color_file, 1);
>  extern void syms_of_xfaces (void);
 
>  #ifdef HAVE_X_WINDOWS
> @@ -3470,11 +3180,6 @@ extern void syms_of_xterm (void);
>  extern char *x_get_keysym_name (int);
>  #endif /* HAVE_WINDOW_SYSTEM */
 
> -#ifdef MSDOS
> -/* Defined in msdos.c */
> -EXFUN (Fmsdos_downcase_filename, 1);
> -#endif
> -
>  #ifdef HAVE_LIBXML2
>  /* Defined in xml.c */
>  extern void syms_of_xml (void);
> diff --git a/src/nsterm.h b/src/nsterm.h
> index 9158b78..80d25d6 100644
> --- a/src/nsterm.h
> +++ b/src/nsterm.h
> @@ -707,8 +707,6 @@ extern void ns_term_shutdown (int sig);
>  #define NS_DUMPGLYPH_MOUSEFACE          3
 
 
> -EXFUN (Fx_display_grayscale_p, 1);
> -EXFUN (Fx_display_planes, 1);
 
>  /* In nsfont, called from fontset.c */
>  extern void nsfont_make_fontset_for_font (Lisp_Object name,
> diff --git a/src/process.c b/src/process.c
> index de7fc14..b30e87c 100644
> --- a/src/process.c
> +++ b/src/process.c
> @@ -249,7 +249,6 @@ static int process_output_skip;
>  #define process_output_delay_count 0
>  #endif
 
> -static Lisp_Object Fget_process (Lisp_Object);
>  static void create_process (Lisp_Object, char **, Lisp_Object);
>  #ifdef SIGIO
>  static int keyboard_bit_set (SELECT_TYPE *);
> @@ -1089,10 +1088,6 @@ DEFUN ("process-query-on-exit-flag",
>    return (XPROCESS (process)->kill_without_query ? Qnil : Qt);
>  }
 
> -#ifdef DATAGRAM_SOCKETS
> -static Lisp_Object Fprocess_datagram_address (Lisp_Object);
> -#endif
> -
>  DEFUN ("process-contact", Fprocess_contact, Sprocess_contact,
>         1, 2, 0,
>         doc: /* Return the contact info of PROCESS; t for a real child.
> diff --git a/src/syntax.c b/src/syntax.c
> index 1ad6683..e7e68e2 100644
> --- a/src/syntax.c
> +++ b/src/syntax.c
> @@ -143,7 +143,6 @@ static ptrdiff_t find_start_begv;
>  static EMACS_INT find_start_modiff;
 
 
> -static Lisp_Object Fsyntax_table_p (Lisp_Object);
>  static Lisp_Object skip_chars (int, Lisp_Object, Lisp_Object, int);
>  static Lisp_Object skip_syntaxes (int, Lisp_Object, Lisp_Object);
>  static Lisp_Object scan_lists (EMACS_INT, EMACS_INT, EMACS_INT, int);
> diff --git a/src/textprop.c b/src/textprop.c
> index fb58f8e..4562cc0 100644
> --- a/src/textprop.c
> +++ b/src/textprop.c
> @@ -72,9 +72,6 @@ Lisp_Object Qfront_sticky, Qrear_nonsticky;
>  static Lisp_Object interval_insert_behind_hooks;
>  static Lisp_Object interval_insert_in_front_hooks;
 
> -static Lisp_Object Fprevious_property_change (Lisp_Object, Lisp_Object,
> -					      Lisp_Object);
> -
 
>  /* Signal a `text-read-only' error.  This function makes it easier
>     to capture that error in GDB by putting a breakpoint on it.  */
> diff --git a/src/w32term.h b/src/w32term.h
> index 68e62b2..4fdf560 100644
> --- a/src/w32term.h
> +++ b/src/w32term.h
> @@ -688,9 +688,6 @@ struct face;
>  XGCValues *XCreateGC (void *, Window, unsigned long, XGCValues *);
>  struct frame * check_x_frame (Lisp_Object);
 
> -EXFUN (Fx_display_color_p, 1);
> -EXFUN (Fx_display_grayscale_p, 1);
> -
>  typedef DWORD (WINAPI * ClipboardSequence_Proc) (void);
>  typedef BOOL (WINAPI * AppendMenuW_Proc) (
>      IN HMENU,
> diff --git a/src/window.c b/src/window.c
> index 9d78a3e..dc8539f 100644
> --- a/src/window.c
> +++ b/src/window.c
> @@ -2873,13 +2873,6 @@ adjust_window_margins (struct window *w)
>    return 1;
>  }
>  \f
> -static Lisp_Object Fset_window_margins (Lisp_Object, Lisp_Object, Lisp_Object);
> -static Lisp_Object Fset_window_fringes (Lisp_Object, Lisp_Object, Lisp_Object,
> -					Lisp_Object);
> -static Lisp_Object Fset_window_scroll_bars (Lisp_Object, Lisp_Object,
> -					    Lisp_Object, Lisp_Object);
> -static Lisp_Object Fset_window_vscroll (Lisp_Object, Lisp_Object, Lisp_Object);
> -
>  /* The following three routines are needed for running a window's
>     configuration change hook.  */
>  static void
> diff --git a/src/window.h b/src/window.h
> index 50bd713..fd4f755 100644
> --- a/src/window.h
> +++ b/src/window.h
> @@ -814,14 +814,9 @@ extern Lisp_Object Vmouse_window;
 
>  extern Lisp_Object Vmouse_event;
 
> -EXFUN (Fnext_window, 3);
> -EXFUN (Fselect_window, 2);
> -EXFUN (Fset_window_buffer, 3);
> -EXFUN (Fset_window_point, 2);
>  extern Lisp_Object make_window (void);
>  extern Lisp_Object window_from_coordinates (struct frame *, int, int,
>                                              enum window_part *, int);
> -EXFUN (Fwindow_dedicated_p, 1);
>  extern void resize_frame_windows (struct frame *, int, int);
>  extern void delete_all_child_windows (Lisp_Object);
>  extern void freeze_window_starts (struct frame *, int);
> @@ -892,21 +887,10 @@ struct glyph *get_phys_cursor_glyph (struct window *w);
>  extern Lisp_Object Qwindowp, Qwindow_live_p;
>  extern Lisp_Object Vwindow_list;
 
> -EXFUN (Fwindow_buffer, 1);
> -EXFUN (Fget_buffer_window, 2);
> -EXFUN (Fwindow_minibuffer_p, 1);
> -EXFUN (Fselected_window, 0);
> -EXFUN (Fframe_root_window, 1);
> -EXFUN (Fframe_first_window, 1);
> -EXFUN (Fset_frame_selected_window, 3);
> -EXFUN (Fset_window_configuration, 1);
> -EXFUN (Fcurrent_window_configuration, 1);
>  extern int compare_window_configurations (Lisp_Object, Lisp_Object, int);
> -EXFUN (Fpos_visible_in_window_p, 3);
>  extern void mark_window_cursors_off (struct window *);
>  extern int window_internal_height (struct window *);
>  extern int window_body_cols (struct window *w);
> -EXFUN (Frecenter, 1);
>  extern void temp_output_buffer_show (Lisp_Object);
>  extern void replace_buffer_in_windows (Lisp_Object);
>  extern void replace_buffer_in_windows_safely (Lisp_Object);
> diff --git a/src/xsettings.h b/src/xsettings.h
> index d6b0c09..10dc7ef 100644
> --- a/src/xsettings.h
> +++ b/src/xsettings.h
> @@ -20,8 +20,6 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
>  #ifndef XSETTINGS_H
>  #define XSETTINGS_H
 
> -EXFUN (Ftool_bar_get_system_style, 0);
> -
>  extern void xsettings_initialize (struct x_display_info *dpyinfo);
>  extern void xft_settings_event (struct x_display_info *dpyinfo,
>                                  XEvent *);
> diff --git a/src/xterm.h b/src/xterm.h
> index 68e0372..573d8bf 100644
> --- a/src/xterm.h
> +++ b/src/xterm.h
> @@ -937,7 +937,6 @@ void x_handle_property_notify (XPropertyEvent *);
>  /* From xfns.c.  */
 
>  struct frame *check_x_frame (Lisp_Object);
> -EXFUN (Fx_display_grayscale_p, 1);
>  extern void x_free_gcs (struct frame *);
 
>  /* From xrdb.c.  */



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-07-02 18:12           ` Stefan Monnier
@ 2012-07-02 19:05             ` Tom Tromey
  2012-07-03 13:24               ` Stefan Monnier
  0 siblings, 1 reply; 13+ messages in thread
From: Tom Tromey @ 2012-07-02 19:05 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Dmitry Antipov, emacs-devel

Tom> What do you think of the appended?

Stefan> I think it's going in the right direction.  I do wonder/worry about
Stefan> handling dependencies: for the current globals.h, there's no real
Stefan> problem since if the vars in it can be pretty much only missing or
Stefan> extraneous but can't be incorrect (they *very* rarely change type), but
Stefan> it's slightly less rare to change the type of a DEFUN'd function
Stefan> (i.e. adding/removing arguments).

I think dependencies should already work fine.

gl-stamp is rebuilt when a source file changes:

    gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES)

Then this is used to rebuild global.h if the contents change:

    globals.h: gl-stamp; @true

Is there a particular scenario you are concerned with?
I could give it a try.

Tom



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: coccinelle patch suggestion
  2012-07-02 19:05             ` Tom Tromey
@ 2012-07-03 13:24               ` Stefan Monnier
  0 siblings, 0 replies; 13+ messages in thread
From: Stefan Monnier @ 2012-07-03 13:24 UTC (permalink / raw)
  To: Tom Tromey; +Cc: Dmitry Antipov, emacs-devel

> Is there a particular scenario you are concerned with?

I guess it's OK then: all files are recompiled whenever globals.h
changes, which is a bit wasteful, but is not the end of the world and
is correct.

I guess you can install that patch, then,


        Stefan



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2012-07-03 13:24 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-27 17:12 coccinelle patch suggestion Dan Nicolaescu
2012-06-27 21:03 ` Andreas Schwab
2012-06-28  0:06   ` John Wiegley
2012-06-28 12:39     ` Dmitry Antipov
2012-06-28 18:05       ` Stefan Monnier
2012-06-29 16:36         ` Tom Tromey
2012-07-02 18:12           ` Stefan Monnier
2012-07-02 19:05             ` Tom Tromey
2012-07-03 13:24               ` Stefan Monnier
2012-07-02 15:40         ` Samuel Bronson
2012-07-02 17:11           ` Tom Tromey
2012-06-27 21:24 ` Stefan Monnier
2012-06-27 21:45   ` Dan Nicolaescu

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).