diff options
| author | Paul Eggert | 2015-01-25 08:33:41 -0800 |
|---|---|---|
| committer | Paul Eggert | 2015-01-25 09:11:25 -0800 |
| commit | a3689d3c661fe36df971c875760f8d500b5ae994 (patch) | |
| tree | 80521f91ec481457cb7f8fcb9f88b3a42e557c8e /src/alloc.c | |
| parent | c4e54f962714056df6c57c21f694544f237d5f4c (diff) | |
| download | emacs-a3689d3c661fe36df971c875760f8d500b5ae994.tar.gz emacs-a3689d3c661fe36df971c875760f8d500b5ae994.zip | |
Count MANY function args more reliably
* alloc.c (Fgc_status, purecopy, unbind_to, garbage_collect_1):
* buffer.c (Fbuffer_list, Fkill_buffer):
* callint.c (read_file_name, Fcall_interactively):
* charset.c (Fset_charset_priority, syms_of_charset):
* chartab.c (uniprop_encode_value_numeric):
* coding.c (syms_of_coding):
* composite.c (syms_of_composite):
* data.c (wrong_range):
* dbusbind.c (syms_of_dbusbind):
* dired.c (file_attributes):
* editfns.c (Fdecode_time, update_buffer_properties, format2):
* eval.c (run_hook_with_args_2, apply1, call1, call2, call3)
(call4, call5, call6, call7):
* fileio.c (Finsert_file_contents, choose_write_coding_system)
(Fcar_less_than_car, build_annotations, auto_save_error):
* filelock.c (get_boot_time):
* fns.c (internal_equal, nconc2, Fyes_or_no_p, Fwidget_apply):
(maybe_resize_hash_table, secure_hash):
* font.c (font_style_to_value, font_open_by_name, Flist_fonts):
* fontset.c (fontset_add, Fset_fontset_font):
* ftfont.c (ftfont_lookup_cache):
* gtkutil.c (xg_get_font):
* insdel.c (signal_before_change, signal_after_change):
* keymap.c (append_key):
* lread.c (load_warn_old_style_backquotes, Fload, init_lread):
* minibuf.c (Fread_buffer):
* print.c (print_preprocess):
* process.c (Fformat_network_address, Fmake_network_process)
(server_accept_connection):
* sound.c (Fplay_sound_internal):
* term.c (Fsuspend_tty, Fresume_tty):
* window.c (window_list):
* xdisp.c (run_redisplay_end_trigger_hook, add_to_log)
(message_with_string):
* xfaces.c (Fx_list_fonts):
* xfont.c (syms_of_xfont):
* xselect.c (x_handle_selection_request)
(x_handle_selection_clear, x_clear_frame_selections)
(x_clipboard_manager_error_1):
Prefer CALLMANY and CALLN to counting args by hand.
* doc.c (reread_doc_file): Remove unused code.
* fns.c (concat2, concat3): Redo to avoid need for local-var vector.
(cmpfn_user_defined, hashfn_user_defined, Fmaphash):
Prefer call1 and call2 to Ffuncall.
* keyboard.c (safe_run_hook_funcall, safe_run_hooks):
Use struct literal rather than a local var, for simplicity.
* keymap.c (where_is_internal): Use NULL rather than a pointer
to unused args.
* lisp.h (CALLMANY, CALLN): New macros.
* sound.c (Fplay_sound_internal): Coalesce duplicate code.
Fixes: bug#19634
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 108 |
1 files changed, 46 insertions, 62 deletions
diff --git a/src/alloc.c b/src/alloc.c index 571b2b03a29..9aa94b8a559 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -4408,19 +4408,17 @@ DEFUN ("gc-status", Fgc_status, Sgc_status, 0, 0, "", | |||
| 4408 | doc: /* Show information about live and zombie objects. */) | 4408 | doc: /* Show information about live and zombie objects. */) |
| 4409 | (void) | 4409 | (void) |
| 4410 | { | 4410 | { |
| 4411 | Lisp_Object args[8], zombie_list = Qnil; | 4411 | Lisp_Object zombie_list = Qnil; |
| 4412 | EMACS_INT i; | 4412 | for (int i = 0; i < min (MAX_ZOMBIES, nzombies); i++) |
| 4413 | for (i = 0; i < min (MAX_ZOMBIES, nzombies); i++) | ||
| 4414 | zombie_list = Fcons (zombies[i], zombie_list); | 4413 | zombie_list = Fcons (zombies[i], zombie_list); |
| 4415 | args[0] = build_string ("%d GCs, avg live/zombies = %.2f/%.2f (%f%%), max %d/%d\nzombies: %S"); | 4414 | return CALLN (Fmessage, |
| 4416 | args[1] = make_number (ngcs); | 4415 | build_string ("%d GCs, avg live/zombies = %.2f/%.2f" |
| 4417 | args[2] = make_float (avg_live); | 4416 | " (%f%%), max %d/%d\nzombies: %S"), |
| 4418 | args[3] = make_float (avg_zombies); | 4417 | make_number (ngcs), make_float (avg_live), |
| 4419 | args[4] = make_float (avg_zombies / avg_live / 100); | 4418 | make_float (avg_zombies), |
| 4420 | args[5] = make_number (max_live); | 4419 | make_float (avg_zombies / avg_live / 100), |
| 4421 | args[6] = make_number (max_zombies); | 4420 | make_number (max_live), make_number (max_zombies), |
| 4422 | args[7] = zombie_list; | 4421 | zombie_list); |
| 4423 | return Fmessage (8, args); | ||
| 4424 | } | 4422 | } |
| 4425 | 4423 | ||
| 4426 | #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */ | 4424 | #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */ |
| @@ -5297,10 +5295,8 @@ purecopy (Lisp_Object obj) | |||
| 5297 | } | 5295 | } |
| 5298 | else | 5296 | else |
| 5299 | { | 5297 | { |
| 5300 | Lisp_Object args[2]; | 5298 | Lisp_Object fmt = build_pure_c_string ("Don't know how to purify: %S"); |
| 5301 | args[0] = build_pure_c_string ("Don't know how to purify: %S"); | 5299 | Fsignal (Qerror, list1 (CALLN (Fformat, fmt, obj))); |
| 5302 | args[1] = obj; | ||
| 5303 | Fsignal (Qerror, (Fcons (Fformat (2, args), Qnil))); | ||
| 5304 | } | 5300 | } |
| 5305 | 5301 | ||
| 5306 | if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */ | 5302 | if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */ |
| @@ -5678,56 +5674,44 @@ garbage_collect_1 (void *end) | |||
| 5678 | } | 5674 | } |
| 5679 | 5675 | ||
| 5680 | unbind_to (count, Qnil); | 5676 | unbind_to (count, Qnil); |
| 5681 | { | ||
| 5682 | Lisp_Object total[11]; | ||
| 5683 | int total_size = 10; | ||
| 5684 | |||
| 5685 | total[0] = list4 (Qconses, make_number (sizeof (struct Lisp_Cons)), | ||
| 5686 | bounded_number (total_conses), | ||
| 5687 | bounded_number (total_free_conses)); | ||
| 5688 | |||
| 5689 | total[1] = list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)), | ||
| 5690 | bounded_number (total_symbols), | ||
| 5691 | bounded_number (total_free_symbols)); | ||
| 5692 | |||
| 5693 | total[2] = list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)), | ||
| 5694 | bounded_number (total_markers), | ||
| 5695 | bounded_number (total_free_markers)); | ||
| 5696 | |||
| 5697 | total[3] = list4 (Qstrings, make_number (sizeof (struct Lisp_String)), | ||
| 5698 | bounded_number (total_strings), | ||
| 5699 | bounded_number (total_free_strings)); | ||
| 5700 | |||
| 5701 | total[4] = list3 (Qstring_bytes, make_number (1), | ||
| 5702 | bounded_number (total_string_bytes)); | ||
| 5703 | 5677 | ||
| 5704 | total[5] = list3 (Qvectors, | 5678 | Lisp_Object total[] = { |
| 5705 | make_number (header_size + sizeof (Lisp_Object)), | 5679 | list4 (Qconses, make_number (sizeof (struct Lisp_Cons)), |
| 5706 | bounded_number (total_vectors)); | 5680 | bounded_number (total_conses), |
| 5707 | 5681 | bounded_number (total_free_conses)), | |
| 5708 | total[6] = list4 (Qvector_slots, make_number (word_size), | 5682 | list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)), |
| 5709 | bounded_number (total_vector_slots), | 5683 | bounded_number (total_symbols), |
| 5710 | bounded_number (total_free_vector_slots)); | 5684 | bounded_number (total_free_symbols)), |
| 5711 | 5685 | list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)), | |
| 5712 | total[7] = list4 (Qfloats, make_number (sizeof (struct Lisp_Float)), | 5686 | bounded_number (total_markers), |
| 5713 | bounded_number (total_floats), | 5687 | bounded_number (total_free_markers)), |
| 5714 | bounded_number (total_free_floats)); | 5688 | list4 (Qstrings, make_number (sizeof (struct Lisp_String)), |
| 5715 | 5689 | bounded_number (total_strings), | |
| 5716 | total[8] = list4 (Qintervals, make_number (sizeof (struct interval)), | 5690 | bounded_number (total_free_strings)), |
| 5717 | bounded_number (total_intervals), | 5691 | list3 (Qstring_bytes, make_number (1), |
| 5718 | bounded_number (total_free_intervals)); | 5692 | bounded_number (total_string_bytes)), |
| 5719 | 5693 | list3 (Qvectors, | |
| 5720 | total[9] = list3 (Qbuffers, make_number (sizeof (struct buffer)), | 5694 | make_number (header_size + sizeof (Lisp_Object)), |
| 5721 | bounded_number (total_buffers)); | 5695 | bounded_number (total_vectors)), |
| 5696 | list4 (Qvector_slots, make_number (word_size), | ||
| 5697 | bounded_number (total_vector_slots), | ||
| 5698 | bounded_number (total_free_vector_slots)), | ||
| 5699 | list4 (Qfloats, make_number (sizeof (struct Lisp_Float)), | ||
| 5700 | bounded_number (total_floats), | ||
| 5701 | bounded_number (total_free_floats)), | ||
| 5702 | list4 (Qintervals, make_number (sizeof (struct interval)), | ||
| 5703 | bounded_number (total_intervals), | ||
| 5704 | bounded_number (total_free_intervals)), | ||
| 5705 | list3 (Qbuffers, make_number (sizeof (struct buffer)), | ||
| 5706 | bounded_number (total_buffers)), | ||
| 5722 | 5707 | ||
| 5723 | #ifdef DOUG_LEA_MALLOC | 5708 | #ifdef DOUG_LEA_MALLOC |
| 5724 | total_size++; | 5709 | list4 (Qheap, make_number (1024), |
| 5725 | total[10] = list4 (Qheap, make_number (1024), | 5710 | bounded_number ((mallinfo ().uordblks + 1023) >> 10), |
| 5726 | bounded_number ((mallinfo ().uordblks + 1023) >> 10), | 5711 | bounded_number ((mallinfo ().fordblks + 1023) >> 10)), |
| 5727 | bounded_number ((mallinfo ().fordblks + 1023) >> 10)); | ||
| 5728 | #endif | 5712 | #endif |
| 5729 | retval = Flist (total_size, total); | 5713 | }; |
| 5730 | } | 5714 | retval = CALLMANY (Flist, total); |
| 5731 | 5715 | ||
| 5732 | #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES | 5716 | #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES |
| 5733 | { | 5717 | { |