Mercurial > hg > xemacs-beta
comparison src/extents.c @ 5142:f965e31a35f0
reduce lcrecord headers to 2 words, rename printing_unreadable_object
-------------------- ChangeLog entries follow: --------------------
man/ChangeLog addition:
2010-03-13 Ben Wing <ben@xemacs.org>
* internals/internals.texi (Working with Lisp Objects):
* internals/internals.texi (Writing Macros):
* internals/internals.texi (lrecords):
More rewriting to correspond with changes from
*LRECORD* to *LISP_OBJECT*.
modules/ChangeLog addition:
2010-03-13 Ben Wing <ben@xemacs.org>
* postgresql/postgresql.c (print_pgconn):
* postgresql/postgresql.c (print_pgresult):
printing_unreadable_object -> printing_unreadable_object_fmt.
2010-03-13 Ben Wing <ben@xemacs.org>
* ldap/eldap.c (print_ldap):
printing_unreadable_object -> printing_unreadable_object_fmt.
src/ChangeLog addition:
2010-03-13 Ben Wing <ben@xemacs.org>
* alloc.c (alloc_sized_lrecord_1):
* alloc.c (alloc_sized_lrecord_array):
* alloc.c (old_alloc_sized_lcrecord):
* alloc.c (disksave_object_finalization_1):
* alloc.c (mark_lcrecord_list):
* alloc.c (alloc_managed_lcrecord):
* alloc.c (free_managed_lcrecord):
* alloc.c (tick_lcrecord_stats):
* alloc.c (sweep_lcrecords_1):
* buffer.c (print_buffer):
* buffer.c (DEFVAR_BUFFER_LOCAL_1):
* casetab.c:
* casetab.c (print_case_table):
* console.c (print_console):
* console.c (DEFVAR_CONSOLE_LOCAL_1):
* data.c (print_weak_list):
* data.c (print_weak_box):
* data.c (print_ephemeron):
* data.c (ephemeron_equal):
* database.c (print_database):
* database.c (finalize_database):
* device-msw.c (sync_printer_with_devmode):
* device-msw.c (print_devmode):
* device-msw.c (finalize_devmode):
* device.c:
* device.c (print_device):
* elhash.c:
* elhash.c (print_hash_table):
* eval.c (print_subr):
* eval.c (print_multiple_value):
* event-stream.c (event_stream_resignal_wakeup):
* events.c (clear_event_resource):
* events.c (zero_event):
* events.c (print_event):
* extents.c:
* extents.c (print_extent):
* file-coding.c (print_coding_system):
* font-mgr.c:
* font-mgr.c (Ffc_init):
* frame.c:
* frame.c (print_frame):
* gc.c:
* gc.c (GC_CHECK_NOT_FREE):
* glyphs.c:
* glyphs.c (print_image_instance):
* glyphs.c (print_glyph):
* gui.c (print_gui_item):
* gui.c (copy_gui_item):
* keymap.c (print_keymap):
* keymap.c (MARKED_SLOT):
* lisp.h:
* lisp.h (struct Lisp_String):
* lisp.h (DEFUN):
* lisp.h (DEFUN_NORETURN):
* lrecord.h:
* lrecord.h (NORMAL_LISP_OBJECT_UID):
* lrecord.h (struct lrecord_header):
* lrecord.h (set_lheader_implementation):
* lrecord.h (struct old_lcrecord_header):
* lrecord.h (struct free_lcrecord_header):
* marker.c (print_marker):
* mule-charset.c:
* mule-charset.c (print_charset):
* objects.c (print_color_instance):
* objects.c (print_font_instance):
* objects.c (finalize_font_instance):
* print.c (print_cons):
* print.c (printing_unreadable_object_fmt):
* print.c (printing_unreadable_lisp_object):
* print.c (external_object_printer):
* print.c (internal_object_printer):
* print.c (debug_p4):
* print.c (ext_print_begin):
* process.c (print_process):
* rangetab.c (print_range_table):
* rangetab.c (range_table_equal):
* scrollbar.c (free_scrollbar_instance):
* specifier.c (print_specifier):
* specifier.c (finalize_specifier):
* symbols.c (guts_of_unbound_marker):
* symeval.h:
* symeval.h (DEFVAR_SYMVAL_FWD):
* tooltalk.c:
* tooltalk.c (print_tooltalk_message):
* tooltalk.c (print_tooltalk_pattern):
* ui-gtk.c (ffi_object_printer):
* ui-gtk.c (emacs_gtk_object_printer):
* ui-gtk.c (emacs_gtk_boxed_printer):
* window.c (print_window):
* window.c (free_window_mirror):
* window.c (debug_print_window):
* xemacs.def.in.in:
(1) printing_unreadable_object -> printing_unreadable_object_fmt.
(2) printing_unreadable_lcrecord -> printing_unreadable_lisp_object
and fix up so it no longer requires an lcrecord.
These previous changes eliminate most of the remaining places where
the terms `lcrecord' and `lrecord' occurred outside of specialized
code.
(3) Fairly major change: Reduce the number of words in an lcrecord
from 3 to 2. The third word consisted of a uid that duplicated the
lrecord uid, and a single free bit, which was moved into the lrecord
structure. This reduces the size of the `uid' slot from 21 bits to
20 bits. Arguably this isn't enough -- we could easily have more than
1,000,000 or so objects created in a session. The answer is
(a) It doesn't really matter if we overflow the uid field because
it's only used for debugging, to identify an object uniquely
(or pretty much so).
(b) If we cared about it overflowing and wanted to reduce this,
we could make it so that cons, string, float and certain other
frob-block types that never print out the uid simply don't
store a uid in them and don't increment the lrecord_uid_counter.
(4) In conjunction with (3), create new macro NORMAL_LISP_OBJECT_UID()
and use it to abstract out the differences between NEWGC and old-GC
in accessing the `uid' value from a "normal Lisp Object pointer".
(5) In events.c, use zero_nonsized_lisp_object() in place of custom-
written equivalent. In font-mgr.c use external_object_printer()
in place of custom-written equivalents.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sat, 13 Mar 2010 05:38:08 -0600 |
parents | a9c41067dd88 |
children | 88bd4f3ef8e4 |
comparison
equal
deleted
inserted
replaced
5141:0dcd22290039 | 5142:f965e31a35f0 |
---|---|
3229 /* extent-object methods */ | 3229 /* extent-object methods */ |
3230 /************************************************************************/ | 3230 /************************************************************************/ |
3231 | 3231 |
3232 /* These are the basic helper functions for handling the allocation of | 3232 /* These are the basic helper functions for handling the allocation of |
3233 extent objects. They are similar to the functions for other | 3233 extent objects. They are similar to the functions for other |
3234 lrecord objects. allocate_extent() is in alloc.c, not here. */ | 3234 frob-block objects. allocate_extent() is in alloc.c, not here. */ |
3235 | 3235 |
3236 static Lisp_Object | 3236 static Lisp_Object |
3237 mark_extent (Lisp_Object obj) | 3237 mark_extent (Lisp_Object obj) |
3238 { | 3238 { |
3239 struct extent *extent = XEXTENT (obj); | 3239 struct extent *extent = XEXTENT (obj); |
3331 } | 3331 } |
3332 | 3332 |
3333 if (print_readably) | 3333 if (print_readably) |
3334 { | 3334 { |
3335 if (!EXTENT_LIVE_P (XEXTENT (obj))) | 3335 if (!EXTENT_LIVE_P (XEXTENT (obj))) |
3336 printing_unreadable_object ("#<destroyed extent>"); | 3336 printing_unreadable_object_fmt ("#<destroyed extent>"); |
3337 else | 3337 else |
3338 printing_unreadable_object ("#<extent 0x%lx>", | 3338 printing_unreadable_object_fmt ("#<extent 0x%lx>", |
3339 (long) XEXTENT (obj)); | 3339 (long) XEXTENT (obj)); |
3340 } | 3340 } |
3341 | 3341 |
3342 if (!EXTENT_LIVE_P (XEXTENT (obj))) | 3342 if (!EXTENT_LIVE_P (XEXTENT (obj))) |
3343 write_ascstring (printcharfun, "#<destroyed extent"); | 3343 write_ascstring (printcharfun, "#<destroyed extent"); |
3351 } | 3351 } |
3352 } | 3352 } |
3353 else | 3353 else |
3354 { | 3354 { |
3355 if (print_readably) | 3355 if (print_readably) |
3356 printing_unreadable_object ("#<extent>"); | 3356 printing_unreadable_object_fmt ("#<extent>"); |
3357 write_ascstring (printcharfun, "#<extent"); | 3357 write_ascstring (printcharfun, "#<extent"); |
3358 } | 3358 } |
3359 write_ascstring (printcharfun, ">"); | 3359 write_ascstring (printcharfun, ">"); |
3360 } | 3360 } |
3361 | 3361 |