Function: fetch-bytecode

fetch-bytecode is a function defined in eval.c.

Signature

(fetch-bytecode OBJECT)

Documentation

If byte-compiled OBJECT is lazy-loaded, fetch it now.

Probably introduced at or before Emacs version 19.29.

Source Code

// Defined in /usr/src/emacs/src/eval.c
{
  Lisp_Object tem;

  if (COMPILEDP (object))
    {
      if (CONSP (AREF (object, COMPILED_BYTECODE)))
	{
	  tem = read_doc_string (AREF (object, COMPILED_BYTECODE));
	  if (! (CONSP (tem) && STRINGP (XCAR (tem))
		 && VECTORP (XCDR (tem))))
	    {
	      tem = AREF (object, COMPILED_BYTECODE);
	      if (CONSP (tem) && STRINGP (XCAR (tem)))
		error ("Invalid byte code in %s", SDATA (XCAR (tem)));
	      else
		error ("Invalid byte code");
	    }

	  Lisp_Object bytecode = XCAR (tem);
	  if (STRING_MULTIBYTE (bytecode))
	    {
	      /* BYTECODE must have been produced by Emacs 20.2 or earlier
		 because it produced a raw 8-bit string for byte-code and now
		 such a byte-code string is loaded as multibyte with raw 8-bit
		 characters converted to multibyte form.  Convert them back to
		 the original unibyte form.  */
	      bytecode = Fstring_as_unibyte (bytecode);
	    }

	  ASET (object, COMPILED_BYTECODE, bytecode);
	  ASET (object, COMPILED_CONSTANTS, XCDR (tem));
	}
    }
  return object;
}