# HG changeset patch # User Karl Heuer # Date 781480214 0 # Node ID c11cc966dc6adefde023e598a169f491834f4536 # Parent 100b1d83e06f223cd03e5d7b02ab99d178f081bc (Fload, load_unwind): Store stream pointer as a cons of two integers, obviating the need for Lisp_Internal_Stream datatype. diff -r 100b1d83e06f -r c11cc966dc6a src/lread.c --- a/src/lread.c Thu Oct 06 21:47:34 1994 +0000 +++ b/src/lread.c Thu Oct 06 21:50:14 1994 +0000 @@ -350,7 +350,6 @@ register FILE *stream; register int fd = -1; register Lisp_Object lispstream; - register FILE **ptr; int count = specpdl_ptr - specpdl; Lisp_Object temp; struct gcpro gcpro1; @@ -429,12 +428,9 @@ message ("Loading %s...", XSTRING (str)->data); GCPRO1 (str); - /* We may not be able to store STREAM itself as a Lisp_Object pointer - since that is guaranteed to work only for data that has been malloc'd. - So malloc a full-size pointer, and record the address of that pointer. */ - ptr = (FILE **) xmalloc (sizeof (FILE *)); - *ptr = stream; - XSETINTERNAL_STREAM (lispstream, (EMACS_INT) ptr); + lispstream = Fcons (Qnil, Qnil); + XSETFASTINT (XCONS (lispstream)->car, (EMACS_UINT)stream >> 16); + XSETFASTINT (XCONS (lispstream)->cdr, (EMACS_UINT)stream & 0xffff); record_unwind_protect (load_unwind, lispstream); record_unwind_protect (load_descriptor_unwind, load_descriptor_list); load_descriptor_list @@ -458,8 +454,8 @@ load_unwind (stream) /* used as unwind-protect function in load */ Lisp_Object stream; { - fclose (*(FILE **) XSTRING (stream)); - xfree (XPNTR (stream)); + fclose (XFASTINT (XCONS (stream)->car) << 16 + | XFASTINT (XCONS (stream)->cdr)); if (--load_in_progress < 0) load_in_progress = 0; return Qnil; } @@ -469,6 +465,7 @@ Lisp_Object oldlist; { load_descriptor_list = oldlist; + return Qnil; } /* Close all descriptors in use for Floads.