Subject: Re: bug#33294: xwidget-insert crashes Emacs

From: Stefan Monnier <[email-masked]>
Date: Fri, 09 Nov 2018 08:29:48 -0500

>> > I admit I don't understand why PVEC_XWIDGET and PVEC_XWIDGET_VIEW are
>> > in the "impossible" cases.  They are first-class Lisp objects, AFAICT.
>> If you say so, then they most likely are, indeed.  I personally didn't
>> (and still don't) know enough about those to know what to do with them.
> Can you tell what are the guidelines for putting a PVEC object into
> the "impossible" category in the context of type-of?

The "impossible" category is for when such objects can never be passed
to `type-of`, typically because they are not available to Elisp.

But there's no harm/risk to "allow" a particular kind of object even if
it's actually impossible for it to be passed to type-of.

Accordingly, I just installed the patch below into emacs-26.

        Stefan

diff --git a/src/data.c b/src/data.c
index 8d58cbd941..eea9ccedbb 100644
--- a/src/data.c
+++ b/src/data.c
@@ -276,10 +276,12 @@ for example, (type-of 1) returns `integer'.  */)
           }
         case PVEC_MODULE_FUNCTION:
           return Qmodule_function;
-        /* "Impossible" cases.  */
         case PVEC_XWIDGET:
-        case PVEC_OTHER:
+          return Qxwidget;
         case PVEC_XWIDGET_VIEW:
+          return Qxwidget_view;
+        /* "Impossible" cases.  */
+        case PVEC_OTHER:
         case PVEC_SUB_CHAR_TABLE:
         case PVEC_FREE: ;
         }
@@ -3756,6 +3758,8 @@ syms_of_data (void)
   DEFSYM (Qfont_entity, "font-entity");
   DEFSYM (Qfont_object, "font-object");
   DEFSYM (Qterminal, "terminal");
+  DEFSYM (Qxwidget, "xwidget");
+  DEFSYM (Qxwidget_view, "xwidget-view");
 
   DEFSYM (Qdefun, "defun");