]> git.eshelyaron.com Git - emacs.git/commitdiff
Update documentation for type semantics of records.
authorLars Brinkhoff <lars@nocrew.org>
Wed, 5 Apr 2017 06:42:25 +0000 (08:42 +0200)
committerLars Brinkhoff <lars@nocrew.org>
Thu, 6 Apr 2017 18:30:28 +0000 (20:30 +0200)
* objects.texi (Record Type): improve description of what
`type-of' returns for records.
(Type Descriptors): new section.
* elisp.texi: reference it.
* records.texi (Records): reference it.  Document behaviour when type
slot is a record.

* alloc.c (Fmake_record, Frecord): mention type desciptors.

doc/lispref/elisp.texi
doc/lispref/objects.texi
doc/lispref/records.texi
src/alloc.c

index 3a348aae98eae83b0e7494d4fc9db3f268f794f9..bff3112d73bb02fa8d95d48209655c6ca398c975 100644 (file)
@@ -316,6 +316,7 @@ Programming Types
 * Primitive Function Type::     A function written in C, callable from Lisp.
 * Byte-Code Type::      A function written in Lisp, then compiled.
 * Record Type::         Compound objects with programmer-defined types.
+* Type Descriptors::    Objects holding information about types.
 * Autoload Type::       A type used for automatically loading seldom-used
                           functions.
 * Finalizer Type::      Runs code when no longer reachable.
index 90cafbef642f7ccba27a36d44e3d33bcc9af5488..cc9320987f2d51bc74242686c83137a98349838e 100644 (file)
@@ -156,6 +156,7 @@ latter are unique to Emacs Lisp.
 * Primitive Function Type::     A function written in C, callable from Lisp.
 * Byte-Code Type::      A function written in Lisp, then compiled.
 * Record Type::         Compound objects with programmer-defined types.
+* Type Descriptors::    Objects holding information about types.
 * Autoload Type::       A type used for automatically loading seldom-used
                         functions.
 * Finalizer Type::      Runs code when no longer reachable.
@@ -1359,6 +1360,18 @@ types that are not built into Emacs.
 
   @xref{Records}, for functions that work with records.
 
+@node Type Descriptors
+@subsection Type Descriptors
+
+  A @dfn{type decriptor} is a @code{record} which holds information
+about a type.  Slot 1 in the record must be a symbol naming the type.
+@code{type-of} relies on this to return the type of @code{record}
+objects.  No other type descriptor slot is used by Emacs; they are
+free for use by Lisp extensions.
+
+An example of a type descriptor is any instance of
+@code{cl-structure-class}.
+
 @node Autoload Type
 @subsection Autoload Type
 
@@ -2037,7 +2050,8 @@ This function returns a symbol naming the primitive type of
 @code{marker}, @code{mutex}, @code{overlay}, @code{process},
 @code{string}, @code{subr}, @code{symbol}, @code{thread},
 @code{vector}, @code{window}, or @code{window-configuration}.
-However, if @var{object} is a record, its first slot is returned.
+However, if @var{object} is a record, the type specified by its first
+slot is returned; @ref{Records}.
 
 @example
 (type-of 1)
index a6c560cbcb9bff196b581fa030e03c8f4dd0a666..a924bafbb965126434f147471f10d7eb70437050 100644 (file)
@@ -19,6 +19,10 @@ implementation records can have at most 4096 slots, whereas vectors
 can be much larger.  Like arrays, records use zero-origin indexing:
 the first slot has index 0.
 
+  The type slot should be a symbol or a type descriptor.  If it's a
+type descriptor, the symbol naming its type will be returned;
+@ref{Type Descriptors}.  Any other kind of object is returned as-is.
+
   The printed representation of records is @samp{#s} followed by a
 list specifying the contents.  The first list element must be the
 record type.  The following elements are the record slots.
index a58824fb0f3eaf708e1f0934c1601170d3532860..fad84b8a0b30c853c415ef8bf1402b0d55ff0ac0 100644 (file)
@@ -3411,8 +3411,9 @@ allocate_record (EMACS_INT count)
 
 DEFUN ("make-record", Fmake_record, Smake_record, 3, 3, 0,
        doc: /* Create a new record.
-TYPE is its type as returned by `type-of'.  SLOTS is the number of
-non-type slots, each initialized to INIT.  */)
+TYPE is its type as returned by `type-of'; it should be either a
+symbol or a type descriptor.  SLOTS is the number of non-type slots,
+each initialized to INIT.  */)
   (Lisp_Object type, Lisp_Object slots, Lisp_Object init)
 {
   CHECK_NATNUM (slots);
@@ -3427,8 +3428,9 @@ non-type slots, each initialized to INIT.  */)
 
 DEFUN ("record", Frecord, Srecord, 1, MANY, 0,
        doc: /* Create a new record.
-TYPE is its type as returned by `type-of'.  SLOTS is used to
-initialize the record slots with shallow copies of the arguments.
+TYPE is its type as returned by `type-of'; it should be either a
+symbol or a type descriptor.  SLOTS is used to initialize the record
+slots with shallow copies of the arguments.
 usage: (record TYPE &rest SLOTS) */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {