aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* condition variablesTom Tromey2012-08-191-0/+2
| | | | | This implements condition variables for elisp. This needs more tests.
* This supplies the mutex implementation for Emacs Lisp.Tom Tromey2012-08-151-0/+2
| | | | | | | A lisp mutex is implemented using a condition variable, so that we can interrupt a mutex-lock operation by calling thread-signal on the blocking thread. I did things this way because pthread_mutex_lock can't readily be interrupted.
* This adds most of the thread features visible to emacs lisp.Tom Tromey2012-08-151-0/+3
| | | | | | | | | | | | | | | | | | I roughly followed the Bordeaux threads API: http://trac.common-lisp.net/bordeaux-threads/wiki/ApiDocumentation ... but not identically. In particular I chose not to implement interrupt-thread or destroy-thread, but instead a thread-signalling approach. I'm still undecided about *default-special-bindings* (which I did not implement). I think it would be more emacs-like to capture the let bindings at make-thread time, but IIRC Stefan didn't like this idea the first time around. There are one or two semantics issues pointed out in the patch where I could use some advice.
* This parameterizes the GC a bit to make it thread-ready.Tom Tromey2012-08-151-52/+26
| | | | | | | | | | | | | The basic idea is that whenever a thread "exits lisp" -- that is, releases the global lock in favor of another thread -- it must save its stack boundaries in the thread object. This way the boundaries are always available for marking. This is the purpose of flush_stack_call_func. I haven't tested this under all the possible GC configurations. There is a new FIXME in a spot that i didn't convert. Arguably all_threads should go in the previous patch.
* This introduces a thread-state object and moves various C globalsTom Tromey2012-08-151-10/+2
| | | | | | | | | | | there. It also introduces #defines for these globals to avoid a monster patch. The #defines mean that this patch also has to rename a few fields whose names clash with the defines. There is currently just a single "thread"; so this patch does not impact Emacs behavior in any significant way.
* * src/alloc.c (Fgarbage_collect): Use plural form consistently.Stefan Monnier2012-08-141-39/+58
|
* Revert and cleanup some recent overlay changes.Dmitry Antipov2012-08-141-2/+2
| | | | | | | | * buffer.h (enum overlay_type): Remove. (buffer_get_overlays, buffer_set_overlays): Likewise. (buffer_set_overlays_before, buffer_set_overlays_after): New function. Adjust users. (unchain_both): Add eassert.
* Inline functions to examine and change buffer overlays.Dmitry Antipov2012-08-081-2/+2
| | | | | | | | | * buffer.c (unchain_both): New function. * buffer.h (buffer_get_overlays, buffer_set_overlays): (buffer_has_overlays): New function. (enum overlay_type): New enum. * alloc.c, buffer.c, editfns.c, fileio.c, indent.c: * insdel.c, intervals.c, print.c, xdisp.c: Adjust users.
* Inline functions to examine and change buffer intervals.Dmitry Antipov2012-08-081-31/+9
| | | | | | | | | | | | | * alloc.c (mark_interval_tree): Remove. (MARK_INTERVAL_TREE): Simplify. (UNMARK_BALANCE_INTERVALS): Remove. Adjust users. * intervals.c (buffer_balance_intervals): New function. (graft_intervals_into_buffer): Adjust indentation. (set_intervals_multibyte): Simplify. * buffer.h (BUF_INTERVALS): Remove. (buffer_get_intervals, buffer_set_intervals): New function. * alloc.c, buffer.c, editfns.c, fileio.c, indent.c, insdel.c: * intervals.c, textprop.c: Adjust users.
* Inline functions to examine and change string intervals.Dmitry Antipov2012-08-081-1/+1
| | | | | | | * lisp.h (STRING_INTERVALS, STRING_SET_INTERVALS): Remove. (string_get_intervals, string_set_intervals): New function. * alloc.c, buffer.c, editfns.c, fns.c, insdel.c, intervals.c: * lread.c, print.c, textprop.c: Adjust users.
* Cleanup intervals.Dmitry Antipov2012-08-081-13/+14
| | | | | | | | | * intervals.h (NULL_INTERVAL, DEFAULT_INTERVAL): Remove. (NULL_INTERVAL_P): Likewise. Adjust users. (FRONT_STICKY_P, END_NONSTICKY_P, FRONT_NONSTICKY_P): Adjust comment. Move under #if 0. * alloc.c, buffer.c, editfns.c, fns.c, insdel.c, intervals.c: * print.c, syntax.c, textprop.c, xdisp.c: Adjust users.
* Revert and cleanup Lisp_Cons, Lisp_Misc and Lisp_Symbol things.Dmitry Antipov2012-08-071-28/+28
| | | | | | | | | | | | | | | | | | | * src/lisp.h (struct Lisp_Symbol): Change xname to meaningful name since all xname users are fixed long time ago. Do not use INTERNAL_FIELD. (set_symbol_name, set_symbol_function, set_symbol_plist): (set_symbol_next, set_overlay_plist): New function. (struct Lisp_Cons): Do not use INTERNAL_FIELD. (struct Lisp_Overlay): Likewise. (CVAR, MVAR, SVAR): Remove. * src/alloc.c, src/buffer.c, src/buffer.h, src/bytecode.c: * src/cmds.c, src/data.c, src/doc.c, src/eval.c, src/fns.c: * src/keyboard.c, src/lread.c, src/nsselect.m, src/xterm.c: Adjust users. * src/.gdbinit: Change to use name field of struct Lisp_Symbol where appropriate. * admin/coccinelle/overlay.cocci, admin/coccinelle/symbol.cocci: Remove.
* Basic functions to set Lisp_Object and pointer slots of intervals.Dmitry Antipov2012-08-071-1/+1
| | | | | | | | | | | * intervals.h (interval_set_parent, interval_set_object): (interval_set_left, interval_set_right, interval_set_plist): (interval_copy_parent): New function. (SET_INTERVAL_OBJECT, SET_INTERVAL_PARENT, INTERVAL_PTR_SIZE): Remove. (RESET_INTERVAL, COPY_INTERVAL_CACHE, MERGE_INTERVAL_CACHE): Adjust indentation. (INTERVAL_SIZE): Remove. Adjust users. * alloc.c, intervals.c, lread.c, textprop.c: Use new functions.
* Drop WGET and revert read access to Lisp_Objects slots of struct window.Dmitry Antipov2012-08-071-1/+1
| | | | | | | | | | | * window.h (WGET): Remove. (struct window): Do not use INTERNAL_FIELD. * alloc.c, buffer.c, composite.c, dispextern.h, dispnew.c, editfns.c: * fileio.c, font.c, fontset.c, frame.c, frame.h, fringe.c, indent.c: * insdel.c, keyboard.c, keymap.c, lisp.h, minibuf.c, msdos.c, nsfns.m: * nsmenu.m, nsterm.m, print.c, textprop.c, w32fns.c, w32menu.c: * w32term.c, window.c, xdisp.c, xfaces.c, xfns.c, xmenu.c, xterm.c: Adjust users.
* Use GCALIGNMENT where appropriate.Dmitry Antipov2012-08-061-10/+9
| | | | | | * alloc.c (XMALLOC_HEADER_ALIGNMENT, roundup_size): (union aligned_Lisp_Symbol, union aligned_Lisp_Misc): (mark_maybe_pointer, pure_alloc): Change to use GCALIGNMENT.
* Separate read and write access to Lisp_Object slots of struct window.Dmitry Antipov2012-08-061-1/+1
| | | | | | | | | | * window.h (WGET, WSET): New macros similar to AREF and ASET. * alloc.c, buffer.c, composite.c, dispextern.h, dispnew.c, editfns.c: * fileio.c, font.c, fontset.c, frame.c, frame.h, fringe.c, indent.c: * insdel.c, keyboard.c, keymap.c, lisp.h, minibuf.c, msdos.c, nsfns.m: * nsmenu.m, nsterm.m, print.c, textprop.c, w32fns.c, w32menu.c: * w32term.c, window.c, xdisp.c, xfaces.c, xfns.c, xmenu.c, xterm.c: Adjust users.
* Generalize common compile-time constants.Dmitry Antipov2012-08-051-11/+3
| | | | | | | | | | | | * lisp.h (header_size, bool_header_size, word_size): Now here. (struct Lisp_Vector): Add comment. (struct Lisp_Bool_Vector): Move up to define handy constants. (VECSIZE, PSEUDOVECSIZE): Simplify. (SAFE_ALLOCA_LISP): Use new constant. Adjust indentation. * buffer.c, buffer.h, bytecode.c, callint.c, eval.c, fns.c: * font.c, fontset.c, keyboard.c, keymap.c, macros.c, menu.c: * msdos.c, w32menu.c, w32term.h, window.c, xdisp.c, xfaces.c: * xfont.c, xmenu.c: Use word_size where appropriate.
* Remove unnecessary casts involving pointers.Paul Eggert2012-08-031-18/+18
| | | | | | | | | | | | | | | | | | | | | | | | | These casts are no longer needed now that we assume C89 or later, since they involve casting to or from void *. * alloc.c (make_pure_string, make_pure_c_string, pure_cons) (make_pure_float, make_pure_vector): * lisp.h (SAFE_ALLOCA, SAFE_ALLOCA_LISP): * macros.c (Fstart_kbd_macro): * menu.c (find_and_return_menu_selection): * minibuf.c (read_minibuf_noninteractive): * sysdep.c (closedir): * xdisp.c (x_produce_glyphs): * xfaces.c (compare_fonts_by_sort_order): * xfns.c (x_real_positions, select_visual): * xselect.c (x_stop_queuing_selection_requests) (x_get_window_property, x_get_window_property_as_lisp_data): * xterm.c (x_set_frame_alpha, x_find_modifier_meanings): Remove unnecessary pointer casts. * alloc.c (record_xmalloc): New function. * lisp.h (record_xmalloc): New decl. (SAFE_ALLOCA): Now takes just one arg -- the size -- and acts more like a function. This is because the pointer cast is not needed. All uses changed. * print.c (print_string, print_error_message): Avoid length recalc.
* Use C99-style 'extern inline' if available.Paul Eggert2012-08-021-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lib-src/profile.c (SYSTIME_INLINE): Define. * nt/config.nt: Sync with autogen/config.in. (_GL_INLINE, _GL_EXTERN_INLINE, _GL_INLINE_HEADER_BEGIN) (_GL_INLINE_HEADER_END): New macros. * src/buffer.h (BUFFER_INLINE): * src/category.h (CATEGORY_INLINE): * src/character.h (CHARACTER_INLINE): * src/charset.h (CHARSET_INLINE): * src/composite.h (COMPOSITE_INLINE): * src/dispextern.h (DISPEXTERN_INLINE): * src/lisp.h (LISP_INLINE): * src/systime.h (SYSTIME_INLINE): New macro, replacing 'static inline' in this header. * src/buffer.h, src/category.h, src/character.h, src/charset.h: * src/composite.h, src/dispextern.h, lisp.h, systime.h: Use INLINE_HEADER_BEGIN, INLINE_HEADER_END. * src/alloc.c (LISP_INLINE): * src/buffer.c (BUFFER_INLINE): * src/category.c (CATEGORY_INLINE): * src/character.c (CHARACTER_INLINE): * src/charset.c (CHARSET_INLINE): * src/composite.c (COMPOSITE_INLINE): * src/dispnew.c (DISPEXTERN_INLINE): * src/sysdep.c (SYSTIME_INLINE): Define to EXTERN_INLINE, so that the corresponding functions are compiled into code. * src/conf_post.h (INLINE, EXTERN_INLINE, INLINE_HEADER_BEGIN) (INLINE_HEADER_END): New macros. * src/lisp.h (PSEUDOVECTOR_FLAG): Now a macro as well as a constant, since it's used in non-static inline functions now.
* Use INTERNAL_FIELD for conses and overlays.Dmitry Antipov2012-08-011-10/+10
| | | | | | | | | | * src/lisp.h (struct Lisp_Cons): Use INTERNAL_FIELD. Remove obsolete comment. (MVAR): New macro. (struct Lisp_Overlay): Use INTERNAL_FIELD. * src/alloc.c, src/buffer.c, src/buffer.h, src/fns.c: Adjust users. * admin/coccinelle/overlay.cocci: Semantic patch to replace direct access to Lisp_Object members of struct Lisp_Overlay to MVAR.
* Use INTERNAL_FIELD for symbols.Dmitry Antipov2012-08-011-16/+16
| | | | | | | | * src/lisp.h (SVAR): New macro. Adjust users. * src/alloc.c, src/bytecode.c, src/cmds.c, src/data.c, src/doc.c, src/eval.c: * src/fns.c, src/keyboard.c, src/lread.c, src/xterm.c: Users changed. * admin/coccinelle/symbol.cocci: Semantic patch to replace direct access to Lisp_Object members of struct Lisp_Symbol to SVAR.
* Use INTERNAL_FIELD for windows.Dmitry Antipov2012-08-011-1/+2
| | | | | | | | | | | | | | * src/window.h (WVAR): New macro. (struct window): Change Lisp_Object members to INTERNAL_FIELD. * src/alloc.c, src/buffer.c, src/composite.c, src/dispextern.h: * src/dispnew.c, src/editfns.c, src/fileio.c, src/font.c, src/fontset.c: * src/frame.c, src/frame.h, src/fringe.c, src/indent.c, src/insdel.c: * src/keyboard.c, src/keymap.c, src/lisp.h, src/minibuf.c, src/nsterm.m: * src/print.c, src/textprop.c, src/w32fns.c, src/w32menu.c, src/w32term.c: * src/window.c, src/xdisp.c, src/xfaces.c, src/xfns.c, src/xmenu.c: * src/xterm.c: Users changed. * admin/coccinelle/window.cocci: Semantic patch to replace direct access to Lisp_Object members of struct window to WVAR.
* Generalize INTERNAL_FIELD between buffers, keyboards and frames.Dmitry Antipov2012-07-311-5/+5
| | | | | | | | | | | | | | | | | * src/lisp.h (INTERNAL_FIELD): New macro. * src/buffer.h (BUFFER_INTERNAL_FIELD): Removed. (BVAR): Change to use INTERNAL_FIELD. * src/keyboard.h (KBOARD_INTERNAL_FIELD): Likewise. (KVAR): Change to use INTERNAL_FIELD. * src/frame.h (FVAR): New macro. (struct frame): Use INTERNAL_FIELD for all Lisp_Object fields. * src/alloc.c, src/buffer.c, src/data.c, src/dispnew.c, src/dosfns.c * src/eval.c, src/frame.c, src/fringe.c, src/gtkutil.c, src/minibuf.c * src/nsfns.m, src/nsterm.m, src/print.c, src/term.c, src/w32fns.c * src/w32menu.c, src/w32term.c, src/window.c, src/window.h, src/xdisp.c * src/xfaces.c, src/xfns.c, src/xmenu.c, src/xterm.c: Users changed. * admin/coccinelle/frame.cocci: Semantic patch to replace direct access to Lisp_Object members of struct frame to FVAR.
* * lisp.h (SWITCH_ENUM_CAST): Remove. All uses removed.Paul Eggert2012-07-301-1/+1
| | | | | This no-op macro hasn't been needed for many years. * src/regex.c (SWITCH_ENUM_CAST) [!emacs]: Likewise.
* Export DIRECTORY_SEP, TYPEMASK, VALMASK to GDB.Paul Eggert2012-07-301-0/+3
| | | | | | | | * alloc.c (gdb_make_enums_visible) [USE_LSB_TAG]: Add lsb_bits. * lisp.h (enum lsb_bits) [USE_LSB_TAG]: New enum, for gdb_make_enums_visible. (TYPEMASK, VALMASK) [USE_LSB_TAGS]: Now enum constants, not macros. (DIRECTORY_SEP): Now a constant, not a macro.
* Export to GDB most of lisp.h's remaining object-like macros.Paul Eggert2012-07-291-33/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp.h (min, max): Move earlier, because they're used earlier now. (INTMASK, ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, VALMASK) (CHAR_TABLE_STANDARD_SLOTS, CHARTAB_SIZE_BITS_0) (CHARTAB_SIZE_BITS_1, CHARTAB_SIZE_BITS_2, CHARTAB_SIZE_BITS_3) (DEFAULT_HASH_SIZE, COMPILED_ARGLIST, COMPILED_BYTECODE) (COMPILED_CONSTANTS, COMPILED_STACK_DEPTH, COMPILED_DOC_STRING) (COMPILED_INTERACTIVE, CHAR_ALT, CHAR_SUPER, CHAR_HYPER, CHAR_SHIFT) (CHAR_CTL, CHAR_META, CHAR_MODIFIER_MASK, CHARACTERBITS) (MANY, UNEVALLED, FLOAT_TO_STRING_BUFSIZE, MAX_ALLOCA): Now constants, for GDB. They need not be macros. (MOST_POSITIVE_FIXNUM, MOST_NEGATIVE_FIXNUM, STRING_BYTES_BOUND): Now constants, for GDB, as well as macros, for static initializers. (CHAR_TABLE_STANDARD_SLOTS, CHAR_TABLE_EXTRA_SLOTS): Move to after the definition of struct Lisp_Char_Table, since the former now needs that type defined. (enum CHARTAB_SIZE_BITS, enum CHAR_TABLE_STANDARD_SLOTS) (enum DEFAULT_HASH_SIZE, enum Lisp_Compiled, enum char_bits) (enum maxargs, enum FLOAT_TO_STRING_BUFSIZE, enum MAX_ALLOCA): New enums, for gdb_make_enums_visible. (GLYPH_MODE_LINE_FACE): Remove; unused. * alloc.c (STRING_BYTES_MAX): Now a constant, now a macro. (gdb_make_enums_visible): Add enum CHARTAB_SIZE_BITS, enum CHAR_TABLE_STANDARD_SLOTS, enum char_bits, enum DEFAULT_HASH_SIZE, enum FLOAT_TO_STRING_BUFSIZE, enum Lisp_Bits, enum Lisp_Compiled, enum maxargs, enum MAX_ALLOCA. (ARRAY_MARK_FLAG_VAL, PSEUDOVECTOR_FLAG_VAL, VALMASK_VAL): Remove. (ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, VALMASK): Remove; no longer needed, now that they are done in lisp.h.
* Cleanup string bytes checking.Dmitry Antipov2012-07-301-44/+21
| | | | | | | * alloc.c (GC_STRING_BYTES, CHECK_STRING_BYTES): Remove. Convert all users to STRING_BYTES or string_bytes if GC_CHECK_STRING_BYTES. (check_string_bytes): Define to empty if not GC_CHECK_STRING_BYTES. (check_sblock, compact_small_strings): Simplify.
* Remove HIDE_LISP_IMPLEMENTATION and cleanup cons free list check.Dmitry Antipov2012-07-291-7/+2
| | | | | | * lisp.h (HIDE_LISP_IMPLEMENTATION): Remove as useless for a long time. Adjust users. (CHECK_CONS_LIST): Remove. Convert all users to check_cons_list.
* * alloc.c (Fgarbage_collect): Indent as per usual Emacs style.Paul Eggert2012-07-291-6/+8
|
* Cleanup statistics calculation in Fgarbage_collect.Dmitry Antipov2012-07-291-14/+9
| | | | | * alloc.c (Fgarbage_collect): Rename t1 to meaningful start. Fix zombies percentage calculation. Simplify elapsed time calculation.
* Use Gnulib stdalign and environ modules (Bug#9772, Bug#9960).Paul Eggert2012-07-281-16/+5
| | | | | | | | | | | | | | | | | | | | | | | | * .bzrignore: Add lib/stdalign.h. * config.bat: Do not set NO_DECL_ALIGN; no longer needed. Copy lib/stdalign.in.h to lib/stdalign.in-h as needed. * configure.ac (HAVE_ATTRIBUTE_ALIGNED): Remove the code that fiddles with this, as gnulib now does this for us. * admin/merge-gnulib: Add environ, stdalign. * m4/environ.m4: New file, from gnulib. * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. * lib/stdalign.in.h, m4/stdalign.m4: New files, from gnulib. * sed2v2.inp (HAVE_ATTRIBUTE_ALIGNED): Remove edit. * sedlibmk.inp (STDALIGN_H, @GL_GENERATE_STDALIGN_H_TRUE@) (GL_GENERATE_STDALIGN_H_FALSE): New edits. * nt/config.nt (HAVE_ATTRIBUTE_ALIGNED): Remove. * src/alloc.c (XMALLOC_BASE_ALIGNMENT, GC_POINTER_ALIGNMENT, pure_alloc): Simplify by using alignof. (pure_alloc) [! USE_LSB_TAG]: Don't over-align EMACS_INT values. * src/lisp.h: Include <stdalign.h>. (GCALIGNMENT): New macro and constant. (DECL_ALIGN): Remove. All uses replaced by alignas (GCALIGNMENT). (USE_LSB_TAG): ifdef on alignas, not on DECL_ALIGN. (stdalign): New macro, if not already defined.
* Fix listn introduced in 2012-07-27T06:04:35Z!dmantipov@yandex.ru.Eli Zaretskii2012-07-271-1/+1
| | | | src/alloc.c (listn): Fix the order the arguments are consed onto the list.
* Fix failure to compile on Windows due to ↵Eli Zaretskii2012-07-271-5/+5
| | | | | | | | | 2012-07-27T06:04:35Z!dmantipov@yandex.ru. src/lisp.h (enum constype): Use CONSTYPE_HEAP and CONSTYPE_PURE for enumeration constants, as PURE and HEAP are too general, and clash with other headers and sources, such as gmalloc.c and the MS-Windows system headers. All users changed.
* Revert last save_excursion_save and save_excursion_restore changes.Dmitry Antipov2012-07-271-29/+24
| | | | | * alloc.c, editfns.c, marker.c, lisp.h: Revert. Lots of crashes reported by Chong Yidong <cyd@gnu.org>.
* Improve GDB symbol export.Paul Eggert2012-07-261-6/+19
| | | | | | | | | | | | | | | | * .gdbinit (xgetptr, xgetint, xgettype): Set $bugfix in different arms of an 'if', not using conditional expressions; otherwise GDB complains about the types in the unevaluated arm when the argument is an integer literal. (xgetint): Simplify expression. * alloc.c (gdb_make_enums_visible): New constant. This ports to GCC 3.4.2 the export of symbols to GDB. Problem reported by Eli Zaretskii in <http://bugs.gnu.org/1995-05-30T23:07:27Z!kwzh@gnu.org#13>. * lisp.h (PUBLISH_TO_GDB): Remove. All uses removed. No longer needed now that we have gdb_make_enums_visible. (enum CHECK_LISP_OBJECT_TYPE, enum Lisp_Bits, enum More_Lisp_Bits) (enum enum_USE_LSB_TAG): New enum types, packaging up enums that need to be exported to GDB.
* Utility function to make a list from specified amount of objects.Dmitry Antipov2012-07-271-14/+43
| | | | | | | | | | | | | | | | | | * lisp.h (enum constype): New datatype. (listn): New prototype. * alloc.c (listn): New function. (Fmemory_use_count, syms_of_alloc): Use it. * buffer.c (syms_of_buffer): Likewise. * callint.c (syms_of_callint): Likewise. * charset.c (define_charset_internal): Likewise. * coding.c (syms_of_coding): Likewise. * keymap.c (syms_of_keymap): Likewise. * search.c (syms_of_search): Likewise. * syntax.c (syms_of_syntax): Likewise. * w32.c (init_environment): Likewise. * w32fns.c (Fw32_battery_status, syms_of_w32fns): Likewise. * xdisp.c (syms_of_xdisp): Likewise. * xfns.c (syms_of_xfns): Likewise.
* Fast save_excursion_save and save_excursion_restore.Dmitry Antipov2012-07-271-24/+29
| | | | | | | | | | | | | | | | * lisp.h (struct Lisp_Excursion): New data type. (PVEC_EXCURSION): New pseudovector type. (XEXCURSION, XSETEXCURSION, EXCURSIONP): Convenient macros to deal with it. Adjust comments. (init_marker, attach_marker): New prototype. (unchain_marker): Adjust prototype. * marker.c (attach_marker): Change to global. (init_marker): New function. * alloc.c (Fmake_marker, build_marker): Use it. (build_marker): More easserts. (mark_object): Handle struct Lisp_Excursion. * editfns.c (save_excursion_save, save_excursion_restore): Reimplement to use struct Lisp_Excursion. Add comments.
* Fix export of symbols to GDB.Paul Eggert2012-07-261-0/+26
| | | | | | | | | | | | | | | | | | | | * alloc.c (ARRAY_MARK_FLAG_VAL, PSEUDOVECTOR_FLAG_VAL, VALMASK_VAL) (ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, VALMASK): Move these here from emacs.c, as this is a more-suitable home. Had this been done earlier the fix for 1995-05-30T23:07:27Z!kwzh@gnu.org would have avoided some of the problems noted in <http://bugs.gnu.org/1995-05-30T23:07:27Z!kwzh@gnu.org#13> by Eli Zaretskii, as the scope problems would have been more obvious. * emacs.c (gdb_CHECK_LISP_OBJECT_TYPE, gdb_DATA_SEG_BITS) (gdb_GCTYPEBITS, gdb_USE_LSB_TAG) (CHECK_LISP_OBJECT_TYPE, DATA_SEG_BITS, GCTYPEBITS, USE_LSB_TAG): Remove; now done in lisp.h. * lisp.h (PUBLISH_TO_GDB): New macro. (GCTYPEBITS, USE_LSB_TAG, CHECK_LISP_OBJECT_TYPE, enum pvec_type) (DATA_SEG_BITS): Use it. (GCTYPEBITS, USE_LSB_TAG): Now also an enum, for GDB. (CHECK_LISP_OBJECT_TYPE, DATA_SEG_BITS): Now just an enum, for GDB. * mem-limits.h (EXCEEDS_LISP_PTR): Redo so that DATA_SEG_BITS need not be usable in #if. This simplifies things.
* Cleanup miscellaneous objects allocation and initialization.Dmitry Antipov2012-07-231-9/+22
| | | | | | | | | | * alloc.c (allocate_misc): Change to static. Add argument to specify the subtype. Adjust comment and users. (build_overlay): New function. * buffer.c (copy_overlays, Fmake_overlay): Use it. * lisp.h (struct Lisp_Overlay): Remove obsolete comment. (allocate_misc): Remove prototype. (build_overlay): Add prototype.
* Adjust consing_since_gc when objects are explicitly freed.Dmitry Antipov2012-07-221-4/+9
| | | | | | * alloc.c (GC_DEFAULT_THRESHOLD): New macro. (Fgarbage_collect): Use it. Change minimum to 1/10 of default. (free_cons, free_misc): Subtract object size from consing_since_gc.
* Extend the value returned by Fgarbage_collect with heap statistics.Dmitry Antipov2012-07-201-30/+12
| | | | | | | | | | * alloc.c (Qheap): New symbol. (syms_of_alloc): DEFSYM it. (Fgarbage_collect): If DOUG_LEA_MALLOC, add mallinfo data. (Fmemory_free): Remove. (syms_of_alloc): Don't defsubr it. * buffer.c (Fcompact_buffer): Remove. (syms_of_buffer): Don't defsubr it.
* Make maybe_gc inline.Dmitry Antipov2012-07-201-18/+3
| | | | | | | | | | | Verify that inlining is always possible (GCC 4.7.1, -O3 -Winline). * lisp.h (consing_since_gc, gc_relative_threshold) (memory_full_cons_threshold): Revert declaration. (maybe_gc): Remove prototype, define as inline. * alloc.c: Remove old commented-out code. (consing_since_gc, gc_relative_threshold) (memory_full_cons_threshold): Revert to global. (maybe_gc): Remove.
* Cleanup calls to Fgarbage_collect.Dmitry Antipov2012-07-201-3/+15
| | | | | | | | | | | | | * lisp.h (maybe_gc): New prototype. (consing_since_gc, gc_relative_threshold, memory_full_cons_threshold): Remove declarations. * alloc.c (maybe_gc): New function. (consing_since_gc, gc_relative_threshold, memory_full_cons_threshold): Make them static. * bytecode.c (MAYBE_GC): Use maybe_gc. * eval.c (eval_sub, Ffuncall): Likewise. * keyboard.c (read_char): Likewise. Adjust call to maybe_gc to avoid dependency from auto-save feature.
* * buffer.h (FOR_EACH_BUFFER): Rename from 'for_each_buffer'.Paul Eggert2012-07-191-3/+3
| | | | | | | | (FOR_EACH_PER_BUFFER_OBJECT_AT): Rename from 'for_each_per_buffer_object_at'. All uses changed. It's better to use upper-case for macros that cannot be implemented as functions, to give the reader a clue that they're special.
* * lisp/emacs-lisp/chart.el: Use lexical-binding.Stefan Monnier2012-07-191-11/+8
| | | | | (chart-emacs-storage): Don't hardcode the list of entries. * src/alloc.c (Fgarbage_collect): Tweak docstring.
* Tweak the value returned from Fgarbage_collect again.Dmitry Antipov2012-07-191-25/+35
| | | | | | | | | | | | | * src/alloc.c (Fgarbage_collect): New return value, as confirmed in http://lists.gnu.org/archive/html/emacs-devel/2012-07/msg00418.html. Adjust documentation. (total_vector_bytes): Rename to total_vector_slots, adjust accounting. (total_free_vector_bytes): Rename to total_free_vector_slots, adjust accounting. (Qstring_bytes, Qvector_slots): New symbols. (syms_of_alloc): DEFSYM them. * lisp/emacs-lisp/chart.el (chart-emacs-storage): Adjust again.
* Compact buffers when idle.Dmitry Antipov2012-07-191-27/+1
| | | | | | | | | * lisp/compact.el: New file. * src/buffer.c (compact_buffer, Fcompact_buffer): New function. (syms_of_buffer): Register Fcompact_buffer. * src/alloc.c (Fgarbage_collect): Use compact_buffer. * src/buffer.h (compact_buffer): New prototype. (struct buffer_text): New member.
* New macro to iterate over all buffers, miscellaneous cleanups.Dmitry Antipov2012-07-191-78/+68
| | | | | | | | | | | | | * lisp.h (all_buffers): Remove declaration. * buffer.h (all_buffers): Add declaration, with comment. (for_each_buffer): New macro. * alloc.c (Fgarbage_collect, mark_object): Use it. * buffer.c (Fkill_buffer, Fbuffer_swap_text, Fset_buffer_multibyte) (init_buffer): Likewise. * data.c (Fset_default): Likewise. * coding.c (code_conversion_restore): Remove redundant check for dead buffer. * buffer.c (Fkill_buffer): Likewise. Remove obsolete comment.
* * alloc.c (Fmake_bool_vector): Fix off-by-8 bugPaul Eggert2012-07-181-1/+1
| | | | | when invoking (make-bool-vector N t) and N is a positive multiple of 8 -- the last 8 bits were mistakenly cleared.
* Remove some struct layout assumptions in bool vectors.Paul Eggert2012-07-181-27/+28
| | | | | | | | | | * alloc.c (bool_header_size): New constant. (header_size, word_size): Move earlier, as they're now used earlier. Use 'word_size' in a few more places, where it's appropriate. (Fmake_bool_vector, sweep_vectors): Don't assume that there is no padding before the data member of a bool vector. (sweep_vectors): Use PSEUDOVECTOR_TYPEP, in an eassert, rather than doing the check by hand with an abort ().