aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/data.c46
1 files changed, 31 insertions, 15 deletions
diff --git a/src/data.c b/src/data.c
index 681054ff8cb..ea611ad1abf 100644
--- a/src/data.c
+++ b/src/data.c
@@ -248,7 +248,9 @@ a fixed set of types. */)
248 return XSUBR (object)->max_args == UNEVALLED ? Qspecial_form 248 return XSUBR (object)->max_args == UNEVALLED ? Qspecial_form
249 : SUBR_NATIVE_COMPILEDP (object) ? Qsubr_native_elisp 249 : SUBR_NATIVE_COMPILEDP (object) ? Qsubr_native_elisp
250 : Qprimitive_function; 250 : Qprimitive_function;
251 case PVEC_CLOSURE: return Qcompiled_function; 251 case PVEC_CLOSURE:
252 return CONSP (AREF (object, CLOSURE_CODE))
253 ? Qinterpreted_function : Qbyte_code_function;
252 case PVEC_BUFFER: return Qbuffer; 254 case PVEC_BUFFER: return Qbuffer;
253 case PVEC_CHAR_TABLE: return Qchar_table; 255 case PVEC_CHAR_TABLE: return Qchar_table;
254 case PVEC_BOOL_VECTOR: return Qbool_vector; 256 case PVEC_BOOL_VECTOR: return Qbool_vector;
@@ -518,12 +520,32 @@ DEFUN ("subrp", Fsubrp, Ssubrp, 1, 1, 0,
518 return Qnil; 520 return Qnil;
519} 521}
520 522
523DEFUN ("closurep", Fclosurep, Sclosurep,
524 1, 1, 0,
525 doc: /* Return t if OBJECT is a function of type `closure'. */)
526 (Lisp_Object object)
527{
528 if (CLOSUREP (object))
529 return Qt;
530 return Qnil;
531}
532
521DEFUN ("byte-code-function-p", Fbyte_code_function_p, Sbyte_code_function_p, 533DEFUN ("byte-code-function-p", Fbyte_code_function_p, Sbyte_code_function_p,
522 1, 1, 0, 534 1, 1, 0,
523 doc: /* Return t if OBJECT is a byte-compiled function object. */) 535 doc: /* Return t if OBJECT is a byte-compiled function object. */)
524 (Lisp_Object object) 536 (Lisp_Object object)
525{ 537{
526 if (CLOSUREP (object)) 538 if (CLOSUREP (object) && STRINGP (AREF (object, CLOSURE_CODE)))
539 return Qt;
540 return Qnil;
541}
542
543DEFUN ("interpreted-function-p", Finterpreted_function_p,
544 Sinterpreted_function_p, 1, 1, 0,
545 doc: /* Return t if OBJECT is a function of type `interpreted-function'. */)
546 (Lisp_Object object)
547{
548 if (CLOSUREP (object) && CONSP (AREF (object, CLOSURE_CODE)))
527 return Qt; 549 return Qt;
528 return Qnil; 550 return Qnil;
529} 551}
@@ -1174,17 +1196,11 @@ Value, if non-nil, is a list (interactive SPEC). */)
1174 else if (CONSP (fun)) 1196 else if (CONSP (fun))
1175 { 1197 {
1176 Lisp_Object funcar = XCAR (fun); 1198 Lisp_Object funcar = XCAR (fun);
1177 if (EQ (funcar, Qclosure) 1199 if (EQ (funcar, Qlambda))
1178 || EQ (funcar, Qlambda))
1179 { 1200 {
1180 Lisp_Object form = Fcdr (XCDR (fun)); 1201 Lisp_Object form = Fcdr (XCDR (fun));
1181 if (EQ (funcar, Qclosure))
1182 form = Fcdr (form);
1183 Lisp_Object spec = Fassq (Qinteractive, form); 1202 Lisp_Object spec = Fassq (Qinteractive, form);
1184 if (NILP (spec) && VALID_DOCSTRING_P (CAR_SAFE (form))) 1203 if (NILP (Fcdr (Fcdr (spec))))
1185 /* A "docstring" is a sign that we may have an OClosure. */
1186 genfun = true;
1187 else if (NILP (Fcdr (Fcdr (spec))))
1188 return spec; 1204 return spec;
1189 else 1205 else
1190 return list2 (Qinteractive, Fcar (Fcdr (spec))); 1206 return list2 (Qinteractive, Fcar (Fcdr (spec)));
@@ -1257,12 +1273,9 @@ The value, if non-nil, is a list of mode name symbols. */)
1257 else if (CONSP (fun)) 1273 else if (CONSP (fun))
1258 { 1274 {
1259 Lisp_Object funcar = XCAR (fun); 1275 Lisp_Object funcar = XCAR (fun);
1260 if (EQ (funcar, Qclosure) 1276 if (EQ (funcar, Qlambda))
1261 || EQ (funcar, Qlambda))
1262 { 1277 {
1263 Lisp_Object form = Fcdr (XCDR (fun)); 1278 Lisp_Object form = Fcdr (XCDR (fun));
1264 if (EQ (funcar, Qclosure))
1265 form = Fcdr (form);
1266 return Fcdr (Fcdr (Fassq (Qinteractive, form))); 1279 return Fcdr (Fcdr (Fassq (Qinteractive, form)));
1267 } 1280 }
1268 } 1281 }
@@ -4224,7 +4237,8 @@ syms_of_data (void)
4224 DEFSYM (Qspecial_form, "special-form"); 4237 DEFSYM (Qspecial_form, "special-form");
4225 DEFSYM (Qprimitive_function, "primitive-function"); 4238 DEFSYM (Qprimitive_function, "primitive-function");
4226 DEFSYM (Qsubr_native_elisp, "subr-native-elisp"); 4239 DEFSYM (Qsubr_native_elisp, "subr-native-elisp");
4227 DEFSYM (Qcompiled_function, "compiled-function"); 4240 DEFSYM (Qbyte_code_function, "byte-code-function");
4241 DEFSYM (Qinterpreted_function, "interpreted-function");
4228 DEFSYM (Qbuffer, "buffer"); 4242 DEFSYM (Qbuffer, "buffer");
4229 DEFSYM (Qframe, "frame"); 4243 DEFSYM (Qframe, "frame");
4230 DEFSYM (Qvector, "vector"); 4244 DEFSYM (Qvector, "vector");
@@ -4289,6 +4303,8 @@ syms_of_data (void)
4289 defsubr (&Smarkerp); 4303 defsubr (&Smarkerp);
4290 defsubr (&Ssubrp); 4304 defsubr (&Ssubrp);
4291 defsubr (&Sbyte_code_function_p); 4305 defsubr (&Sbyte_code_function_p);
4306 defsubr (&Sinterpreted_function_p);
4307 defsubr (&Sclosurep);
4292 defsubr (&Smodule_function_p); 4308 defsubr (&Smodule_function_p);
4293 defsubr (&Schar_or_string_p); 4309 defsubr (&Schar_or_string_p);
4294 defsubr (&Sthreadp); 4310 defsubr (&Sthreadp);