changeset 104006:b426d08d0ba3

(load_depth): New variable. (Fload, load_unwind, init_lread): Set it to the load recursion depth; set load_in_progress as a simple boolean based on the current load_depth. (Bug#3892)
author Ken Raeburn <raeburn@raeburn.org>
date Tue, 21 Jul 2009 09:26:30 +0000
parents 76ec8228b5d8
children e9be065e7391
files src/lread.c
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lread.c	Tue Jul 21 06:46:33 2009 +0000
+++ b/src/lread.c	Tue Jul 21 09:26:30 2009 +0000
@@ -100,6 +100,9 @@
 /* non-zero if inside `load' */
 int load_in_progress;
 
+/* Depth of nested `load' invocations.  */
+int load_depth;
+
 /* Directory in which the sources were found.  */
 Lisp_Object Vsource_directory;
 
@@ -1250,7 +1253,8 @@
   specbind (Qinhibit_file_name_operation, Qnil);
   load_descriptor_list
     = Fcons (make_number (fileno (stream)), load_descriptor_list);
-  load_in_progress++;
+  load_depth++;
+  load_in_progress = 1;
   if (! version || version >= 22)
     readevalloop (Qget_file_char, stream, hist_file_name,
 		  Feval, 0, Qnil, Qnil, Qnil, Qnil);
@@ -1312,7 +1316,8 @@
       fclose (stream);
       UNBLOCK_INPUT;
     }
-  if (--load_in_progress < 0) load_in_progress = 0;
+  if (--load_depth < 0) load_depth = 0;
+  load_in_progress = load_depth > 0;
   return Qnil;
 }
 
@@ -4129,6 +4134,7 @@
   Vvalues = Qnil;
 
   load_in_progress = 0;
+  load_depth = 0;
   Vload_file_name = Qnil;
 
   load_descriptor_list = Qnil;