]> code.delx.au - gnu-emacs/commitdiff
(Ffetch_bytecode): New function.
authorKarl Heuer <kwzh@gnu.org>
Wed, 5 Apr 1995 03:05:26 +0000 (03:05 +0000)
committerKarl Heuer <kwzh@gnu.org>
Wed, 5 Apr 1995 03:05:26 +0000 (03:05 +0000)
(funcall_lambda): Call it.
(syms_of_eval): defsubr it.

src/eval.c

index 5faaafd150aa292b14fc2e8351a858da2bb914f4..a67bc3c1a178184002fa9d8d58aa345022138faa 100644 (file)
@@ -2238,17 +2238,31 @@ funcall_lambda (fun, nargs, arg_vector)
       /* If we have not actually read the bytecode string
         and constants vector yet, fetch them from the file.  */
       if (CONSP (XVECTOR (fun)->contents[COMPILED_BYTECODE]))
-       {
-         tem = read_doc_string (XVECTOR (fun)->contents[COMPILED_BYTECODE]);
-         XVECTOR (fun)->contents[COMPILED_BYTECODE] = XCONS (tem)->car;
-         XVECTOR (fun)->contents[COMPILED_CONSTANTS] = XCONS (tem)->cdr;
-       }
+       Ffetch_bytecode (fun);
       val = Fbyte_code (XVECTOR (fun)->contents[COMPILED_BYTECODE],
                        XVECTOR (fun)->contents[COMPILED_CONSTANTS],
                        XVECTOR (fun)->contents[COMPILED_STACK_DEPTH]);
     }
   return unbind_to (count, val);
 }
+
+DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
+  1, 1, 0,
+  "If byte-compiled OBJECT is lazy-loaded, fetch it now.")
+  (object)
+     Lisp_Object object;
+{
+  Lisp_Object tem;
+
+  if (COMPILEDP (object)
+      && CONSP (XVECTOR (object)->contents[COMPILED_BYTECODE]))
+    {
+      tem = read_doc_string (XVECTOR (object)->contents[COMPILED_BYTECODE]);
+      XVECTOR (object)->contents[COMPILED_BYTECODE] = XCONS (tem)->car;
+      XVECTOR (object)->contents[COMPILED_CONSTANTS] = XCONS (tem)->cdr;
+    }
+  return object;
+}
 \f
 void
 grow_specpdl ()
@@ -2628,6 +2642,7 @@ Otherwise, nil (in a bare Emacs without preloaded Lisp code).");
   defsubr (&Seval);
   defsubr (&Sapply);
   defsubr (&Sfuncall);
+  defsubr (&Sfetch_bytecode);
   defsubr (&Sbacktrace_debug);
   defsubr (&Sbacktrace);
   defsubr (&Sbacktrace_frame);