1. 11 Jul, 2011 1 commit
  2. 10 Jul, 2011 2 commits
    • Johan Bockgård's avatar
    • Andreas Schwab's avatar
      Protoize · 1dae0f0a
      Andreas Schwab authored
      * src/buffer.c (mmap_init, mmap_find, mmap_free_1, mmap_enlarge)
      (mmap_set_vars, mmap_alloc, mmap_free, mmap_realloc): Protoize.
      * src/data.c (fmod): Likewise.
      * src/dispnew.c (swap_glyphs_in_rows): Likewise.
      * src/emacs.c (memory_warning_signal): Likewise.
      * src/floatfns.c (float_error): Likewise.
      * src/font.c (check_gstring, check_otf_features, otf_tag_symbol)
      (otf_open, font_otf_capability, generate_otf_features)
      (font_otf_DeviceTable, font_otf_ValueRecord, font_otf_Anchor):
      Likewise.
      * src/image.c (pbm_read_file): Likewise.
      * src/indent.c (string_display_width): Likewise.
      * src/intervals.c (check_for_interval, search_for_interval)
      (inc_interval_count, count_intervals, root_interval)
      (adjust_intervals_for_insertion, make_new_interval): Likewise.
      * src/lread.c (defalias): Likewise.
      * src/regex.c (set_image_of_range_1, set_image_of_range)
      (regex_grow_registers): Likewise.
      * src/sysdep.c (strerror): Likewise.
      * src/termcap.c (valid_filename_p, tprint, main): Likewise.
      * src/tparam.c (main): Likewise.
      * src/unexhp9k800.c (run_time_remap, save_data_space)
      (update_file_ptrs, read_header, write_header, calculate_checksum)
      (copy_file, copy_rest, display_header): Likewise.
      * src/widget.c (mark_shell_size_user_specified, create_frame_gcs):
      Likewise.
      * src/xdisp.c (check_it): Likewise.
      * src/xfaces.c (register_color, unregister_color, unregister_colors):
      Likewise.
      * src/xfns.c (print_fontset_result): Likewise.
      * src/xrdb.c (member, fatal, main): Likewise.
      1dae0f0a
  3. 07 Jul, 2011 1 commit
  4. 24 Jun, 2011 1 commit
  5. 22 Jun, 2011 1 commit
    • Paul Eggert's avatar
      GLYPH_DEBUG fixes · 85fece3e
      Paul Eggert authored
      The following patches are for when GLYPH_DEBUG && !XASSERT.
      * dispextern.h (trace_redisplay_p, dump_glyph_string):
      * dispnew.c (flush_stdout):
      * xdisp.c (dump_glyph_row, dump_glyph_matrix, dump_glyph):
      Mark as externally visible.
      * dispnew.c (check_window_matrix_pointers): Now static.
      * dispnew.c (window_to_frame_vpos):
      * xfns.c (unwind_create_frame):
      * xterm.c (x_check_font): Remove unused local.
      * scroll.c (CHECK_BOUNDS):
      * xfaces.c (cache_fache): Rename local to avoid shadowing.
      * xfns.c, w32fns.c (image_cache_refcount, dpyinfo_refcount): Now static.
      * xdisp.c (check_window_end): Now a no-op if !XASSERTS.
      (debug_first_unchanged_at_end_vpos, debug_last_unchanged_at_beg_vpos)
      (debug_dvpos, debug_dy, debug_delta, debug_delta_bytes, debug_end_vpos):
      Now static.
      (debug_method_add): Use va_list and vsprintf rather than relying
      on undefined behavior with wrong number of arguments.
      (dump_glyph, dump_glyph_row, Fdump_glyph_matrix):
      Don't assume ptrdiff_t and EMACS_INT are the same width as int.
      In this code, it's OK to assume C99 behavior for ptrdiff_t formats
      since we're not interested in debugging glyphs with old libraries.
      * xfaces.c (cache_face): Move debugging code earlier; this pacifies
      GCC 4.6.0's static checking.
      85fece3e
  6. 21 Jun, 2011 3 commits
  7. 18 Jun, 2011 1 commit
    • Chong Yidong's avatar
      Fixes for GLYPH_DEBUG. · 7d7d0045
      Chong Yidong authored
      * dispnew.c (add_window_display_history): Use BVAR.
      
      * xdisp.c (debug_method_add): Use BVAR.
      (check_window_end, dump_glyph_matrix, dump_glyph)
      (dump_glyph_row, dump_glyph_string): Convert arglist to ANSI C.
      
      * xfaces.c (check_lface_attrs, check_lface, dump_realized_face):
      Likewise.
      
      * xfns.c (Fx_create_frame, x_create_tip_frame): Delay image cache
      check till after the cache is created in init_frame_faces.
      7d7d0045
  8. 17 Jun, 2011 2 commits
  9. 14 Jun, 2011 1 commit
    • Paul Eggert's avatar
      Variadic C functions now count arguments with ptrdiff_t. · f66c7cf8
      Paul Eggert authored
      This partly undoes my 2011-03-30 change, which replaced int with size_t.
      Back then I didn't know that the Emacs coding style prefers signed int.
      Also, in the meantime I found a few more instances where arguments
      were being counted with int, which may truncate counts on 64-bit
      machines, or EMACS_INT, which may be unnecessarily wide.
      * lisp.h (struct Lisp_Subr.function.aMANY)
      (DEFUN_ARGS_MANY, internal_condition_case_n, safe_call):
      Arg counts are now ptrdiff_t, not size_t.
      All variadic functions and their callers changed accordingly.
      (struct gcpro.nvars): Now size_t, not size_t.  All uses changed.
      * bytecode.c (exec_byte_code): Check maxdepth for overflow,
      to avoid potential buffer overrun.  Don't assume arg counts fit in 'int'.
      * callint.c (Fcall_interactively): Check arg count for overflow,
      to avoid potential buffer overrun.  Use signed char, not 'int',
      for 'varies' array, so that we needn't bother to check its size
      calculation for overflow.
      * editfns.c (Fformat): Use ptrdiff_t, not EMACS_INT, to count args.
      * eval.c (apply_lambda):
      * fns.c (Fmapconcat): Use XFASTINT, not XINT, to get args length.
      (struct textprop_rec.argnum): Now ptrdiff_t, not int.  All uses changed.
      (mapconcat): Use ptrdiff_t, not int and EMACS_INT, to count args.
      f66c7cf8
  10. 13 Jun, 2011 3 commits
    • Paul Eggert's avatar
      GLYPH_CODE_FACE returns EMACS_INT, not int. · 9910e595
      Paul Eggert authored
      * dispextern.h (merge_faces):
      * xfaces.c (merge_faces):
      * xdisp.c (get_next_display_element):
      (next_element_from_display_vector): Don't assume EMACS_INT fits in int.
      9910e595
    • Paul Eggert's avatar
      * character.h (CHAR_VALID_P): Remove unused parameter. · 2638320e
      Paul Eggert authored
      * fontset.c, lisp.h, xdisp.c: All uses changed.
      2638320e
    • Paul Eggert's avatar
      Make sure a 64-bit char is never passed to CHAR_STRING. · 13bdea59
      Paul Eggert authored
      Otherwise, CHAR_STRING would do the wrong thing on a 64-bit platform,
      by silently ignoring the top 32 bits, allowing some values
      that were far too large to be valid characters.
      * character.h: Include <verify.h>.
      (CHAR_STRING, CHAR_STRING_ADVANCE): Verify that the character
      arguments are no wider than unsigned, as a compile-time check
      to prevent future regressions in this area.
      * data.c (Faset):
      * editfns.c (Fchar_to_string, general_insert_function, Finsert_char):
      (Fsubst_char_in_region):
      * fns.c (concat):
      * xdisp.c (decode_mode_spec_coding):
      Adjust to CHAR_STRING's new requirement.
      * editfns.c (Finsert_char, Fsubst_char_in_region):
      * fns.c (concat): Check that character args are actually
      characters.  Without this test, these functions did the wrong
      thing with wildly out-of-range values on 64-bit hosts.
      13bdea59
  11. 10 Jun, 2011 1 commit
    • Martin Rudalics's avatar
      Move window resize code from window.c to window.el. · 562dd5e9
      Martin Rudalics authored
      * window.c: Remove declarations of Qwindow_size_fixed,
      window_min_size_1, window_min_size_2, window_min_size,
      size_window, window_fixed_size_p, enlarge_window, delete_window.
      Remove static from declaration of Qdelete_window, it's
      temporarily needed by Fbury_buffer.
      (replace_window): Don't assign orig_top_line and
      orig_total_lines.
      (Fdelete_window, delete_window): Remove.  Window deletion is
      handled by window.el.
      (window_loop): Remove DELETE_OTHER_WINDOWS case.  Replace
      Fdelete_window calls with calls to Qdelete_window.
      (Fdelete_other_windows): Remove.  Deleting other windows is
      handled by window.el.
      (window_fixed_size_p): Remove.  Fixed-sizeness of windows is
      handled in window.el.
      (window_min_size_2, window_min_size_1, window_min_size): Remove.
      Window minimum sizes are handled in window.el.
      (shrink_windows, size_window, set_window_height)
      (set_window_width, change_window_heights, window_height)
      (window_width, CURBEG, CURSIZE, enlarge_window)
      (adjust_window_trailing_edge, Fadjust_window_trailing_edge)
      (Fenlarge_window, Fshrink_window): Remove.  Window resizing is
      handled in window.el.
      (make_dummy_parent): Rename to make_parent_window and give it a
      second argument horflag.
      (make_window): Don't set resize_proportionally any more.
      (Fsplit_window): Remove.  Windows are split in window.el.
      (save_restore_action, save_restore_orig_size)
      (shrink_window_lowest_first, save_restore_orig_size): Remove.
      Resize mini windows in window.el.
      (grow_mini_window, shrink_mini_window): Implement by calling
      Qresize_root_window_vertically, resize_window_check and
      resize_window_apply.
      (saved_window, Fset_window_configuration, save_window_save): Do
      not handle orig_top_line, orig_total_lines, and
      resize_proportionally.
      (window_min_height, window_min_width): Move to window.el.
      (keys_of_window): Move bindings for delete-other-windows,
      split-window, delete-window and enlarge-window to window.el.
      
      * buffer.c: Temporarily extern Qdelete_window.
      (Fbury_buffer): Temporarily call Qdelete_window instead of
      Fdelete_window (Fbury_buffer will move to window.el soon).
      
      * frame.c (set_menu_bar_lines_1): Remove code handling
      orig_top_line and orig_total_lines.
      
      * dispnew.c (adjust_frame_glyphs_initially): Don't use
      set_window_height but set heights directly.
      (change_frame_size_1): Use resize_frame_windows.
      
      * xdisp.c (init_xdisp): Don't use set_window_height but set
      heights directly.
      
      * xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines): Use
      resize_frame_windows instead of change_window_heights and run
      run_window_configuration_change_hook.
      
      * w32fns.c (x_set_tool_bar_lines): Use resize_frame_windows
      instead of change_window_heights and run
      run_window_configuration_change_hook.
      
      * window.el (window-min-height, window-min-width): Move here
      from window.c.  Add defcustoms and rewrite doc-strings.
      (resize-mini-window, resize-window): New functions.
      (adjust-window-trailing-edge, enlarge-window, shrink-window):
      Move here from window.c.
      (maximize-window, minimize-window): New functions.
      (delete-window, delete-other-windows, split-window): Move here
      from window.c.
      (window-split-min-size): New function.
      (split-window-keep-point): Mention split-window-above-each-other
      instead of split-window-vertically.
      (split-window-above-each-other, split-window-vertically): Rename
      split-window-vertically to split-window-above-each-other and
      provide defalias for old definition.
      (split-window-side-by-side, split-window-horizontally): Rename
      split-window-horizontally to split-window-side-by-side and provide
      defalias for the old definition.
      (ctl-x-map): Move bindings for delete-window,
      delete-other-windows and enlarge-window here from window.c.
      Replace bindings for split-window-vertically and
      split-window-horizontally by bindings for
      split-window-above-each-other and split-window-side-by-side.
      
      * cus-start.el (all): Remove entries for window-min-height and
      window-min-width.  Add entries for window-splits and
      window-nest.
      562dd5e9
  12. 05 Jun, 2011 1 commit
  13. 31 May, 2011 1 commit
  14. 28 May, 2011 4 commits
    • Paul Eggert's avatar
      [ChangeLog] · 55d4c1b2
      Paul Eggert authored
      Use 'inline', not 'INLINE'.
      * configure.in, autogen/config.in (INLINE): Remove.
      [lib-src/ChangeLog]
      Use 'inline', not 'INLINE'.
      * etags.c (hash): Now inline unconditionally.
      * make-docfile.c (put_char): inline, not INLINE.
      [nt/ChangeLog]
      Use 'inline', not 'INLINE'.
      * config.nt (INLINE): Remove.
      [src/ChangeLog]
      Use 'inline', not 'INLINE'.
      * alloc.c, fontset.c (INLINE): Remove.
      * alloc.c, bidi.c, charset.c, coding.c, dispnew.c, fns.c, image.c:
      * intervals.c, keyboard.c, process.c, syntax.c, textprop.c, w32term.c:
      * xdisp.c, xfaces.c, xterm.c: Replace all uses of INLINE with inline.
      * gmalloc.c (register_heapinfo): Use inline unconditionally.
      * lisp.h (LISP_MAKE_RVALUE): Use inline, not __inline__.
      55d4c1b2
    • Eli Zaretskii's avatar
      Fix cursor motion across display strings covering reordered text. · 0e14fe90
      Eli Zaretskii authored
       src/xdisp.c (set_cursor_from_row): Set start and stop points
       according to the row's direction when priming the loop that looks
       for the glyph on which to display cursor.
       (single_display_spec_intangible_p): Function deleted.
       (display_prop_intangible_p): Reimplement to call
       handle_display_spec instead of single_display_spec_intangible_p.
       Accept 3 additional arguments needed by handle_display_spec.  This
       fixes incorrect cursor motion across display property with complex
       values: lists, `(when COND...)' forms, etc.
       (single_display_spec_string_p): Support property values that are
       lists with the argument STRING its top-level element.
       (display_prop_string_p): Fix the condition for processing a
       property that is a list to be consistent with handle_display_spec.
       src/keyboard.c (adjust_point_for_property): Adjust the call to
       display_prop_intangible_p to its new signature.
       src/dispextern.h (display_prop_intangible_p): Adjust prototype.
      0e14fe90
    • Eli Zaretskii's avatar
      Fix cursor motion near overlays covering reordered text. · c40e2fb2
      Eli Zaretskii authored
       src/xdisp.c (set_cursor_from_row): Set start and stop points of the
       loop that looks for the glyph on which to display cursor according
       to the row's direction.
      c40e2fb2
    • Eli Zaretskii's avatar
  15. 25 May, 2011 2 commits
  16. 21 May, 2011 1 commit
    • Eli Zaretskii's avatar
      Discovery of replacing display properties now uses the same code · fc6f18ce
      Eli Zaretskii authored
      as the display engine.  Tested OK with display properties whose
      value is a list.
      
       src/dispextern.h (struct bidi_it): New member frame_window_p.
       (bidi_init_it, compute_display_string_pos): Update prototypes.
       src/bidi.c (bidi_fetch_char): Accept additional argument
       FRAME_WINDOW_P and pass it to compute_display_string_pos.  All
       callers changed.
       (bidi_init_it): Accept additional argument FRAME_WINDOW_P and use
       it to initialize the frame_window_p member of struct bidi_it.
       src/xdisp.c (handle_display_spec): New function, refactored from the
       last portion of handle_display_prop.
       (compute_display_string_pos): Accept additional argument
       FRAME_WINDOW_P.  Call handle_display_spec to determine whether the
       value of a `display' property is a "replacing spec".
       (handle_single_display_spec): Accept 2 additional arguments BUFPOS
       and FRAME_WINDOW_P.  If IT is NULL, don't set up the iterator from
       the display property, but just return a value indicating whether
       the display property will replace the characters it covers.
       (Fcurrent_bidi_paragraph_direction): Initialize the nchars and
       frame_window_p members of struct bidi_it.
      fc6f18ce
  17. 14 May, 2011 3 commits
    • Eli Zaretskii's avatar
      Remove kludgey save and restore of IT->position for push_it. · 683a44f7
      Eli Zaretskii authored
       src/xdisp.c (push_it): Accept second argument POSITION, where pop_it
       should jump to continue iteration.
      683a44f7
    • Eli Zaretskii's avatar
      Text covered by `display' overlays is correctly reordered. · 7b600102
      Eli Zaretskii authored
      Cursor positioning is not yet right near the overlay.
      
       src/xdisp.c (compute_display_string_pos): Non-trivial implementation.
       (compute_display_string_end): New function.
       src/dispextern.h (compute_display_string_end): Declare prototype.
       src/bidi.c (bidi_resolve_explicit_1): Use ZV for disp_pos.
       (bidi_fetch_char): Implement support for runs of characters
       covered by display strings.
      7b600102
    • Eli Zaretskii's avatar
      Refactoring with bidi_fetch_char tested and debugged. · 102ebb00
      Eli Zaretskii authored
       src/bidi.c (bidi_fetch_char): Accept also character position
       corresponding to BYTEPOS.  All callers changed.
       (bidi_cache_iterator_state, bidi_resolve_explicit_1)
       (bidi_resolve_explicit, bidi_resolve_weak)
       (bidi_level_of_next_char, bidi_move_to_visually_next): Abort if
       bidi_it->nchars is non-positive.
       (bidi_level_of_next_char): Don't try to lookup the cache for the
       next/previous character if nothing is cached there yet, or if we
       were just reseat()'ed to a new position.
       (bidi_paragraph_init, bidi_resolve_explicit_1)
       (bidi_level_of_next_char): Fix arguments in the calls to
       bidi_fetch_char.
      102ebb00
  18. 10 May, 2011 2 commits
    • Eli Zaretskii's avatar
      Started work on reordering display strings. Refactor FETCH_CHAR. · 182ce2d2
      Eli Zaretskii authored
      Only compiled, not tested.
      
       src/xdisp.c (compute_display_string_pos): New function.
       (reseat_1): Initialize bidi_it.disp_pos.
       src/bidi.c (bidi_copy_it): Use offsetof.
       (bidi_fetch_char, bidi_fetch_char_advance): New functions.
       (bidi_cache_search, bidi_cache_iterator_state)
       (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak)
       (bidi_level_of_next_char, bidi_move_to_visually_next): Support
       character positions inside a run of characters covered by a
       display string.
       (bidi_paragraph_init, bidi_resolve_explicit_1)
       (bidi_level_of_next_char): Call bidi_fetch_char and
       bidi_fetch_char_advance instead of FETCH_CHAR and
       FETCH_CHAR_ADVANCE.
       (bidi_init_it): Initialize new members.
       (LRE_CHAR, RLE_CHAR, PDF_CHAR, LRO_CHAR, RLO_CHAR): Remove macro
       definitions.
       (bidi_explicit_dir_char): Lookup character type in bidi_type_table,
       instead of using explicit *_CHAR codes.
       (bidi_resolve_explicit, bidi_resolve_weak): Use
       FETCH_MULTIBYTE_CHAR instead of FETCH_CHAR, as reordering of
       bidirectional text is supported only in multibyte buffers.
       src/dispextern.h (struct bidi_it): New members nchars and disp_pos.
       ch_len is now EMACS_INT.
       (compute_display_string_pos): Declare prototype.
      182ce2d2
    • U. Ser's avatar
      fix many doubled-word typos · 9b053e76
      U. Ser authored
      9b053e76
  19. 09 May, 2011 1 commit
    • Eli Zaretskii's avatar
      Backport revisions... · 14fe7b53
      Eli Zaretskii authored
      Backport revisions 2011-04-24T05:30:24Z!eggert@cs.ucla.edu..2011-04-25T19:40:22Z!eggert@cs.ucla.edu (inclusive) from trunk (bug#8623)
      
      	The next log entry shows the actual changes by Paul Eggert.
      
       Fix a problem with aliasing and vector headers.
       GCC 4.6.0 optimizes based on type-based alias analysis.  For
       example, if b is of type struct buffer * and v of type struct
       Lisp_Vector *, then gcc -O2 was incorrectly assuming that &b->size
       != &v->size, and therefore "v->size = 1; b->size = 2; return
       v->size;" must therefore return 1.  This assumption is incorrect
       for Emacs, since it type-puns struct Lisp_Vector * with many other
       types.  To fix this problem, this patch adds a new type struct
       vector_header that documents the constraints on layout of vectors
       and pseudovectors, and helps optimizing compilers not get fooled
       by Emacs's type punning.  It also adds the macros XSETTYPED_PVECTYPE
       XSETTYPED_PSEUDOVECTOR, TYPED_PSEUDOVECTORP, for similar reasons.
       src/lisp.h (XVECTOR_SIZE): New convenience macro.  All previous uses of
       XVECTOR (foo)->size replaced to use this macro, to avoid the hassle
       of writing XVECTOR (foo)->header.size.
       src/lisp.h: Say "vectorlike header" rather than "vector header.
       (struct vectorlike_header): Rename from struct vector_header.
       (XVECTORLIKE_HEADER_SIZE): Renamed from XVECTOR_HEADER_SIZE.
       All uses changed.
       (XVECTOR_HEADER_SIZE): New macro, for use in XSETPSEUDOVECTOR.
       (XSETTYPED_PVECTYPE): New macro, specifying the name of the size
       member.
       (XSETPVECTYPE): Rewrite in terms of new macro.
       (XSETPVECTYPESIZE): New macro, specifying both type and size.
       This is a bit clearer, and further avoids the possibility of
       undesirable aliasing.
       (XSETTYPED_PSEUDOVECTOR): New macro, specifying the size.
       (XSETPSEUDOVECTOR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR
       and XVECTOR_HEADER_SIZE.
       (XSETSUBR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR and XSIZE,
       since Lisp_Subr is a special case (no "next" field).
       (ASIZE): Rewrite in terms of XVECTOR_SIZE.
       (struct vector_header): New type.
       (TYPED_PSEUDOVECTORP): New macro, also specifying the C type of the
       object, to help avoid aliasing.
       (PSEUDOVECTORP): Rewrite in terms of TYPED_PSEUDOVECTORP.
       (SUBRP): Likewise, since Lisp_Subr is a special case.
       src/lisp.h (struct Lisp_Vector, struct Lisp_Char_Table):
       (struct Lisp_Sub_Char_Table, struct Lisp_Bool_Vector):
       (struct Lisp_Hash_Table): Combine first two members into a single
       struct vector_header member.  All uses of "size" and "next" members
       changed to be "header.size" and "header.next".
       src/buffer.h (struct buffer): Likewise.
       src/font.h (struct font_spec, struct font_entity, struct font): Likewise.
       src/frame.h (struct frame): Likewise.
       src/process.h (struct Lisp_Process): Likewise.
       src/termhooks.h (struct terminal): Likewise.
       src/window.c (struct save_window_data, struct saved_window): Likewise.
       src/window.h (struct window): Likewise.
       src/alloc.c (allocate_buffer, Fmake_bool_vector, allocate_pseudovector):
       Use XSETPVECTYPESIZE, not XSETPVECTYPE, to avoid aliasing problems.
       src/buffer.c (init_buffer_once): Likewise.
       src/lread.c (defsubr): Use XSETTYPED_PVECTYPE, since Lisp_Subr is a
       special case.
       src/process.c (Fformat_network_address): Use local var for size,
       for brevity.
       src/fns.c (vector): Remove; this old hack is no longer needed.
       src/bytecode.c (exec_byte_code): Don't use XVECTOR before CHECK_VECTOR.
      14fe7b53
  20. 29 Apr, 2011 2 commits
    • Paul Eggert's avatar
      * lisp.h (EMACS_INTPTR): Remove. All uses changed to intptr_t. · d01a7826
      Paul Eggert authored
      (EMACS_UINTPTR): Likewise, with uintptr_t.
      d01a7826
    • Paul Eggert's avatar
      Prefer intptr_t/uintptr_t for integers the same widths as pointers. · 8ac068ac
      Paul Eggert authored
      This removes an assumption that EMACS_INT and long are the same
      width as pointers.  The assumption is true for Emacs porting targets
      now, but we want to make other targets possible.
      * lisp.h: Include <inttypes.h>, for INTPTR_MAX, UINTPTR_MAX.
      (EMACS_INTPTR, EMACS_UINTPTR): New macros.
      In the rest of the code, change types of integers that hold casted
      pointers to EMACS_INTPTR and EMACS_UINTPTR, systematically
      replacing EMACS_INT, long, EMACS_UINT, and unsigned long.
      (XTYPE): Don't cast arg to EMACS_UINT; normally is not needed.
      (XSET): Cast type of XTYPE arg to EMACS_INTPTR; it is needed here.
      No need to cast type when ORing.
      (XPNTR): Return a value of type EMACS_INTPTR or EMACS_UINTPTR.
      * alloc.c (lisp_align_malloc): Remove a no-longer-needed cast.
      * doc.c (store_function_docstring): Use EMACS_INTPTR, so as not to
      assume EMACS_INT is the same width as char *.
      * gtkutil.c (xg_gtk_scroll_destroy, xg_tool_bar_button_cb):
      (xg_tool_bar_callback, xg_tool_bar_help_callback, xg_make_tool_item):
      Remove no-longer-needed casts.
      (xg_create_scroll_bar, xg_tool_bar_button_cb, xg_tool_bar_callback):
      (xg_tool_bar_help_callback, xg_make_tool_item):
      Use EMACS_INTPTR to hold an integer
      that will be cast to void *; this can avoid a GCC warning
      if EMACS_INT is not the same width as void *.
      * menu.c (find_and_call_menu_selection): Remove no-longer-needed cast.
      * xdisp.c (display_echo_area_1, resize_mini_window_1):
      (current_message_1, set_message_1):
      Use a local to convert to proper width without a cast.
      * xmenu.c (dialog_selection_callback): Likewise.
      8ac068ac
  21. 25 Apr, 2011 2 commits
    • Paul Eggert's avatar
      * lisp.h: (XVECTOR_SIZE): Remove. All uses replaced with ASIZE. · 77b37c05
      Paul Eggert authored
      (ASIZE): Now contains previous implementation of XVECTOR_SIZE
      instead of invoking XVECTOR_SIZE.
      77b37c05
    • Paul Eggert's avatar
      lisp.h: Fix a problem with aliasing and vector headers. · eab3844f
      Paul Eggert authored
      GCC 4.6.0 optimizes based on type-based alias analysis.  For
      example, if b is of type struct buffer * and v of type struct
      Lisp_Vector *, then gcc -O2 was incorrectly assuming that &b->size
      != &v->size, and therefore "v->size = 1; b->size = 2; return
      v->size;" must therefore return 1.  This assumption is incorrect
      for Emacs, since it type-puns struct Lisp_Vector * with many other
      types.  To fix this problem, this patch adds a new type struct
      vector_header that documents the constraints on layout of vectors
      and pseudovectors, and helps optimizing compilers not get fooled
      by Emacs's type punning.  It also adds the macros XSETTYPED_PVECTYPE
      XSETTYPED_PSEUDOVECTOR, TYPED_PSEUDOVECTORP, for similar reasons.
      * lisp.h (XVECTOR_SIZE): New convenience macro.  All previous uses of
      XVECTOR (foo)->size replaced to use this macro, to avoid the hassle
      of writing XVECTOR (foo)->header.size.
      (XVECTOR_HEADER_SIZE): New macro, for use in XSETPSEUDOVECTOR.
      (XSETTYPED_PVECTYPE): New macro, specifying the name of the size
      member.
      (XSETPVECTYPE): Rewrite in terms of new macro.
      (XSETPVECTYPESIZE): New macro, specifying both type and size.
      This is a bit clearer, and further avoids the possibility of
      undesirable aliasing.
      (XSETTYPED_PSEUDOVECTOR): New macro, specifying the size.
      (XSETPSEUDOVECTOR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR
      and XVECTOR_HEADER_SIZE.
      (XSETSUBR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR and XSIZE,
      since Lisp_Subr is a special case (no "next" field).
      (ASIZE): Rewrite in terms of XVECTOR_SIZE.
      (struct vector_header): New type.
      (TYPED_PSEUDOVECTORP): New macro, also specifying the C type of the
      object, to help avoid aliasing.
      (PSEUDOVECTORP): Rewrite in terms of TYPED_PSEUDOVECTORP.
      (SUBRP): Likewise, since Lisp_Subr is a special case.
      * lisp.h (struct Lisp_Vector, struct Lisp_Char_Table):
      (struct Lisp_Sub_Char_Table, struct Lisp_Bool_Vector):
      (struct Lisp_Hash_Table): Combine first two members into a single
      struct vector_header member.  All uses of "size" and "next" members
      changed to be "header.size" and "header.next".
      * buffer.h (struct buffer): Likewise.
      * font.h (struct font_spec, struct font_entity, struct font): Likewise.
      * frame.h (struct frame): Likewise.
      * process.h (struct Lisp_Process): Likewise.
      * termhooks.h (struct terminal): Likewise.
      * window.c (struct save_window_data, struct saved_window): Likewise.
      * window.h (struct window): Likewise.
      * alloc.c (allocate_buffer, Fmake_bool_vector, allocate_pseudovector):
      Use XSETPVECTYPESIZE, not XSETPVECTYPE, to avoid aliasing problems.
      * buffer.c (init_buffer_once): Likewise.
      * lread.c (defsubr): Use XSETTYPED_PVECTYPE, since Lisp_Subr is a
      special case.
      * process.c (Fformat_network_address): Use local var for size,
      for brevity.
      eab3844f
  22. 24 Apr, 2011 1 commit
    • Eli Zaretskii's avatar
      Minor cleanup in src/xdisp.c. · eb35682e
      Eli Zaretskii authored
       src/xdisp.c (handle_single_display_spec): Rename the
       display_replaced_before_p argument into display_replaced_p, to
       make it consistent with the commentary.  Fix typos in the
       commentary.
      eb35682e
  23. 23 Apr, 2011 1 commit
    • Eli Zaretskii's avatar
      Fix doprnt so it could be used safely in `verror'. (Bug#8435) · e6c3da20
      Eli Zaretskii authored
       src/doprnt.c: Include limits.h.
       (SIZE_MAX): New macro.
       (doprnt): Return a size_t value.  2nd arg is now size_t.  Many
       local variables are now size_t instead of int or unsigned.
       Improve overflow protection.  Support `l' modifier for integer
       conversions.  Support %l conversion.  Don't assume an EMACS_INT
       argument for integer conversions and for %c.
       src/lisp.h (doprnt): Restore prototype.
       src/makefile.w32-in ($(BLD)/callint.$(O)): Depend on
       $(SRC)/character.h.
       src/Makefile.in (base_obj): Add back doprnt.o.
       src/deps.mk (doprnt.o): Add back prerequisites.
       (callint.o): Depend on character.h.
       src/eval.c (internal_lisp_condition_case): Include the handler
       representation in the error message.
       (verror): Call doprnt instead of vsnprintf.  Fix an off-by-one bug
       when breaking from the loop.
       src/xdisp.c (vmessage): Call doprnt instead of vsnprintf.
       src/callint.c (Fcall_interactively): When displaying error message
       about invalid control letter, pass the character's codepoint, not
       a pointer to its multibyte form.  Improve display of the character
       in octal and display also its hex code.
       src/character.c (char_string): Use %x to display the (unsigned)
       codepoint of an invalid character, to avoid displaying a bogus
       negative value.
       src/font.c (check_otf_features): Pass SDATA of SYMBOL_NAME to
       `error', not SYMBOL_NAME itself.
       src/coding.c (Fencode_sjis_char, Fencode_big5_char): Use %c for
       character arguments to `error'.
       src/charset.c (check_iso_charset_parameter): Fix incorrect argument
       to `error' in error message about FINAL_CHAR argument.  Make sure
       FINAL_CHAR is a character, and use %c when it is passed as
       argument to `error'.
      e6c3da20
  24. 19 Apr, 2011 1 commit
    • Paul Eggert's avatar
      Replace pEd with more-general pI, and fix some printf arg casts. · c2982e87
      Paul Eggert authored
      * lisp.h (pI): New macro, generalizing old pEd macro to other
      conversion specifiers.  For example, use "...%"pI"d..." rather
      than "...%"pEd"...".
      (pEd): Remove.  All uses replaced with similar uses of pI.
      * src/m/amdx86-64.h, src/m/ia64.h, src/m/ibms390x.h: Likewise.
      * alloc.c (check_pure_size): Don't overflow by converting size to int.
      * bidi.c (bidi_dump_cached_states): Use pI to avoid cast.
      * data.c (Fnumber_to_string): Use pI instead of if-then-else-abort.
      * dbusbind.c (xd_append_arg): Use pI to avoid cast.
      (Fdbus_method_return_internal, Fdbus_method_error_internal): Likewise.
      * font.c (font_unparse_xlfd): Avoid potential buffer overrun on
      64-bit hosts.
      (font_unparse_xlfd, font_unparse_fcname): Use pI to avoid casts.
      * keyboard.c (record_char, modify_event_symbol): Use pI to avoid casts.
      * print.c (safe_debug_print, print_object): Likewise.
      (print_object): Don't overflow by converting EMACS_INT or EMACS_UINT
      to int.
      Use pI instead of if-then-else-abort.  Use %p to avoid casts.
      * process.c (Fmake_network_process): Use pI to avoid cast.
      * region-cache.c (pp_cache): Likewise.
      * xdisp.c (decode_mode_spec): Likewise.
      * xrdb.c (x_load_resources) [USE_MOTIF]: Use pI to avoid undefined
      behavior on 64-bit hosts with printf arg.
      * xselect.c (x_queue_event): Use %p to avoid casts.
      (x_stop_queuing_selection_requests): Likewise.
      (x_get_window_property): Don't truncate byte count to an 'int'
      when tracing.
      c2982e87
  25. 18 Apr, 2011 1 commit
    • Chong Yidong's avatar
      Allow glyphless-char-display to distinguish between X and text terminals. · 16a43933
      Chong Yidong authored
      Use this for Tabulated List mode.
      
      * lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode): Use a custom
      glyphless-char-display table.
      (tabulated-list-glyphless-char-display): New var.
      
      * src/term.c (produce_glyphless_glyph): Handle cons cell entry in
      glyphless-char-display.
      
      * src/xdisp.c (lookup_glyphless_char_display)
      (produce_glyphless_glyph): Handle cons cell entry in
      glyphless-char-display.
      (Vglyphless_char_display): Document it.
      16a43933