1. 25 Apr, 2011 1 commit
    • 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
      * 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
      (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.
      (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.
      (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.
  2. 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.
  3. 16 Apr, 2011 2 commits
  4. 15 Apr, 2011 1 commit
  5. 14 Apr, 2011 3 commits
    • Paul Eggert's avatar
    • Paul Eggert's avatar
      Undo the DEFUN->DEFUE change. · a7ca3326
      Paul Eggert authored
    • Paul Eggert's avatar
      * keyboard.c: Make symbols static if they're not exported. · 8a1414fa
      Paul Eggert authored
      (single_kboard, recent_keys_index, total_keys, recent_keys):
      (this_command_key_count_reset, raw_keybuf, raw_keybuf_count):
      (this_single_command_key_start, echoing, last_auto_save):
      (read_key_sequence_cmd, dribble, recursive_edit_unwind):
      (command_loop, echo_now, keyboard_init_hook, help_char_p):
      (quit_throw_to_read_char, command_loop_2, top_level_1, poll_timer):
      (Vlispy_mouse_stem, double_click_count):
      Now static.
      (force_auto_save_soon): Define only if SIGDANGER.
      (ignore_mouse_drag_p): Now static if
      !defined HAVE_WINDOW_SYSTEM || defined USE_GTK || defined HAVE_NS.
      (print_help): Remove; unused.
      (stop_character, last_timer_event): Mark as externally visible.
      * keyboard.h (ignore_mouse_drag_p): Declare only if
      defined HAVE_WINDOW_SYSTEM && !defined USE_GTK && !defined HAVE_NS.
      (echo_now, help_char_p, quit_throw_to_read_char): Remove decls.
      * lisp.h (echoing): Remove decl.
      (force_auto_save_soon): Declare only if SIGDANGER.
      * xdisp.c (redisplay_window): Simplify code, to make it more
      obvious that ignore_mouse_drag_p is not accessed if !defined
      USE_GTK && !defined HAVE_NS.
  6. 12 Apr, 2011 1 commit
    • Andreas Schwab's avatar
      Use xfree instead of free where appropriate (Bug#8437) · baad03f0
      Andreas Schwab authored
      * charset.c (Fclear_charset_maps): Use xfree instead of free.
      * keyboard.c (parse_tool_bar_item): Likewise.
      * sound.c (sound_cleanup, alsa_close): Likewise.
      * termcap.c (tgetent): Likewise.
      * xfns.c (x_default_font_parameter): Likewise.
      * xsettings.c (read_and_apply_settings): Likewise.
  7. 11 Apr, 2011 3 commits
    • Paul Eggert's avatar
      * commands.h (last_point_position, last_point_position_buffer): · 14a9c8df
      Paul Eggert authored
      (last_point_position_window): Remove decls.
      * keyboard.c: Make these variables static.
    • Paul Eggert's avatar
      Declare Lisp_Object Q* variables to be 'static' if not exproted. · 955cbe7b
      Paul Eggert authored
      This makes it easier for human readers (and static analyzers)
      to see whether these variables are used from other modules.
      * alloc.c, buffer.c, bytecode.c, callint.c, casetab.c, category.c:
      * ccl.c, character.c, charset.c, cmds.c, coding.c, composite.c:
      * data.c, dbusbind.c, dired.c, editfns.c, eval.c, fileio.c, fns.c:
      * font.c, frame.c, fringe.c, ftfont.c, image.c, keyboard.c, keymap.c:
      * lread.c, macros.c, minibuf.c, print.c, process.c, search.c:
      * sound.c, syntax.c, textprop.c, window.c, xdisp.c, xfaces.c, xfns.c:
      * xmenu.c, xselect.c:
      Declare Q* vars static if they are not used in other modules.
      * ccl.h, character.h, charset.h, coding.h, composite.h, font.h:
      * frame.h, intervals.h, keyboard.h, lisp.h, process.h, syntax.h:
      Remove decls of unexported vars.
      * keyboard.h (EVENT_HEAD_UNMODIFIED): Remove now-unused macro.
    • Paul Eggert's avatar
      Make Emacs functions such as Fatom 'static' by default. · 16a97296
      Paul Eggert authored
      This makes it easier for human readers (and static analyzers)
      to see whether these functions can be called from other modules.
      DEFUN now defines a static function.  To make the function external
      so that it can be used in other C modules, use the new macro DEFUE.
      * lisp.h (DEFINE_FUNC): New macro, with the old contents of DEFUN.
      (DEFUN): Rewrite in terms of DEFINE_FUNC.  It now generates a
      static function definition.  Use DEFUE if you want an extern one.
      (DEFUE, INFUN): New macros.
      (Funibyte_char_to_multibyte, Fsyntax_table_p, Finit_image_library):
      (Feval_region, Fbacktrace, Ffetch_bytecode, Fswitch_to_buffer):
      (Ffile_executable_p, Fmake_symbolic_link, Fcommand_execute):
      (Fget_process, Fdocumentation_property, Fbyte_code, Ffile_attributes):
      Remove decls, since these functions are now static.
      (Funintern, Fget_internal_run_time): New decls, since these functions
      were already external.
      * alloc.c, buffer.c, callint.c, callproc.c, casefiddle.c, casetab.c:
      * ccl.c, character.c, chartab.c, cmds.c, coding.c, data.c, dispnew.c:
      * doc.c, editfns.c, emacs.c, eval.c, fileio.c, filelock.c, floatfns.c:
      * fns.c, font.c, fontset.c, frame.c, image.c, indent.c:
      * keyboard.c, keymap.c, lread.c:
      * macros.c, marker.c, menu.c, minibuf.c, print.c, process.c, search.c:
      * syntax.c, term.c, terminal.c, textprop.c, undo.c:
      * window.c, xdisp.c, xfaces.c, xfns.c, xmenu.c, xsettings.c:
      Mark functions with DEFUE instead of DEFUN,
      if they are used in other modules.
      * buffer.c (Fset_buffer_major_mode, Fdelete_overlay): New forward
      decls for now-static functions.
      * buffer.h (Fdelete_overlay): Remove decl.
      * callproc.c (Fgetenv_internal): Mark as internal.
      * composite.c (Fremove_list_of_text_properties): Remove decl.
      (Fcomposition_get_gstring): New forward static decl.
      * composite.h (Fcomposite_get_gstring): Remove decl.
      * dired.c (Ffile_attributes): New forward static decl.
      * doc.c (Fdocumntation_property): New forward static decl.
      * eval.c (Ffetch_bytecode): New forward static decl.
      (Funintern): Remove extern decl; now in .h file where it belongs.
      * fileio.c (Fmake_symbolic_link): New forward static decl.
      * image.c (Finit_image_library): New forward static decl.
      * insdel.c (Fcombine_after_change_execute): Make forward decl static.
      * intervals.h (Fprevious_property_change):
      (Fremove_list_of_text_properties): Remove decls.
      * keyboard.c (Fthis_command_keys): Remove decl.
      (Fcommand_execute): New forward static decl.
      * keymap.c (Flookup_key): New forward static decl.
      (Fcopy_keymap): Now static.
      * keymap.h (Flookup_key): Remove decl.
      * process.c (Fget_process): New forward static decl.
      (Fprocess_datagram_address): Mark as internal.
      * syntax.c (Fsyntax_table_p): New forward static decl.
      (skip_chars): Remove duplicate decl.
      * textprop.c (Fprevious_property_change): New forward static decl.
      * window.c (Fset_window_fringes, Fset_window_scroll_bars):
      Now internal.
      (Fset_window_margins, Fset_window_vscroll): New forward static decls.
      * window.h (Fset_window_vscroll, Fset_window_margins): Remove decls.
  8. 09 Apr, 2011 1 commit
  9. 08 Apr, 2011 2 commits
  10. 07 Apr, 2011 1 commit
  11. 04 Apr, 2011 1 commit
  12. 02 Apr, 2011 3 commits
  13. 30 Mar, 2011 1 commit
  14. 28 Mar, 2011 1 commit
    • Stefan Monnier's avatar
      Don't reset post-command-hook to nil upon error. · f6d62986
      Stefan Monnier authored
      * src/eval.c (enum run_hooks_condition): Remove.
      (funcall_nil, funcall_not): New functions.
      (run_hook_with_args): Call each function through a `funcall' argument.
      Remove `cond' argument, now redundant.
      (Frun_hooks, Frun_hook_with_args, Frun_hook_with_args_until_success)
      (Frun_hook_with_args_until_failure): Adjust accordingly.
      (run_hook_wrapped_funcall, Frun_hook_wrapped): New functions.
      * src/keyboard.c (safe_run_hook_funcall): New function.
      (safe_run_hooks_1, safe_run_hooks_error, safe_run_hooks): On error,
      don't set the hook to nil, but remove the offending function instead.
      (Qcommand_hook_internal): Remove, unused.
      (syms_of_keyboard): Don't initialize Qcommand_hook_internal nor define
      * doc/lispref/commands.texi (Command Overview): post-command-hook is not reset
      to nil any more.
  15. 27 Mar, 2011 5 commits
  16. 26 Mar, 2011 1 commit
    • Juanma Barranquero's avatar
      src/*.h: Remove unused parameters and functions. · f868cd8a
      Juanma Barranquero authored
      * keyboard.h (timer_check, show_help_echo): Remove unused parameters.
      * keyboard.c (timer_check): Remove parameter `do_it_now',
        unused since 1996-04-12T06:01:29Z!rms@gnu.org.
        (show_help_echo): Remove parameter `ok_to_overwrite_keystroke_echo',
        unused since 2008-04-19T19:30:53Z!monnier@iro.umontreal.ca.
      * keyboard.c (read_char):
      * w32menu.c (w32_menu_display_help):
      * xmenu.c (show_help_event, menu_help_callback):
        Adjust calls to `show_help_echo'.
      * gtkutil.c (xg_maybe_add_timer):
      * keyboard.c (readable_events):
      * process.c (wait_reading_process_output):
      * xmenu.c (x_menu_wait_for_event): Adjust calls to `timer_check'.
      * insdel.c (adjust_markers_gap_motion):
        Remove; no-op since 1998-01-02T21:29:48Z!rms@gnu.org.
        (gap_left, gap_right): Don't call it.
  17. 25 Mar, 2011 1 commit
    • Juanma Barranquero's avatar
      nt/*.c, src/*.c: Remove unused variables. · 0f4a96b5
      Juanma Barranquero authored
      * nt/addpm.c (main): Remove unused variable `retval'.
      * nt/preprep.c (main): Remove unused variable `ptr'.
      * src/dispextern.h (glyph_matric): Use #if GLYPH_DEBUG, not #ifdef.
      * src/fileio.c (check_executable) [DOS_NT]: Remove unused variables `len'
        and `suffix'.
        (Fset_file_selinux_context) [HAVE_LIBSELINUX]: Move here declaration
        of variables specific to SELinux and computation of `encoded_absname'.
      * src/image.c (XPutPixel): Remove unused variable `height'.
      * src/keyboard.c (make_lispy_event): Remove unused variable `hpos'.
      * src/unexw32.c (get_section_info): Remove unused variable `section'.
      * src/w32.c (stat): Remove unused variables `drive_root' and `devtype'.
        (system_process_attributes): Remove unused variable `sess'.
        (sys_read): Remove unused variable `err'.
      * src/w32fns.c (top): Wrap variables with #if GLYPH_DEBUG, not #ifdef.
        (w32_wnd_proc): Remove unused variable `isdead'.
        (unwind_create_frame): Use #if GLYPH_DEBUG, not #ifdef.
        (Fx_server_max_request_size): Remove unused variable `dpyinfo'.
        (x_create_tip_frame): Remove unused variable `tem'.
      * src/w32inevt.c (w32_console_read_socket): Remove unused variable `no_events'.
      * src/w32term.c (x_draw_composite_glyph_string_foreground):
        Remove unused variable `width'.
  18. 24 Mar, 2011 1 commit
  19. 23 Mar, 2011 1 commit
  20. 15 Mar, 2011 2 commits
  21. 14 Mar, 2011 5 commits
  22. 25 Feb, 2011 1 commit
    • Stefan Monnier's avatar
      Get rid of funvec. · 876c194c
      Stefan Monnier authored
      * lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode): Handle new form of
      (byte-compile-close-variables, displaying-byte-compile-warnings):
      Add edebug spec.
      (byte-compile-toplevel-file-form): New fun, split out of
      (byte-compile-from-buffer): Use it to avoid applying cconv
      multiple times.
      (byte-compile): Only strip `function' if it's present.
      (byte-compile-lambda): Add `reserved-csts' argument.
      Use new lexenv arg of byte-compile-top-level.
      (byte-compile-reserved-constants): New var.
      (byte-compile-constants-vector): Obey it.
      (byte-compile-constants-vector): Handle new `byte-constant' form.
      (byte-compile-top-level): Add args `lexenv' and `reserved-csts'.
      (byte-compile-form): Don't check callargs here.
      (byte-compile-normal-call): Do it here instead.
      (byte-compile-resolve-unknown-constant): Remove, unused.
      (byte-compile-make-closure): Use `make-byte-code' rather than `curry',
      putting the environment into the "constant" pool.
      (byte-compile-get-closed-var): Use special byte-constant.
      * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Handle new
      intermediate special form `internal-make-vector'.
      (byte-optimize-lapcode): Handle new form of `byte-constant'.
      * lisp/help-fns.el (describe-function-1): Don't handle funvecs.
      * lisp/emacs-lisp/macroexp.el (macroexpand-all-1): Only convert quote to
      function if the content is a lambda expression, not if it's a closure.
      * emacs-lisp/eieio-come.el: Remove.
      * lisp/emacs-lisp/eieio.el: Don't require eieio-comp.
      (defmethod): Do a bit more work to find the body and wrap it into
      a function before passing it to eieio-defmethod.
      (eieio-defmethod): New arg `code' for it.
      * lisp/emacs-lisp/debug.el (debugger-setup-buffer): Don't hide things in
      debugger backtrace.
      * lisp/emacs-lisp/cl-extra.el (cl-macroexpand-all): Use backquotes, and be
      more careful when quoting a function value.
      * lisp/emacs-lisp/cconv.el (cconv-freevars): Accept defvar/defconst.
      (cconv-closure-convert-rec): Catch stray `internal-make-closure'.
      * lisp/Makefile.in (COMPILE_FIRST): Compile pcase and cconv early.
      * src/eval.c (Qcurry): Remove.
      (funcall_funvec): Remove.
      (funcall_lambda): Move new byte-code handling to reduce impact.
      Treat all args as lexical in the case of lexbind.
      (Fcurry): Remove.
      * src/data.c (Qfunction_vector): Remove.
      (Ffunvecp): Remove.
      * src/lread.c (read1): Revert to calling make_byte_code here.
      (read_vector): Don't call make_byte_code any more.
      * src/lisp.h (enum pvec_type): Rename back to PVEC_COMPILED.
      (XSETCOMPILED): Rename back from XSETFUNVEC.
      (FUNVEC_SIZE): Remove.
      (COMPILEDP): Rename back from FUNVECP.
      * src/fns.c (Felt): Remove unexplained FUNVEC check.
      * src/doc.c (Fdocumentation): Don't handle funvec.
      * src/alloc.c (make_funvec, Ffunvec): Remove.
      * doc/lispref/vol2.texi (Top):
      * doc/lispref/vol1.texi (Top):
      * doc/lispref/objects.texi (Programming Types, Funvec Type, Type Predicates):
      * doc/lispref/functions.texi (Functions, What Is a Function, FunctionCurrying):
      * doc/lispref/elisp.texi (Top): Remove mentions of funvec and curry.
  23. 16 Feb, 2011 1 commit
    • Tom Tromey's avatar
      Hide implementation of `struct kboard' · 1344aad4
      Tom Tromey authored
      	* callint.c (Fcall_interactively): Update.
      	* doc.c (Fsubstitute_command_keys): Update.
      	* cmds.c (Fself_insert_command): Update.
      	* keymap.c (Fcurrent_active_maps, Fkey_binding)
      	(Fdescribe_buffer_bindings): Update.
      	* macros.c (Fstart_kbd_macro, end_kbd_macro, Fend_kbd_macro)
      	(store_kbd_macro_char, Fcall_last_kbd_macro, Fexecute_kbd_macro):
      	* keyboard.c (echo_char, echo_dash, echo_now, cancel_echoing)
      	(echo_length, echo_truncate, cmd_error, command_loop_1)
      	(read_char, kbd_buffer_store_event_hold, make_lispy_event)
      	(menu_bar_items, tool_bar_items, read_char_minibuf_menu_prompt)
      	(read_key_sequence, Fcommand_execute, Fexecute_extended_command)
      	(Fdiscard_input, init_kboard, init_keyboard, mark_kboards):
      	* xfns.c (Fx_create_frame): Update.
      	* xterm.c (x_connection_closed, x_term_init): Update.
      	* term.c (term_get_fkeys_1, CONDITIONAL_REASSIGN, init_tty):
      	* window.c (window_scroll_pixel_based, window_scroll_line_based):
      	* frame.c (make_frame_without_minibuffer, Fhandle_switch_frame)
      	(delete_frame): Update.
      	* lisp.h (DEFVAR_KBOARD): Update for change to field names.
      	* keyboard.h (struct kboard): Rename all Lisp_Object fields.
      	(KBOARD_INTERNAL_FIELD, KVAR): New macros.