aboutsummaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorPaul Eggert2018-07-26 00:34:10 -0700
committerPaul Eggert2018-07-26 00:39:17 -0700
commit4a56ca5bbfabbb9c581828cd91648346e6b03844 (patch)
tree90b804ea4ec22a8b7be181f0b505b57c40a85c27 /etc
parent19f5f7b19b0dcdae87476a3fd51c41f840b2b80f (diff)
downloademacs-4a56ca5bbfabbb9c581828cd91648346e6b03844.tar.gz
emacs-4a56ca5bbfabbb9c581828cd91648346e6b03844.zip
%o and %x can now format signed integers
Optionally treat integers as signed numbers with %o and %x format specifiers, instead of treating them as a machine-dependent two’s complement representation. This option is more machine-independent, allows formats like "#x%x" to be useful for reading later, and is better-insulated for future changes involving bignums. Setting the new variable ‘binary-as-unsigned’ to nil enables the new behavior (Bug#32252). This is a simplified version of the change proposed in: https://lists.gnu.org/r/emacs-devel/2018-07/msg00763.html I simplified that proposal by omitting bitwidth modifiers, as I could not find an any example uses in the Emacs source code that needed them and doing them correctly would have been quite a bit more work for apparently little benefit. * doc/lispref/strings.texi (Formatting Strings): Document that %x and %o format negative integers in a platform-dependent way. Also, document how to format numbers so that the same values can be read back in. * etc/NEWS: Document the change. * src/editfns.c (styled_format): Treat integers as signed numbers even with %o and %x, if binary-as-unsigned is nil. Support the + and space flags with %o and %x, since they’re about signs. (syms_of_editfns): New variable binary-as-unsigned. * test/src/editfns-tests.el (read-large-integer): Test that maximal integers can be read after printing with all integer formats, if binary-as-unsigned is nil.
Diffstat (limited to 'etc')
-rw-r--r--etc/NEWS9
1 files changed, 9 insertions, 0 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 995ceb67b78..089fc4053b1 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -812,6 +812,15 @@ between two strings.
812** 'print-quoted' now defaults to t, so if you want to see 812** 'print-quoted' now defaults to t, so if you want to see
813(quote x) instead of 'x you will have to bind it to nil where applicable. 813(quote x) instead of 'x you will have to bind it to nil where applicable.
814 814
815+++
816** Numbers formatted via %o or %x may now be formatted as signed integers.
817This avoids problems in calls like (read (format "#x%x" -1)), and is
818more compatible with bignums, a planned feature. To get this
819behavior, set the experimental variable binary-as-unsigned to nil,
820and if the new behavior breaks your code please email
82132252@debbugs.gnu.org. Because %o and %x can now format signed
822integers, they now support the + and space flags.
823
815** To avoid confusion caused by "smart quotes", the reader signals an 824** To avoid confusion caused by "smart quotes", the reader signals an
816error when reading Lisp symbols which begin with one of the following 825error when reading Lisp symbols which begin with one of the following
817quotation characters: ‘’‛“”‟〞"'. A symbol beginning with such a 826quotation characters: ‘’‛“”‟〞"'. A symbol beginning with such a