annotate src/README @ 5124:623d57b7fbe8 ben-lisp-object

separate regular and disksave finalization, print method fixes. Create separate disksave method and make the finalize method only be for actual object finalization, not disksave finalization. Fix places where 0 was given in place of a printer -- print methods are mandatory, and internal objects formerly without a print method now must explicitly specify internal_object_printer(). Change the defn of CONSOLE_LIVE_P to avoid problems in some weird situations. -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-01-20 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (very_old_free_lcrecord): * alloc.c (disksave_object_finalization_1): * alloc.c (make_lcrecord_list): * alloc.c (alloc_managed_lcrecord): * alloc.c (free_managed_lcrecord): * alloc.c (sweep_lcrecords_1): * buffer.c: * bytecode.c: * bytecode.c (Fcompiled_function_p): * chartab.c: * console-impl.h: * console-impl.h (CONSOLE_TYPE_P): * console.c: * console.c (set_quit_events): * data.c: * data.c (Fmake_ephemeron): * database.c: * database.c (finalize_database): * database.c (Fclose_database): * device-msw.c: * device-msw.c (finalize_devmode): * device-msw.c (allocate_devmode): * device.c: * elhash.c: * elhash.c (finalize_hash_table): * eval.c: * eval.c (bind_multiple_value_limits): * event-stream.c: * event-stream.c (finalize_command_builder): * events.c: * events.c (mark_event): * extents.c: * extents.c (finalize_extent_info): * extents.c (uninit_buffer_extents): * faces.c: * file-coding.c: * file-coding.c (finalize_coding_system): * file-coding.h: * file-coding.h (struct coding_system_methods): * file-coding.h (struct detector): * floatfns.c: * floatfns.c (extract_float): * fns.c: * fns.c (Fidentity): * font-mgr.c (finalize_fc_pattern): * font-mgr.c (finalize_fc_config): * frame.c: * glyphs.c: * glyphs.c (finalize_image_instance): * glyphs.c (unmap_subwindow_instance_cache_mapper): * gui.c: * gui.c (gui_error): * keymap.c: * lisp.h (struct Lisp_Symbol): * lrecord.h: * lrecord.h (struct lrecord_implementation): * lrecord.h (MC_ALLOC_CALL_FINALIZER): * lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE): * lrecord.h (DEFINE_DUMPABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (MAKE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (MAKE_MODULE_LISP_OBJECT): * lstream.c: * lstream.c (finalize_lstream): * lstream.c (disksave_lstream): * marker.c: * marker.c (finalize_marker): * mule-charset.c (make_charset): * number.c: * objects.c: * objects.c (finalize_color_instance): * objects.c (finalize_font_instance): * opaque.c: * opaque.c (make_opaque_ptr): * process-nt.c: * process-nt.c (nt_finalize_process_data): * process-nt.c (nt_deactivate_process): * process.c: * process.c (finalize_process): * procimpl.h (struct process_methods): * scrollbar.c: * scrollbar.c (free_scrollbar_instance): * specifier.c (finalize_specifier): * symbols.c: * toolbar.c: * toolbar.c (Ftoolbar_button_p): * tooltalk.c: * ui-gtk.c: * ui-gtk.c (emacs_gtk_object_finalizer): * ui-gtk.c (allocate_emacs_gtk_boxed_data): * window.c: * window.c (finalize_window): * window.c (mark_window_as_deleted): Separate out regular and disksave finalization. Instead of a FOR_DISKSAVE argument to the finalizer, create a separate object method `disksaver'. Make `finalizer' have only one argument. Go through and separate out all finalize methods into finalize and disksave. Delete lots of thereby redundant disksave checking. Delete places that signal an error if we attempt to disksave -- all of these objects are non-dumpable and we will get an error from pdump anyway if we attempt to dump them. After this is done, only one object remains that has a disksave method -- lstream. Change DEFINE_*_LISP_OBJECT_WITH_PROPS to DEFINE_*_GENERAL_LISP_OBJECT, which is used for specifying either property methods or disksave methods (or in the future, any other less-used methods). Remove the for_disksave argument to finalize_process_data. Don't provide a disksaver for processes because no one currently needs it. Clean up various places where objects didn't provide a print method. It was made mandatory in previous changes, and all methods now either provide their own print method or use internal_object_printer or external_object_printer. Change the definition of CONSOLE_LIVE_P to use the contype enum rather than looking into the conmeths structure -- in some weird situations with dead objects, the conmeths structure is NULL, and printing such objects from debug_print() will crash if we try to look into the conmeths structure.
author Ben Wing <ben@xemacs.org>
date Wed, 20 Jan 2010 07:05:57 -0600
parents abe6d1db359e
children 304aebb79cd3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 This directory contains the source files for the C component of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Nothing in this directory is needed for using XEmacs once it is built
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 and installed, if the dumped Emacs is copied elsewhere.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 See the files ../README and then ../INSTALL for installation instructions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 Under Unix, the file `Makefile.in.in' is used as a template by the script
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 `../configure' to produce `Makefile.in'. The same script then uses `cpp'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 to produce the machine-dependent `Makefile' from `Makefile.in';
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 `Makefile' is the file which actually controls the compilation of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 Emacs. Most of this should work transparently to the user; you should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 only need to run `../configure', and then type `make'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 General changes for XEmacs:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 ---------------------------
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 1. Lisp objects.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 -- XFASTINT has been eliminated. Use of this expression as an lvalue
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 is incompatible with the union form of Lisp objects, and use as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 an rvalue is likely to lead to errors and doesn't really save much
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 time. Expressions of the form `XFASTINT (obj) = num;' get replaced
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 by `obj = make_int (num);' or `XSETINT (obj, num);' and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 expressions of the form `num = XFASTINT (obj);' get replaced by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 `num = XINT (obj);'. Use Qzero in place of `make_int (0)'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 -- Use of XTYPE gets replaced by the appropriate predicate. Using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 XTYPE only works for the small number of types that are not stored
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 using the Lisp_Record type (int, cons, string, and vector). For
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 example, `(XTYPE (foo) == Lisp_Buffer)' gets replaced by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 `(BUFFERP (foo))'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 -- `XSET (obj, Lisp_Int, num)' gets replaced by `XSETINT (obj, num)',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 for consistency.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 -- Some occurrences of XSET need to get replaced by XSETR --
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 specifically, those where the type is not a primitive type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 (primitive types are int, cons, string, and vector).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 -- References to `XSTRING (obj)->size' get replaced with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 `XSTRING_LENGTH (obj)'. This is currently for cosmetic reasons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 but there may be other reasons in the future. (This change is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 currently incomplete in the source files.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 2. Storage classes:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 -- All occurrences of `register' should be replaced by `REGISTER'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 It interferes with backtraces so we disable it if DEBUG_XEMACS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 is defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 3. Errors, messages, I18N3 snarfing:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 -- Errors are continuable in XEmacs but are not in FSF Emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Therefore, it's important that functions do something reasonable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 if an error gets continued. If you want to signal a non-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 continuable error, the call to Fsignal() gets put inside a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 `while (1)' loop. To facilitate this, and also for proper I18N3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 message snarfing, most calls to Fsignal() have been replaced by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 calls to signal_error(), signal_simple_error(), etc. Look at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 eval.c for a classification of various error functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 -- Constant strings occurring in source files need to get wrapped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 in a call to GETTEXT (or if inside of a call to `build_string',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 change that function to `build_translated_string') if they don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 occur in certain places where the I18N3 message snarfer will see
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 them. For a complete discussion of this, see the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 lib-src/make-msgfile.lex.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 NOTE: I18N3 support is not currently working, so the above may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 or may not apply. Thus it is not a good idea to add random
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 GETTEXTs, unless you really know what you are doing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 -- Calls to `fprintf (stderr, ...)' and `printf (...)' get replaced
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 with calls to `stderr_out' and `stdout_out'. This is for I18N3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 message snarfing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 4. Initialization:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 -- FSF constructs like `obj = intern ("string"); staticpro (&obj);'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 get replaced by `defsymbol (&obj);'. This is for code cleanness
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 and better purespace usage.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 -- FSF constructs like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 obj = intern ("error");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 Fput (obj, Qerror_message, "message");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 Fput (obj, Qerror_conditions, some list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 get replaced by calls to deferror(). See the definition of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 deferror() for how the correct arguments to pass. This is for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 code cleanness and I18N3 message snarfing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 -- Code in keys_of_foo() functions has been moved into Lisp.