diff options
| author | Paul Eggert | 2012-06-25 19:33:51 -0700 |
|---|---|---|
| committer | Paul Eggert | 2012-06-25 19:33:51 -0700 |
| commit | 99027bdd81f63ea690394a153ef49a08f55e498d (patch) | |
| tree | b7b7083784549ae09d9e688441168627262d4b6d /src/data.c | |
| parent | cf38a720e81b545f90dc7be81891d94df6ed059a (diff) | |
| download | emacs-99027bdd81f63ea690394a153ef49a08f55e498d.tar.gz emacs-99027bdd81f63ea690394a153ef49a08f55e498d.zip | |
Use sprintf return value instead of invoking strlen on result.
In the old days this wasn't portable, since some sprintf
implementations returned char *. But they died out years ago and
Emacs already assumes sprintf returns int.
Similarly for float_to_string.
This patch speeds up (number-to-string 1000) by 3% on Fedora 15 x86-64.
* ccl.c (ccl_driver):
* character.c (string_escape_byte8):
* data.c (Fnumber_to_string):
* doprnt.c (doprnt):
* print.c (print_object):
* xdisp.c (message_dolog):
* xfns.c (syms_of_xfns):
Use sprintf or float_to_string result to avoid need to call strlen.
* data.c (Fnumber_to_string):
Use make_unibyte_string, since the string must be ASCII.
* lisp.h, print.c (float_to_string): Now returns int length.
* term.c (produce_glyphless_glyph):
Use sprintf result rather than recomputing it.
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/src/data.c b/src/data.c index cd4b14a9f9d..bd757cfdad1 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -2449,20 +2449,17 @@ Uses a minus sign if negative. | |||
| 2449 | NUMBER may be an integer or a floating point number. */) | 2449 | NUMBER may be an integer or a floating point number. */) |
| 2450 | (Lisp_Object number) | 2450 | (Lisp_Object number) |
| 2451 | { | 2451 | { |
| 2452 | char buffer[VALBITS]; | 2452 | char buffer[max (FLOAT_TO_STRING_BUFSIZE, INT_BUFSIZE_BOUND (EMACS_INT))]; |
| 2453 | int len; | ||
| 2453 | 2454 | ||
| 2454 | CHECK_NUMBER_OR_FLOAT (number); | 2455 | CHECK_NUMBER_OR_FLOAT (number); |
| 2455 | 2456 | ||
| 2456 | if (FLOATP (number)) | 2457 | if (FLOATP (number)) |
| 2457 | { | 2458 | len = float_to_string (buffer, XFLOAT_DATA (number)); |
| 2458 | char pigbuf[FLOAT_TO_STRING_BUFSIZE]; | 2459 | else |
| 2459 | 2460 | len = sprintf (buffer, "%"pI"d", XINT (number)); | |
| 2460 | float_to_string (pigbuf, XFLOAT_DATA (number)); | ||
| 2461 | return build_string (pigbuf); | ||
| 2462 | } | ||
| 2463 | 2461 | ||
| 2464 | sprintf (buffer, "%"pI"d", XINT (number)); | 2462 | return make_unibyte_string (buffer, len); |
| 2465 | return build_string (buffer); | ||
| 2466 | } | 2463 | } |
| 2467 | 2464 | ||
| 2468 | DEFUN ("string-to-number", Fstring_to_number, Sstring_to_number, 1, 2, 0, | 2465 | DEFUN ("string-to-number", Fstring_to_number, Sstring_to_number, 1, 2, 0, |