emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

scratch/object-type 637b22ee275 2/2: Followup changes to `cl-type-of`


From: Stefan Monnier
Subject: scratch/object-type 637b22ee275 2/2: Followup changes to `cl-type-of`
Date: Thu, 14 Mar 2024 12:53:38 -0400 (EDT)

branch: scratch/object-type
commit 637b22ee275762e3a88342f7c0c1e9a997f2ed97
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    Followup changes to `cl-type-of`
    
    These changes came up while working on `cl-type-of` but are not
    directly related to the new `cl-type-of`.
    The BASE_PURESIZE bump was needed at some point on one of my
    machine, not sure why.
    
    * src/puresize.h (BASE_PURESIZE): Bump up.
    * src/sqlite.c (bind_value): Don't use `Ftype_of`.
    * lisp/emacs-lisp/seq.el (seq-remove-at-position): Simplify.
    * lisp/emacs-lisp/cl-preloaded.el (finalizer):
    New (previously missing) type.
    * doc/lispref/objects.texi (Type Predicates): Minor tweaks.
---
 doc/lispref/objects.texi        |  6 +++---
 lisp/emacs-lisp/cl-preloaded.el |  1 +
 lisp/emacs-lisp/seq.el          |  3 +--
 src/lisp.h                      |  6 ++----
 src/puresize.h                  |  2 +-
 src/sqlite.c                    | 17 ++++++-----------
 6 files changed, 14 insertions(+), 21 deletions(-)

diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index 279f449a994..804f52ba8ac 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -1485,8 +1485,8 @@ types that are not built into Emacs.
 @subsection Type Descriptors
 
   A @dfn{type descriptor} is a @code{record} which holds information
-about a type.  Slot 1 in the record must be a symbol naming the type, and
-@code{type-of} relies on this to return the type of @code{record}
+about a type.  The first slot in the record must be a symbol naming the type,
+and @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.
 
@@ -2175,7 +2175,7 @@ with references to further information.
 function @code{type-of}.  Recall that each object belongs to one and
 only one primitive type; @code{type-of} tells you which one (@pxref{Lisp
 Data Types}).  But @code{type-of} knows nothing about non-primitive
-types.  In most cases, it is more convenient to use type predicates than
+types.  In most cases, it is preferable to use type predicates than
 @code{type-of}.
 
 @defun type-of object
diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el
index 3e89afea452..0e8704a93c1 100644
--- a/lisp/emacs-lisp/cl-preloaded.el
+++ b/lisp/emacs-lisp/cl-preloaded.el
@@ -365,6 +365,7 @@
 (cl--define-built-in-type buffer atom)
 (cl--define-built-in-type window atom)
 (cl--define-built-in-type process atom)
+(cl--define-built-in-type finalizer atom)
 (cl--define-built-in-type window-configuration atom)
 (cl--define-built-in-type overlay atom)
 (cl--define-built-in-type number-or-marker atom
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 20077db9e60..a20cff16982 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -362,8 +362,7 @@ the result.
 
 The result is a sequence of the same type as SEQUENCE."
   (seq-concatenate
-   (let ((type (type-of sequence)))
-     (if (eq type 'cons) 'list type))
+   (if (listp sequence) 'list (type-of sequence))
    (seq-subseq sequence 0 n)
    (seq-subseq sequence (1+ n))))
 
diff --git a/src/lisp.h b/src/lisp.h
index f353e4956eb..f86758c88fb 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -569,10 +569,8 @@ enum Lisp_Fwd_Type
    your object -- this way, the same object could be used to represent
    several disparate C structures.
 
-   In addition, you need to add switch branches in data.c for Ftype_of.
-
-   You also need to add the new type to the constant
-   `cl--typeof-types' in lisp/emacs-lisp/cl-preloaded.el.  */
+   In addition, you need to add switch branches in data.c for Fcl_type_of
+   and `cl--define-builtin-type` in lisp/emacs-lisp/cl-preloaded.el.  */
 
 
 /* A Lisp_Object is a tagged pointer or integer.  Ordinarily it is a
diff --git a/src/puresize.h b/src/puresize.h
index ac5d2da30dc..2a716872832 100644
--- a/src/puresize.h
+++ b/src/puresize.h
@@ -47,7 +47,7 @@ INLINE_HEADER_BEGIN
 #endif
 
 #ifndef BASE_PURESIZE
-#define BASE_PURESIZE (2750000 + SYSTEM_PURESIZE_EXTRA + 
SITELOAD_PURESIZE_EXTRA)
+#define BASE_PURESIZE (3000000 + SYSTEM_PURESIZE_EXTRA + 
SITELOAD_PURESIZE_EXTRA)
 #endif
 
 /* Increase BASE_PURESIZE by a ratio depending on the machine's word size.  */
diff --git a/src/sqlite.c b/src/sqlite.c
index 7a018b28aa4..261080da673 100644
--- a/src/sqlite.c
+++ b/src/sqlite.c
@@ -349,9 +349,7 @@ bind_values (sqlite3 *db, sqlite3_stmt *stmt, Lisp_Object 
values)
          value = XCAR (values);
          values = XCDR (values);
        }
-      Lisp_Object type = Ftype_of (value);
-
-      if (EQ (type, Qstring))
+      if (STRINGP (value))
        {
          Lisp_Object encoded;
          bool blob = false;
@@ -385,14 +383,11 @@ bind_values (sqlite3 *db, sqlite3_stmt *stmt, Lisp_Object 
values)
                                       SSDATA (encoded), SBYTES (encoded),
                                       NULL);
        }
-      else if (EQ (type, Qinteger))
-       {
-         if (BIGNUMP (value))
-           ret = sqlite3_bind_int64 (stmt, i + 1, bignum_to_intmax (value));
-         else
-           ret = sqlite3_bind_int64 (stmt, i + 1, XFIXNUM (value));
-       }
-      else if (EQ (type, Qfloat))
+      else if (FIXNUMP (value))
+       ret = sqlite3_bind_int64 (stmt, i + 1, XFIXNUM (value));
+      else if (BIGNUMP (value))
+       ret = sqlite3_bind_int64 (stmt, i + 1, bignum_to_intmax (value));
+      else if (FLOATP (value))
        ret = sqlite3_bind_double (stmt, i + 1, XFLOAT_DATA (value));
       else if (NILP (value))
        ret = sqlite3_bind_null (stmt, i + 1);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]