Function: cl-type-of
cl-type-of is a function defined in data.c.
Signature
(cl-type-of OBJECT)
Documentation
Return a symbol representing the type of OBJECT.
The returned symbol names the most specific possible type of the object.
for example, (cl-type-of nil) returns null.
The specific type returned may change depending on Emacs versions,
so we recommend you use cl-typep, cl-typecase, or other predicates
rather than compare the return value of this function against
a fixed set of types.
Probably introduced at or before Emacs version 30.1.
Source Code
// Defined in /usr/src/emacs/src/data.c
{
switch (XTYPE (object))
{
case Lisp_Int0:
case Lisp_Int1:
return Qfixnum;
case Lisp_Symbol:
return NILP (object) ? Qnull
: EQ (object, Qt) ? Qboolean
: Qsymbol;
case Lisp_String:
return Qstring;
case Lisp_Cons:
return Qcons;
case Lisp_Vectorlike:
/* WARNING!! Keep 'cl--type-hierarchy' in sync with this code!! */
switch (PSEUDOVECTOR_TYPE (XVECTOR (object)))
{
case PVEC_NORMAL_VECTOR: return Qvector;
case PVEC_BIGNUM: return Qbignum;
case PVEC_MARKER: return Qmarker;
case PVEC_SYMBOL_WITH_POS: return Qsymbol_with_pos;
case PVEC_OVERLAY: return Qoverlay;
case PVEC_FINALIZER: return Qfinalizer;
case PVEC_USER_PTR: return Quser_ptr;
case PVEC_WINDOW_CONFIGURATION: return Qwindow_configuration;
case PVEC_PROCESS: return Qprocess;
case PVEC_WINDOW: return Qwindow;
case PVEC_SUBR:
return XSUBR (object)->max_args == UNEVALLED ? Qspecial_form
: NATIVE_COMP_FUNCTIONP (object) ? Qnative_comp_function
: Qprimitive_function;
case PVEC_CLOSURE:
return CONSP (AREF (object, CLOSURE_CODE))
? Qinterpreted_function : Qbyte_code_function;
case PVEC_BUFFER: return Qbuffer;
case PVEC_CHAR_TABLE: return Qchar_table;
case PVEC_BOOL_VECTOR: return Qbool_vector;
case PVEC_FRAME: return Qframe;
case PVEC_HASH_TABLE: return Qhash_table;
case PVEC_OBARRAY: return Qobarray;
case PVEC_FONT:
if (FONT_SPEC_P (object))
return Qfont_spec;
if (FONT_ENTITY_P (object))
return Qfont_entity;
if (FONT_OBJECT_P (object))
return Qfont_object;
else
emacs_abort (); /* return Qfont? */
case PVEC_THREAD: return Qthread;
case PVEC_MUTEX: return Qmutex;
case PVEC_CONDVAR: return Qcondition_variable;
case PVEC_TERMINAL: return Qterminal;
case PVEC_RECORD:
{
Lisp_Object t = AREF (object, 0);
if (RECORDP (t) && 1 < PVSIZE (t))
/* Return the type name field of the class! */
return AREF (t, 1);
else
return t;
}
case PVEC_MODULE_FUNCTION:
return Qmodule_function;
case PVEC_NATIVE_COMP_UNIT:
return Qnative_comp_unit;
case PVEC_XWIDGET:
return Qxwidget;
case PVEC_XWIDGET_VIEW:
return Qxwidget_view;
case PVEC_TS_PARSER:
return Qtreesit_parser;
case PVEC_TS_NODE:
return Qtreesit_node;
case PVEC_TS_COMPILED_QUERY:
return Qtreesit_compiled_query;
case PVEC_SQLITE:
return Qsqlite;
case PVEC_SUB_CHAR_TABLE:
return Qsub_char_table;
/* "Impossible" cases. */
case PVEC_MISC_PTR:
case PVEC_OTHER:
case PVEC_FREE: ;
}
emacs_abort ();
case Lisp_Float:
return Qfloat;
default:
emacs_abort ();
}
}