aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* Cleanup basic allocation variables and functions.Dmitry Antipov2012-07-151-91/+6
| | | | | | | | | | | | | | * alloc.c (ignore_warnings, init_intervals, init_float) (init_cons, init_symbol, init_marker): Remove. (interval_block_index): Initialize to INTERVAL_BLOCK_SIZE. (float_block_index): Initialize to FLOAT_BLOCK_SIZE. (cons_block_index): Initialize to CONS_BLOCK_SIZE. (symbol_block_size): Initialize to SYMBOL_BLOCK_SIZE. (marker_block_index): Initialize to MARKER_BLOCK_SIZE. (staticidx, init_alloc_once, init_strings, free_ablock): Remove redundant initialization. * fns.c (init_weak_hash_tables): Remove. * lisp.h (init_weak_hash_tables): Remove prototype.
* Use zero_vector where appropriate.Dmitry Antipov2012-07-151-4/+3
| | | | | | | | | | * alloc.c (zero_vector): Define as Lisp_Object. Adjust users accordingly. * lisp.h (zero_vector): New declaration. * font.c (null_vector): Remove. (syms_of_font): Remove initialization and staticpro. (font_list_entities, font_find_for_lface): Change to use zero_vector. * keymap.c (Faccessible_keymaps): Likewise.
* alloc.c (mark_memory): Guard the "no_address_safety_analysis" functionJohn Wiegley2012-07-111-1/+3
| | | | attribute, so we only use it if it exists in the compiler.
* EMACS_TIME simplification (Bug#11875).Paul Eggert2012-07-101-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This replaces macros (which typically do not work in GDB) with functions, typedefs and enums, making the code easier to debug. The functional style also makes code easier to read and maintain. * lib-src/profile.c (TV2): Remove no-longer-needed static var. * src/systime.h: Include <sys/time.h> on all hosts, not just if WINDOWSNT, since 'struct timeval' is needed in general. (EMACS_TIME): Now a typedef, not a macro. (EMACS_TIME_RESOLUTION, LOG10_EMACS_TIME_RESOLUTION): Now constants, not macros. (EMACS_SECS, EMACS_NSECS, EMACS_TIME_SIGN, EMACS_TIME_VALID_P) (EMACS_TIME_FROM_DOUBLE, EMACS_TIME_TO_DOUBLE, EMACS_TIME_EQ) (EMACS_TIME_NE, EMACS_TIME_GT, EMACS_TIME_GE, EMACS_TIME_LT) (EMACS_TIME_LE): Now functions, not macros. (EMACS_SET_SECS, EMACS_SET_NSECS, EMACS_SET_SECS_NSECS) (EMACS_SET_USECS, EMACS_SET_SECS_USECS): Remove these macros, which are not functions. All uses rewritten to use: (make_emacs_time): New function. (EMACS_SECS_ADDR, EMACS_SET_INVALID_TIME, EMACS_GET_TIME) (EMACS_ADD_TIME, EMACS_SUB_TIME): Remove these macros, which are not functions. All uses rewritten to use the following, respectively: (emacs_secs_addr, invalid_emacs_time, get_emacs_time) (add_emacs_time, sub_emacs_time): New functions. * src/atimer.c: Don't include <sys/time.h>, as "systime.h" does this. * src/fileio.c (Fcopy_file): * src/xterm.c (XTflash): Get the current time closer to when it's used. * src/makefile.w32-in ($(BLD)/atimer.$(O)): Update dependencies.
* Optimize pure C strings initialization.Dmitry Antipov2012-07-101-5/+4
| | | | | | | | | | | | | * lisp.h (make_pure_string): Fix prototype. (build_pure_c_string): New function, defined as static inline. This provides a better opportunity to optimize away calls to strlen when the function is called with compile-time constant argument. * alloc.c (make_pure_c_string): Fix comment. Change to add nchars argument, adjust users accordingly. Use build_pure_c_string where appropriate. * buffer.c, coding.c, data.c, dbusbind.c, fileio.c, fontset.c, frame.c, * keyboard.c, keymap.c, lread.c, search.c, syntax.c, w32fns.c, xdisp.c, * xfaces.c, xfns.c, xterm.c: Use build_pure_c_string where appropriate.
* Minor improvements to make_formatted_string.Paul Eggert2012-07-091-1/+1
| | | | | | * alloc.c (make_formatted_string): Prefer int to ptrdiff_t where int is good enough, as vsprintf returns an int. * lisp.h (make_formatted_string): Add ATTRIBUTE_FORMAT_PRINTF.
* Use make_formatted_string to avoid double length calculation.Dmitry Antipov2012-07-091-0/+14
| | | | | | | | | | | | | | | | | * lisp.h (make_formatted_string): New prototype. * alloc.c (make_formatted_string): New function. * buffer.c (Fgenerate_new_buffer_name): Use it. * dbus.c (syms_of_dbusbind): Likewise. * editfns.c (Fcurrent_time_zone): Likewise. * filelock.c (get_boot_time): Likewise. * frame.c (make_terminal_frame, set_term_frame_name) (x_report_frame_params): Likewise. * image.c (gs_load): Likewise. * minibuf.c (get_minibuffer): Likewise. * msdos.c (dos_set_window_size): Likewise. * process.c (make_process): Likewise. * xdisp.c (ensure_echo_area_buffers): Likewise. * xsettings.c (apply_xft_settings): Likewise.
* Introduce fast path for the widely used marker operation.Dmitry Antipov2012-07-061-0/+27
| | | | | | | | | | | | * alloc.c (build_marker): New function. * lisp.h (build_marker): New prototype. * buffer.c (clone_per_buffer_values, Fmake_indirect_buffer): Use it. * composite.c (autocmp_chars): Likewise. * editfns.c (buildmark): Remove. (Fpoint_marker, Fpoint_min_marker, Fpoint_max_marker) (save_restriction_save): Use build_marker. * marker.c (buf_charpos_to_bytepos, buf_bytepos_to_charpos): Likewise. * window.c (save_window_save): Likewise.
* More xmalloc and related cleanup.Paul Eggert2012-07-051-42/+33
| | | | | | | | | | | | | | | | | | | | | | | | * alloc.c, bidi.c, buffer.c, buffer.h, bytecode.c, callint.c: * callproc.c, charset.c, coding.c, composite.c, data.c, dispnew.c: * doc.c, editfns.c, emacs.c, eval.c, fileio.c, filelock.c, fns.c: * font.c, fontset.c, frame.c, fringe.c, ftfont.c, ftxfont.c, gmalloc.c: * gtkutil.c, image.c, keyboard.c, keymap.c, lread.c, macros.c, menu.c: * nsfns.m, nsfont.m, nsmenu.m, nsterm.m, print.c, process.c, ralloc.c: * regex.c, region-cache.c, scroll.c, search.c, sound.c, syntax.c: * sysdep.c, term.c, termcap.c, unexmacosx.c, window.c, xdisp.c: * xfaces.c, xfns.c, xftfont.c, xgselect.c, xmenu.c, xrdb.c, xselect.c: * xterm.c: Omit needless casts involving void * pointers and allocation. Prefer "P = xmalloc (sizeof *P)" to "P = xmalloc (sizeof (TYPE_OF_P))", as the former is more robust if P's type is changed. Prefer xzalloc to xmalloc + memset 0. Simplify malloc-or-realloc to realloc. Don't worry about xmalloc returning a null pointer. Prefer xstrdup to xmalloc + strcpy. * editfns.c (Fmessage_box): Grow message_text by at least 80 when growing it. * keyboard.c (apply_modifiers_uncached): Prefer local array to alloca of a constant.
* Cleanup xmalloc.Dmitry Antipov2012-07-051-3/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * admin/coccinelle/xzalloc.cocci: Semantic patch to convert calls to xmalloc with following memset to xzalloc. * src/lisp.h (xzalloc): New prototype. Omit needless casts. * src/alloc.c (xzalloc): New function. Omit needless casts. * src/charset.c: Omit needless casts. Convert all calls to malloc with following memset to xzalloc. * src/dispnew.c: Likewise. * src/fringe.c: Likewise. * src/image.c: Likewise. * src/sound.c: Likewise. * src/term.c: Likewise. * src/w32fns.c: Likewise. * src/w32font.c: Likewise. * src/w32term.c: Likewise. * src/xfaces.c: Likewise. * src/xfns.c: Likewise. * src/xterm.c: Likewise. * src/atimer.c: Omit needless casts. * src/buffer.c: Likewise. * src/callproc.c: Likewise. * src/ccl.c: Likewise. * src/coding.c: Likewise. * src/composite.c: Likewise. * src/doc.c: Likewise. * src/doprnt.c: Likewise. * src/editfns.c: Likewise. * src/emacs.c: Likewise. * src/eval.c: Likewise. * src/filelock.c: Likewise. * src/fns.c: Likewise. * src/gtkutil.c: Likewise. * src/keyboard.c: Likewise. * src/lisp.h: Likewise. * src/lread.c: Likewise. * src/minibuf.c: Likewise. * src/msdos.c: Likewise. * src/print.c: Likewise. * src/process.c: Likewise. * src/region-cache.c: Likewise. * src/search.c: Likewise. * src/sysdep.c: Likewise. * src/termcap.c: Likewise. * src/terminal.c: Likewise. * src/tparam.c: Likewise. * src/w16select.c: Likewise. * src/w32.c: Likewise. * src/w32reg.c: Likewise. * src/w32select.c: Likewise. * src/w32uniscribe.c: Likewise. * src/widget.c: Likewise. * src/xdisp.c: Likewise. * src/xmenu.c: Likewise. * src/xrdb.c: Likewise. * src/xselect.c: Likewise.
* * alloc.c (PSEUDOVECTOR_NBYTES): Remove stray ';'Paul Eggert2012-07-041-1/+1
| | | | that causes compilation to fail on pre-C99 compilers.
* Turn VECTOR_FREE_LIST_FLAG into PVEC_FREE.Stefan Monnier2012-07-041-88/+96
| | | | | | | | | | | | | | | | | | | | * src/lisp.h (enum pvec_type): Use fewer bits. (PSEUDOVECTOR_SIZE_BITS): New constant. (PSEUDOVECTOR_SIZE_MASK, PVEC_TYPE_MASK): Use it. (XSETPVECTYPESIZE, XSETTYPED_PSEUDOVECTOR, DEFUN): Adapt code to change in pvec_type. (PSEUDOVECTOR_TYPEP): New macro. (TYPED_PSEUDOVECTORP): Use it. * src/fns.c (internal_equal): Adapt code to extract pvectype. * src/emacs.c (gdb_pvec_type): Update type. * src/alloc.c (PSEUDOVECTOR_NBYTES): New macro. (VECTOR_FREE_LIST_SIZE_MASK): Remove (=> PSEUDOVECTOR_SIZE_MASK). (VECTOR_FREE_LIST_FLAG): Remove (=> PVEC_FREE). (SETUP_ON_FREE_LIST): Use XSETPVECTYPESIZE. (sweep_vectors): Use it. Use local var `total_bytes' instead of abusing vector->header.next.nbytes. (live_vector_p): Use PVEC_TYPE. (mark_object): Adapt code to extract pvectype. Use switch.
* Fix block vector allocation code to allow VECTOR_BLOCK_SIZEDmitry Antipov2012-07-031-4/+15
| | | | | | | values which aren't power of 2. * alloc.c (VECTOR_FREE_LIST_SIZE_MASK): New macro. Verify it's value and the value of VECTOR_BLOCK_SIZE. Adjust users accordingly.
* * src/alloc.c (mark_object): Revert part of last patch to use `switch'.Stefan Monnier2012-07-031-29/+37
| | | | * src/lisp.h (Lisp_Misc, Lisp_Fwd): Move around to group better.
* * alloc.c (allocate_vector_block): Remove redundantDmitry Antipov2012-07-031-35/+23
| | | | | | calls to mallopt if DOUG_LEA_MALLOC is defined. (allocate_vectorlike): If DOUG_LEA_MALLOC is defined, avoid calls to mallopt if zero_vector is returned.
* * alloc.c (check_string_bytes): If GC_CHECK_STRING_BYTESDmitry Antipov2012-07-031-1/+1
| | | | | is enabled, avoid dereferencing NULL current_sblock if running undumped.
* Cleanup basic buffer management.Dmitry Antipov2012-07-031-77/+54
| | | | | | | | | | | | | | | | | | | * buffer.h (struct buffer): Change layout to use generic vector marking code. Fix some comments. Change type of 'clip_changed' to bitfield. Remove unused #ifndef old. (FIRST_FIELD_PER_BUFFER, LAST_FIELD_PER_BUFFER): Remove. (GET_OVERLAYS_AT): Fix indentation. (for_each_per_buffer_object_at): New macro. * buffer.c (clone_per_buffer_values, reset_buffer_local_variables) (Fbuffer_local_variables): Use it. (init_buffer_once, syms_of_buffer): Remove unused #ifndef old. * alloc.c (allocate_buffer): Adjust to match new layout of struct buffer. Fix comment. (mark_overlay): New function. (mark_buffer): Use it. Use mark_vectorlike to mark normal Lisp area of struct buffer. (mark_object): Use it. Adjust marking of misc objects and related comments.
* * alloc.c (mark_object): Remove "#ifdef GC_CHECK_MARKED_OBJECTS"Paul Eggert2012-07-021-2/+0
| | | | | | wrapper that is not needed because the wrapped code is a no-op (zero machine instructions) when GC_CHECK_MARKED_OBJECTS is not defined. This avoids a -Wunused-macros diagnostic with GCC 4.7.1 x86-64.
* * alloc.c (mark_buffer): Simplify. Remove prototype.Dmitry Antipov2012-07-021-112/+125
| | | | | | | (mark_object): Add comment. Reorganize marking of vector-like objects. Use CHECK_LIVE for all vector-like ojects except buffers and subroutines when GC_CHECK_MARKED_OBJECTS is defined. Avoid redundant calls to mark_vectorlike for bool vectors.
* * src/editfns.c (region_limit): Clip to narrowing.Stefan Monnier2012-06-281-1/+2
| | | | Fixes: debbugs:11770
* Generalize run-time debugging checks.Dmitry Antipov2012-06-281-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.in (ENABLE_CHECKING): Update comment. * src/dispextern.h (XASSERTS): Remove. * src/fontset.c (xassert): Remove. Convert from xassert to eassert. * src/alloc.c: Convert from xassert to eassert. * src/bidi.c: Likewise. * src/dispnew.c: Likewise. * src/fns.c: Likewise. * src/fringe.c: Likewise. * src/ftfont.c: Likewise. * src/gtkutil.c: Likewise. * src/image.c: Likewise. * src/keyboard.c: Likewise. * src/menu.c: Likewise. * src/process.c: Likewise. * src/scroll.c: Likewise. * src/sound.c: Likewise. * src/term.c: Likewise. * src/w32console.c: Likewise. * src/w32fns.c: Likewise. * src/w32term.c: Likewise. * src/window.c: Likewise. * src/xdisp.c: Likewise. * src/xfaces.c: Likewise. * src/xfns.c: Likewise. * src/xselect.c: Likewise. * src/xterm.c: Likewise.
* * alloc.c (allocate_string_data): Remove dead code.Dmitry Antipov2012-06-271-14/+2
| | | | | * xsettings.c (XSETTINGS_FONT_NAME): Move under HAVE_XFT to avoid GCC warning about unused macro.
* * alloc.c (allocate_string): Omit intervals initialization.Dmitry Antipov2012-06-271-4/+1
| | | | | * alloc.c (make_uninit_multibyte_string): Initialize intervals as in make_pure_string and make_pure_c_string.
* * alloc.c (allocate_string): Fix last change.Dmitry Antipov2012-06-271-1/+0
|
* * alloc.c (allocate_string): Remove two redundant callsDmitry Antipov2012-06-271-3/+6
| | | | to memset, add explicit initialization where appropriate.
* alloc.c (mark_memory): Do not check with -faddress-sanitizer whenJohn Wiegley2012-06-261-0/+6
| | | | building with Clang.
* * alloc.c (allocate_window): Zero out non-Lisp part of newlyDmitry Antipov2012-06-261-15/+24
| | | | | | | | | | | | allocated window. (allocate_process): Likewise for new process. (allocate_terminal): Changed to use offsetof. (allocate_frame): Likewise. * frame.c (make_frame): Omit redundant initialization. * window.c (make_parent_window): Use memset. (make_window): Omit redundant initialization. * process.c (make_process): Omit redundant initialization. * terminal.c (create_terminal): Likewise.
* * src/alloc.c: Remove build_string.Dmitry Antipov2012-06-261-10/+0
| | | | | | | | | | | * src/lisp.h: Define build_string as static inline. This provides a better opportunity to optimize away calls to strlen when the function is called with compile-time constant argument. * src/image.c (imagemagick_error): Convert to build_string. * src/w32proc.c (sys_spawnve): Likewise. * src/xterm.c (x_term_init): Likewise. * admin/coccinelle/build_string.cocci: Semantic patch to convert from make_string to build_string.
* Support higher-resolution time stamps.Paul Eggert2012-06-221-5/+7
| | | | Fixes: debbugs:9000
* Enlarge NSTATICS to 0x650.Eli Zaretskii2012-06-221-1/+1
| | | | | | | src/alloc.c (NSTATICS): Enlarge to 0x650. Otherwise, Emacs compiled with -DENABLE_CHECKING -DXASSERTS -DGLYPH_DEBUG=1 -DBYTE_CODE_METER aborts in staticpro during startup. (Without -DBYTE_CODE_METER, staticidx goes up to 1597 out of 1600 = 0x640.)
* * alloc.c, bytecode.c, ccl.c, coding.c, composite.c, data.c, dosfns.c:Dmitry Antipov2012-06-191-1/+1
| | | | | | | * font.c, image.c, keyboard.c, lread.c, menu.c, minibuf.c, msdos.c: * print.c, syntax.c, window.c, xmenu.c, xselect.c: Replace direct access to `contents' member of Lisp_Vector objects with AREF and ASET where appropriate.
* * buffer.h (FETCH_MULTIBYTE_CHAR): Define as inline.Andreas Schwab2012-06-161-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (BUF_FETCH_MULTIBYTE_CHAR): Likewise. * character.c (_fetch_multibyte_char_p): Remove. * alloc.c: Include "character.h" before "buffer.h". * bidi.c: Likewise. * buffer.c: Likewise. * bytecode.c: Likewise. * callint.c: Likewise. * callproc.c: Likewise. * casefiddle.c: Likewise. * casetab.c: Likewise. * category.c: Likewise. * cmds.c: Likewise. * coding.c: Likewise. * composite.c: Likewise. * dired.c: Likewise. * dispnew.c: Likewise. * doc.c: Likewise. * dosfns.c: Likewise. * editfns.c: Likewise. * emacs.c: Likewise. * fileio.c: Likewise. * filelock.c: Likewise. * font.c: Likewise. * fontset.c: Likewise. * fringe.c: Likewise. * indent.c: Likewise. * insdel.c: Likewise. * intervals.c: Likewise. * keyboard.c: Likewise. * keymap.c: Likewise. * lread.c: Likewise. * macros.c: Likewise. * marker.c: Likewise. * minibuf.c: Likewise. * nsfns.m: Likewise. * nsmenu.m: Likewise. * print.c: Likewise. * process.c: Likewise. * regex.c: Likewise. * region-cache.c: Likewise. * search.c: Likewise. * syntax.c: Likewise. * term.c: Likewise. * textprop.c: Likewise. * undo.c: Likewise. * unexsol.c: Likewise. * w16select.c: Likewise. * w32fns.c: Likewise. * w32menu.c: Likewise. * window.c: Likewise. * xdisp.c: Likewise. * xfns.c: Likewise. * xmenu.c: Likewise. * xml.c: Likewise. * xselect.c: Likewise.
* Use a simple struct to implement compile time checks for the Lisp_Object typeAndreas Schwab2012-06-131-16/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.in: Rename --enable-use-lisp-union-type to --enable-check-lisp-object-type and define CHECK_LISP_OBJECT_TYPE instead of USE_LISP_UNION_TYPE. * admin/make-emacs: Rename --union-type to --check-lisp-type. Define CHECK_LISP_OBJECT_TYPE insted of USE_LISP_UNION_TYPE. * admin/CPP-DEFINES (DEBUG_LISP_OBJECT_TYPE): Renamed from USE_LISP_UNION_TYPE. * src/lisp.h (Lisp_Object) [CHECK_LISP_OBJECT_TYPE]: Define as struct instead of union. (XLI, XIL): Define. (XHASH, XTYPE, XINT, XUINT, make_number, XSET, XPNTR, XUNTAG): Use them. * src/emacs.c (gdb_use_struct): Renamed from gdb_use_union. * src/.gdbinit: Check gdb_use_struct instead of gdb_use_union. * src/alloc.c (widen_to_Lisp_Object): Removed. (mark_memory): Use XIL instead of widen_to_Lisp_Object. * src/frame.c (delete_frame): Remove outdated comment. * src/w32fns.c (Fw32_register_hot_key): Use XLI instead of checking USE_LISP_UNION_TYPE. (Fw32_unregister_hot_key): Likewise. (Fw32_toggle_lock_key): Likewise. * src/w32menu.c (add_menu_item): Likewise. (w32_menu_display_help): Use XIL instead of checking USE_LISP_UNION_TYPE. * src/w32heap.c (allocate_heap): Don't check USE_LISP_UNION_TYPE. (init_heap): Likewise. * src/w32term.c (w32_read_socket): Update comment.
* USE_LISP_UNION_TYPE + USE_LSB_TAG cleanup (Bug#11604)Paul Eggert2012-06-121-44/+21
| | | | | | | | | | | | | | | | | | | | | | | * alloc.c (make_number) [!defined make_number]: Remove, as lisp.h always defines this now. (mark_maybe_pointer): Simplify since USE_LSB_TAG is always defined now. (roundup_size): Verify that it is a power of 2. * data.c (Fmake_variable_buffer_local, Fmake_local_variable): * ftfont.c (ftfont_driver): Use LISP_INITIALLY_ZERO. * lisp.h (USE_LSB_TAG): Allow the builder to compile with -DUSE_LSB_TAG=0, to override the automatically-selected default. USE_LSB_TAG now is always defined to be either 0 or 1. All uses changed. (union Lisp_Object): Don't worry about WORDS_BIGENDIAN; the code works fine either way, and efficiency is not a concern here, as the union type is for debugging, not for production. (LISP_MAKE_RVALUE, make_number) [USE_LISP_UNION_TYPE]: Use an inline function on all platforms when using the union type, since this is simpler and 'static inline' can be used portably within Emacs now. (LISP_INITIALLY_ZERO): New macro. (XFASTINT, XSETFASTINT) [USE_LISP_UNION_TYPE]: Remove. (XSET) [USE_LISP_UNION_TYPE]: Don't overparenthesize.
* Don't purify in Fmake_byte_code.Stefan Monnier2012-06-111-19/+25
| | | | | | * src/alloc.c (make_byte_code): New function. (Fmake_byte_code): Use it. Don't purify here. * src/lread.c (read1): Use it as well to avoid extra allocation.
* Fix BLOCK_INPUT/UNBLOCK_INPUT mismatch in ↵Eli Zaretskii2012-06-081-1/+4
| | | | | | 2012-06-08T08:44:30Z!dmantipov@yandex.ru. src/alloc.c (allocate_vectorlike): Fix last change.
* Block-based vector allocation of small vectors.Dmitry Antipov2012-06-081-42/+346
| | | | | | | | | | | | | | | | | | | | | | | | | | * src/lisp.h (struct vectorlike_header): New field `nbytes', adjust comment accordingly. * src/alloc.c (enum mem_type): New type `MEM_TYPE_VECTOR_BLOCK' to denote vector blocks. Adjust users (live_vector_p, mark_maybe_pointer, valid_lisp_object_p) accordingly. (COMMON_MULTIPLE): Move outside #if USE_LSB_TAG. (VECTOR_BLOCK_SIZE, vroundup, VECTOR_BLOCK_BYTES), (VBLOCK_BYTES_MIN, VBLOCK_BYTES_MAX, VECTOR_MAX_FREE_LIST_INDEX), (VECTOR_FREE_LIST_FLAG, ADVANCE, VINDEX, SETUP_ON_FREE_LIST), (VECTOR_SIZE, VECTOR_IN_BLOCK): New macros. (roundup_size): New constant. (struct vector_block): New data type. (vector_blocks, vector_free_lists, zero_vector): New variables. (all_vectors): Renamed to `large_vectors'. (allocate_vector_from_block, init_vectors, allocate_vector_from_block) (sweep_vectors): New functions. (allocate_vectorlike): Return `zero_vector' as the only vector of 0 items. Allocate new vector from block if vector size is less than or equal to VBLOCK_BYTES_MAX. (Fgarbage_collect): Move all vector sweeping code to sweep_vectors. (init_alloc_once): Add call to init_vectors. * doc/lispref/internals.text (Garbage Collection): Document new vector management code and vectorlike_header structure.
* * alloc.c (CONS_BLOCK_SIZE): Account for padding at the end ofAndreas Schwab2012-06-021-2/+4
| | | | cons_block.
* * alloc.c, lisp.h (make_pure_vector): Now static.Paul Eggert2012-05-301-1/+2
|
* Merge from trunk.Paul Eggert2012-05-251-42/+43
|\
| * Remove src/m/*.Paul Eggert2012-05-221-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.in: Remove all mention of src/m/*. (machine, machfile, M_FILE, config_machfile, and_machfile): Remove. All uses removed. (BITS_PER_CHAR, BITS_PER_SHORT, BITS_PER_INT, BITS_PER_LONG) (BITS_PER_LONG_LONG): Move to src/lisp.h. * lib/makefile.w32-in: Remove dependencies on $(EMACS_ROOT)/src/m/intel386.h. * make-dist: Don't make links to src/m. * admin/CPP-DEFINES: Do not mention src/m/*.h. (BITS_PER_EMACS_INT, BITS_PER_LONG, BITS_PER_CHAR) (BITS_PER_SHORT, BITS_PER_INT): Remove. * admin/MAINTAINERS: Remove src/m/. * lib-src/makefile.w32-in: Remove dependencies on $(EMACS_ROOT)/src/m/intel386.h. * msdos/mainmake.v2 (TAGS tags): Don't look at $(CURDIR)/src/m/intel386.h. * nt/config.nt: Do not include "m/intel386.h"; file was removed. (BITS_PER_CHAR, BITS_PER_SHORT, BITS_PER_INT, BITS_PER_LONG): Move to src/lisp.h. (EMACS_INT_MAX): New macro. This directory predates autoconf and is no longer needed nowadays. Move its few remaining bits of functionality to where they're needed. * src/m/README, src/m/alpha.h, src/m/amdx86-64.h, src/m/ia64.h, src/m/ibmrs6000.h: * src/m/ibms390x.h, src/m/intel386.h, src/m/m68k.h, src/m/macppc.h: * src/m/sparc.h, src/m/template.h: Remove. * src/Makefile.in (M_FILE): Remove. All uses removed. * src/alloc.c (POINTERS_MIGHT_HIDE_IN_OBJECTS): * src/lisp.h (USE_LSB_TAG): * src/mem-limits.h (EXCEEDS_LISP_PTR): Use VAL_MAX, not VALBITS, in #if. * src/lisp.h (EMACS_INT_MAX): New macro, useful in #if. (EMACS_UINT): Define unconditionally now. (BITS_PER_CHAR, BITS_PER_SHORT, BITS_PER_INT, BITS_PER_LONG) (BITS_PER_EMACS_INT): New constants, replacing what used to be in config.h, but not useful in #if. (GCTYPEBITS, VALBITS): Define unconditionally, since m/* files don't define them any more. (VAL_MAX): New macro. (VALMASK): Use it. * src/puresize.h (PURESIZE_RATIO): Use EMACS_INT_MAX, not BITS_PER_EMACS_INT, in #if. * src/s/aix4-2.h (BROKEN_FIONREAD, BROKEN_SIGAIO, BROKEN_SIGPTY) (BROKEN_SIGPOLL): Move here from m/ibmrs6000.h, which was removed. * src/s/gnu-linux.h (ULIMIT_BREAK_VALUE) [__i386__]: * src/s/ms-w32.h (DATA_START): Move here from removed file m/intel386.h. * src/s/gnu.h (NLIST_STRUCT): Remove undef; 'configure' does this. * src/s/irix6-5.h (_LP64): Remove; lisp.h no longer needs this.
| * Assume C89 or later.Paul Eggert2012-05-211-28/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.in (AC_C_PROTOTYPES, AC_C_VOLATILE, AC_C_CONST) (POINTER_TYPE, PROTOTYPES): Remove. * admin/CPP-DEFINES: Remove NULL, const. * lib-src/etags.c (static, const): Remove macros. (PTR): Remove; all uses replaced with void *. Omit needless casts. * src/alloc.c, src/buffer.c, lisp.h: Replace POINTER_TYPE with void. * alloc.c (overrun_check_malloc, overrun_check_realloc, xmalloc) (xrealloc): * buffer.c (mmap_free_1, mmap_enlarge): Omit needless casts. * editfns.c, fns.c, gmalloc.c, insdel.c, sysdep.c, termcap.c (NULL): * textprop.c, tparam.c (NULL): Remove. * ralloc.c, vm-limit.c (POINTER): Assume void * works. * regex.c (SIGN_EXTEND_CHAR): Assume signed char works. * regex.h (_RE_ARGS): Remove. All uses rewritten to use prototypes. * unexelf.c (ElfBitsW): Assume c89 preprocessor or better. * xterm.c (input_signal_count): Assume volatile works.
| * Spelling fixes.Paul Eggert2012-04-221-1/+1
| |
| * Fix GC_MALLOC_CHECK debugging output on 64-bit hosts.Paul Eggert2012-04-221-1/+1
| | | | | | | | | | * alloc.c (emacs_blocked_malloc) [GC_MALLOC_CHECK]: Do not assume ptrdiff_t is the same width as 'int'.
| * * alloc.c: Handle unusual debugging option combinations.Paul Eggert2012-04-221-10/+11
| | | | | | | | | | | | | | | | | | | | (GC_CHECK_MARKED_OBJECTS): Undef if ! GC_MARK_STACK, since the two debugging options are incompatible. (GC_MALLOC_CHECK): Similarly, undef if GC_CHECK_MARKED_OBJECTS is defined. (mem_init, mem_insert, mem_insert_fixup): Define if GC_MARK_STACK || GC_MALLOC_CHECK. (NEED_MEM_INSERT): Remove; no longer needed.
* | Merge from trunk.Paul Eggert2012-04-211-39/+75
|\ \ | |/
| * * alloc.c: Remove one incorrect comment and fix another.Paul Eggert2012-04-151-4/+1
| |
| * Fix minor alloc.c problems found by static checking.Paul Eggert2012-04-151-1/+15
| | | | | | | | | | | | | | | | | | | | * alloc.c (_malloc_internal, _free_internal) [!DOUG_LEA_MALLOC]: New extern decls, to avoid calling undeclared functions. (dont_register_blocks): Define if ((!SYSTEM_MALLOC && !SYNC_INPUT) && GC_MALLOC_CHECK), not if ((GC_MARK_STACK || defined GC_MALLOC_CHECK) && GC_MALLOC_CHECK), to match when it's used. (NEED_MEM_INSERT): New macro. (mem_insert, mem_insert_fixup) [!NEED_MEM_INSERT]: Remove; unused.
| * * alloc.c (which_symbols): Fix alignment issue / type clash.Paul Eggert2012-04-151-2/+3
| |
| * Simplify enforcement of object address alignmentAndreas Schwab2012-04-151-25/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | * lisp.h (struct Lisp_Symbol): Remove explicit padding. (struct Lisp_Misc_Any): Likewise. (struct Lisp_Free): Likewise. * alloc.c (union aligned_Lisp_Symbol): Define. (SYMBOL_BLOCK_SIZE, struct symbol_block): Use union aligned_Lisp_Symbol instead of struct Lisp_Symbol. (union aligned_Lisp_Misc): Define. (MARKER_BLOCK_SIZE, struct marker_block): Use union aligned_Lisp_Misc instead of union Lisp_Misc. (Fmake_symbol, allocate_misc, gc_sweep): Adjust