]> git.eshelyaron.com Git - emacs.git/commit
Document and enforce some properties for strings created by modules.
authorPhilipp Stephani <phst@google.com>
Sat, 12 Dec 2020 22:21:18 +0000 (23:21 +0100)
committerPhilipp Stephani <phst@google.com>
Sat, 12 Dec 2020 22:28:22 +0000 (23:28 +0100)
commit52e3ac6303292fdea8f441821a40f8f5ca31e3de
treebbf58178863524a092ef4230fcc1ffe73687d3c9
parent4bf98aecffe57648d15db90718134b00ac87ec3b
Document and enforce some properties for strings created by modules.

When creating multibyte or unibyte strings, we should guarantee the
following invariants:

- When creating empty strings, a NULL data pointer should be allowed.
  This often arises in practice if the string length isn't known in
  advance, and we don't want to unnecessarily trigger undefined
  behavior.  Since functions like memcpy might not accept NULL
  pointers, use the canonical empty string objects in this case.

- Nonzero strings should be guaranteed to be unique and mutable.
  These are the same guarantees expected from Lisp functions such as
  'make-string' or 'unibyte-string'.  On the other hand, empty strings
  might not be unique.

* src/emacs-module.c (module_make_string)
(module_make_unibyte_string): Correctly handle empty strings.

* test/src/emacs-module-resources/mod-test.c (Fmod_test_make_string):
New test function.
(emacs_module_init): Expose it.

* test/src/emacs-module-tests.el (mod-test-make-string/empty)
(mod-test-make-string/nonempty): New unit tests.

* doc/lispref/internals.texi (Module Values): Document properties and
corner cases for strings.
doc/lispref/internals.texi
src/emacs-module.c
test/src/emacs-module-resources/mod-test.c
test/src/emacs-module-tests.el