emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r109359: Use INTERNAL_FIELD for symbo


From: Dmitry Antipov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r109359: Use INTERNAL_FIELD for symbols.
Date: Wed, 01 Aug 2012 11:57:09 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 109359
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Wed 2012-08-01 11:57:09 +0400
message:
  Use INTERNAL_FIELD for symbols.
  * src/lisp.h (SVAR): New macro.  Adjust users.
  * src/alloc.c, src/bytecode.c, src/cmds.c, src/data.c, src/doc.c, src/eval.c:
  * src/fns.c, src/keyboard.c, src/lread.c, src/xterm.c: Users changed.
  * admin/coccinelle/symbol.cocci: Semantic patch to replace direct
  access to Lisp_Object members of struct Lisp_Symbol to SVAR.
modified:
  admin/ChangeLog
  src/ChangeLog
  src/alloc.c
  src/bytecode.c
  src/cmds.c
  src/data.c
  src/doc.c
  src/eval.c
  src/fns.c
  src/keyboard.c
  src/lisp.h
  src/lread.c
  src/xterm.c
=== modified file 'admin/ChangeLog'
--- a/admin/ChangeLog   2012-08-01 06:23:24 +0000
+++ b/admin/ChangeLog   2012-08-01 07:57:09 +0000
@@ -1,5 +1,10 @@
 2012-08-01  Dmitry Antipov  <address@hidden>
 
+       * coccinelle/symbol.cocci: Semantic patch to replace direct
+       access to Lisp_Object members of struct Lisp_Symbol to SVAR.
+
+2012-08-01  Dmitry Antipov  <address@hidden>
+
        * coccinelle/process.cocci: Semantic patch to replace direct
        access to Lisp_Object members of struct Lisp_Process to PVAR.
 

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-08-01 06:23:24 +0000
+++ b/src/ChangeLog     2012-08-01 07:57:09 +0000
@@ -1,5 +1,12 @@
 2012-08-01  Dmitry Antipov  <address@hidden>
 
+       Use INTERNAL_FIELD for symbols.
+       * lisp.h (SVAR): New macro.  Adjust users.
+       * alloc.c, bytecode.c, cmds.c, data.c, doc.c, eval.c:
+       * fns.c, keyboard.c, lread.c, xterm.c: Users changed.
+
+2012-08-01  Dmitry Antipov  <address@hidden>
+
        Use INTERNAL_FIELD for processes.
        * process.h (PVAR): New macro.  Adjust style.
        (struct Lisp_Process): Change Lisp_Object members to INTERNAL_FIELD.

=== modified file 'src/alloc.c'
--- a/src/alloc.c       2012-08-01 05:11:36 +0000
+++ b/src/alloc.c       2012-08-01 07:57:09 +0000
@@ -3518,11 +3518,11 @@
   MALLOC_UNBLOCK_INPUT;
 
   p = XSYMBOL (val);
-  p->xname = name;
-  p->plist = Qnil;
+  SVAR (p, xname) = name;
+  SVAR (p, plist) = Qnil;
   p->redirect = SYMBOL_PLAINVAL;
   SET_SYMBOL_VAL (p, Qunbound);
-  p->function = Qunbound;
+  SVAR (p, function) = Qunbound;
   p->next = NULL;
   p->gcmarkbit = 0;
   p->interned = SYMBOL_UNINTERNED;
@@ -4321,7 +4321,7 @@
              && offset < (SYMBOL_BLOCK_SIZE * sizeof b->symbols[0])
              && (b != symbol_block
                  || offset / sizeof b->symbols[0] < symbol_block_index)
-             && !EQ (((struct Lisp_Symbol *) p)->function, Vdead));
+             && !EQ (SVAR (((struct Lisp_Symbol *)p), function), Vdead));
     }
   else
     return 0;
@@ -6073,8 +6073,8 @@
          break;
        CHECK_ALLOCATED_AND_LIVE (live_symbol_p);
        ptr->gcmarkbit = 1;
-       mark_object (ptr->function);
-       mark_object (ptr->plist);
+       mark_object (SVAR (ptr, function));
+       mark_object (SVAR (ptr, plist));
        switch (ptr->redirect)
          {
          case SYMBOL_PLAINVAL: mark_object (SYMBOL_VAL (ptr)); break;
@@ -6105,9 +6105,9 @@
            break;
          default: abort ();
          }
-       if (!PURE_POINTER_P (XSTRING (ptr->xname)))
-         MARK_STRING (XSTRING (ptr->xname));
-       MARK_INTERVAL_TREE (STRING_INTERVALS (ptr->xname));
+       if (!PURE_POINTER_P (XSTRING (SVAR (ptr, xname))))
+         MARK_STRING (XSTRING (SVAR (ptr, xname)));
+       MARK_INTERVAL_TREE (STRING_INTERVALS (SVAR (ptr, xname)));
 
        ptr = ptr->next;
        if (ptr)
@@ -6473,7 +6473,7 @@
            /* Check if the symbol was created during loadup.  In such a case
               it might be pointed to by pure bytecode which we don't trace,
               so we conservatively assume that it is live.  */
-           int pure_p = PURE_POINTER_P (XSTRING (sym->s.xname));
+           int pure_p = PURE_POINTER_P (XSTRING (sym->s.INTERNAL_FIELD 
(xname)));
 
            if (!sym->s.gcmarkbit && !pure_p)
              {
@@ -6482,7 +6482,7 @@
                sym->s.next = symbol_free_list;
                symbol_free_list = &sym->s;
 #if GC_MARK_STACK
-               symbol_free_list->function = Vdead;
+               SVAR (symbol_free_list, function) = Vdead;
 #endif
                ++this_free;
              }
@@ -6490,7 +6490,7 @@
              {
                ++num_used;
                if (!pure_p)
-                 UNMARK_STRING (XSTRING (sym->s.xname));
+                 UNMARK_STRING (XSTRING (sym->s.INTERNAL_FIELD (xname)));
                sym->s.gcmarkbit = 0;
              }
          }
@@ -6675,10 +6675,10 @@
               XSETSYMBOL (tem, sym);
               val = find_symbol_value (tem);
               if (EQ (val, obj)
-                  || EQ (sym->function, obj)
-                  || (!NILP (sym->function)
-                      && COMPILEDP (sym->function)
-                      && EQ (AREF (sym->function, COMPILED_BYTECODE), obj))
+                  || EQ (SVAR (sym, function), obj)
+                  || (!NILP (SVAR (sym, function))
+                      && COMPILEDP (SVAR (sym, function))
+                      && EQ (AREF (SVAR (sym, function), COMPILED_BYTECODE), 
obj))
                   || (!NILP (val)
                       && COMPILEDP (val)
                       && EQ (AREF (val, COMPILED_BYTECODE), obj)))

=== modified file 'src/bytecode.c'
--- a/src/bytecode.c    2012-07-20 05:28:00 +0000
+++ b/src/bytecode.c    2012-08-01 07:57:09 +0000
@@ -818,7 +818,7 @@
                && !EQ (val, Qunbound)
                && !XSYMBOL (sym)->redirect
                && !SYMBOL_CONSTANT_P (sym))
-             XSYMBOL (sym)->val.value = val;
+             SVAR (XSYMBOL (sym), val.value) = val;
            else
              {
                BEFORE_POTENTIAL_GC ();

=== modified file 'src/cmds.c'
--- a/src/cmds.c        2012-07-18 13:20:59 +0000
+++ b/src/cmds.c        2012-08-01 07:57:09 +0000
@@ -446,11 +446,13 @@
       /* If we expanded an abbrev which has a hook,
         and the hook has a non-nil `no-self-insert' property,
         return right away--don't really self-insert.  */
-      if (SYMBOLP (sym) && ! NILP (sym) && ! NILP (XSYMBOL (sym)->function)
-         && SYMBOLP (XSYMBOL (sym)->function))
+      if (SYMBOLP (sym) && ! NILP (sym)
+         && ! NILP (SVAR (XSYMBOL (sym), function))
+         && SYMBOLP (SVAR (XSYMBOL (sym), function)))
        {
          Lisp_Object prop;
-         prop = Fget (XSYMBOL (sym)->function, intern ("no-self-insert"));
+         prop = Fget (SVAR (XSYMBOL (sym), function),
+                      intern ("no-self-insert"));
          if (! NILP (prop))
            return 1;
        }

=== modified file 'src/data.c'
--- a/src/data.c        2012-07-31 12:36:19 +0000
+++ b/src/data.c        2012-08-01 07:57:09 +0000
@@ -562,7 +562,7 @@
   (register Lisp_Object symbol)
 {
   CHECK_SYMBOL (symbol);
-  return (EQ (XSYMBOL (symbol)->function, Qunbound) ? Qnil : Qt);
+  return (EQ (SVAR (XSYMBOL (symbol), function), Qunbound) ? Qnil : Qt);
 }
 
 DEFUN ("makunbound", Fmakunbound, Smakunbound, 1, 1, 0,
@@ -585,7 +585,7 @@
   CHECK_SYMBOL (symbol);
   if (NILP (symbol) || EQ (symbol, Qt))
     xsignal1 (Qsetting_constant, symbol);
-  XSYMBOL (symbol)->function = Qunbound;
+  SVAR (XSYMBOL (symbol), function) = Qunbound;
   return symbol;
 }
 
@@ -594,8 +594,8 @@
   (register Lisp_Object symbol)
 {
   CHECK_SYMBOL (symbol);
-  if (!EQ (XSYMBOL (symbol)->function, Qunbound))
-    return XSYMBOL (symbol)->function;
+  if (!EQ (SVAR (XSYMBOL (symbol), function), Qunbound))
+    return SVAR (XSYMBOL (symbol), function);
   xsignal1 (Qvoid_function, symbol);
 }
 
@@ -604,7 +604,7 @@
   (register Lisp_Object symbol)
 {
   CHECK_SYMBOL (symbol);
-  return XSYMBOL (symbol)->plist;
+  return SVAR (XSYMBOL (symbol), plist);
 }
 
 DEFUN ("symbol-name", Fsymbol_name, Ssymbol_name, 1, 1, 0,
@@ -628,7 +628,7 @@
   if (NILP (symbol) || EQ (symbol, Qt))
     xsignal1 (Qsetting_constant, symbol);
 
-  function = XSYMBOL (symbol)->function;
+  function = SVAR (XSYMBOL (symbol), function);
 
   if (!NILP (Vautoload_queue) && !EQ (function, Qunbound))
     Vautoload_queue = Fcons (Fcons (symbol, function), Vautoload_queue);
@@ -636,13 +636,13 @@
   if (CONSP (function) && EQ (XCAR (function), Qautoload))
     Fput (symbol, Qautoload, XCDR (function));
 
-  XSYMBOL (symbol)->function = definition;
+  SVAR (XSYMBOL (symbol), function) = definition;
   /* Handle automatic advice activation.  */
-  if (CONSP (XSYMBOL (symbol)->plist)
+  if (CONSP (SVAR (XSYMBOL (symbol), plist))
       && !NILP (Fget (symbol, Qad_advice_info)))
     {
       call2 (Qad_activate_internal, symbol, Qnil);
-      definition = XSYMBOL (symbol)->function;
+      definition = SVAR (XSYMBOL (symbol), function);
     }
   return definition;
 }
@@ -657,8 +657,8 @@
   (register Lisp_Object symbol, Lisp_Object definition, Lisp_Object docstring)
 {
   CHECK_SYMBOL (symbol);
-  if (CONSP (XSYMBOL (symbol)->function)
-      && EQ (XCAR (XSYMBOL (symbol)->function), Qautoload))
+  if (CONSP (SVAR (XSYMBOL (symbol), function))
+      && EQ (XCAR (SVAR (XSYMBOL (symbol), function)), Qautoload))
     LOADHIST_ATTACH (Fcons (Qt, symbol));
   if (!NILP (Vpurify_flag)
       /* If `definition' is a keymap, immutable (and copying) is wrong.  */
@@ -679,7 +679,7 @@
   (register Lisp_Object symbol, Lisp_Object newplist)
 {
   CHECK_SYMBOL (symbol);
-  XSYMBOL (symbol)->plist = newplist;
+  SVAR (XSYMBOL (symbol), plist) = newplist;
   return newplist;
 }
 
@@ -2019,12 +2019,12 @@
     {
       if (!SYMBOLP (hare) || EQ (hare, Qunbound))
        break;
-      hare = XSYMBOL (hare)->function;
+      hare = SVAR (XSYMBOL (hare), function);
       if (!SYMBOLP (hare) || EQ (hare, Qunbound))
        break;
-      hare = XSYMBOL (hare)->function;
+      hare = SVAR (XSYMBOL (hare), function);
 
-      tortoise = XSYMBOL (tortoise)->function;
+      tortoise = SVAR (XSYMBOL (tortoise), function);
 
       if (EQ (hare, tortoise))
        xsignal1 (Qcyclic_function_indirection, object);
@@ -2048,7 +2048,7 @@
   /* Optimize for no indirection.  */
   result = object;
   if (SYMBOLP (result) && !EQ (result, Qunbound)
-      && (result = XSYMBOL (result)->function, SYMBOLP (result)))
+      && (result = SVAR (XSYMBOL (result), function), SYMBOLP (result)))
     result = indirect_function (result);
   if (!EQ (result, Qunbound))
     return result;
@@ -3197,7 +3197,7 @@
   defsubr (&Ssubr_arity);
   defsubr (&Ssubr_name);
 
-  XSYMBOL (Qwholenump)->function = XSYMBOL (Qnatnump)->function;
+  SVAR (XSYMBOL (Qwholenump), function) = SVAR (XSYMBOL (Qnatnump), function);
 
   DEFVAR_LISP ("most-positive-fixnum", Vmost_positive_fixnum,
               doc: /* The largest value that is representable in a Lisp 
integer.  */);

=== modified file 'src/doc.c'
--- a/src/doc.c 2012-07-10 21:48:34 +0000
+++ b/src/doc.c 2012-08-01 07:57:09 +0000
@@ -508,7 +508,7 @@
 {
   /* Don't use indirect_function here, or defaliases will apply their
      docstrings to the base functions (Bug#2603).  */
-  Lisp_Object fun = SYMBOLP (obj) ? XSYMBOL (obj)->function : obj;
+  Lisp_Object fun = SYMBOLP (obj) ? SVAR (XSYMBOL (obj), function) : obj;
 
   /* The type determines where the docstring is stored.  */
 

=== modified file 'src/eval.c'
--- a/src/eval.c        2012-07-31 12:36:19 +0000
+++ b/src/eval.c        2012-08-01 07:57:09 +0000
@@ -976,7 +976,7 @@
          tem = Fassq (sym, environment);
          if (NILP (tem))
            {
-             def = XSYMBOL (sym)->function;
+             def = SVAR (XSYMBOL (sym), function);
              if (!EQ (def, Qunbound))
                continue;
            }
@@ -1893,9 +1893,9 @@
   CHECK_STRING (file);
 
   /* If function is defined and not as an autoload, don't override.  */
-  if (!EQ (XSYMBOL (function)->function, Qunbound)
-      && !(CONSP (XSYMBOL (function)->function)
-          && EQ (XCAR (XSYMBOL (function)->function), Qautoload)))
+  if (!EQ (SVAR (XSYMBOL (function), function), Qunbound)
+      && !(CONSP (SVAR (XSYMBOL (function), function))
+          && EQ (XCAR (SVAR (XSYMBOL (function), function)), Qautoload)))
     return Qnil;
 
   if (NILP (Vpurify_flag))
@@ -2081,7 +2081,7 @@
   /* Optimize for no indirection.  */
   fun = original_fun;
   if (SYMBOLP (fun) && !EQ (fun, Qunbound)
-      && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
+      && (fun = SVAR (XSYMBOL (fun), function), SYMBOLP (fun)))
     fun = indirect_function (fun);
 
   if (SUBRP (fun))
@@ -2266,7 +2266,7 @@
 
   /* Optimize for no indirection.  */
   if (SYMBOLP (fun) && !EQ (fun, Qunbound)
-      && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
+      && (fun = SVAR (XSYMBOL (fun), function), SYMBOLP (fun)))
     fun = indirect_function (fun);
   if (EQ (fun, Qunbound))
     {
@@ -2771,7 +2771,7 @@
   /* Optimize for no indirection.  */
   fun = original_fun;
   if (SYMBOLP (fun) && !EQ (fun, Qunbound)
-      && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
+      && (fun = SVAR (XSYMBOL (fun), function), SYMBOLP (fun)))
     fun = indirect_function (fun);
 
   if (SUBRP (fun))

=== modified file 'src/fns.c'
--- a/src/fns.c 2012-07-20 07:29:04 +0000
+++ b/src/fns.c 2012-08-01 07:57:09 +0000
@@ -1868,7 +1868,7 @@
   (Lisp_Object symbol, Lisp_Object propname)
 {
   CHECK_SYMBOL (symbol);
-  return Fplist_get (XSYMBOL (symbol)->plist, propname);
+  return Fplist_get (SVAR (XSYMBOL (symbol), plist), propname);
 }
 
 DEFUN ("plist-put", Fplist_put, Splist_put, 3, 3, 0,
@@ -1910,8 +1910,8 @@
   (Lisp_Object symbol, Lisp_Object propname, Lisp_Object value)
 {
   CHECK_SYMBOL (symbol);
-  XSYMBOL (symbol)->plist
-    = Fplist_put (XSYMBOL (symbol)->plist, propname, value);
+  SVAR (XSYMBOL (symbol), plist)
+    = Fplist_put (SVAR (XSYMBOL (symbol), plist), propname, value);
   return value;
 }
 

=== modified file 'src/keyboard.c'
--- a/src/keyboard.c    2012-08-01 05:11:36 +0000
+++ b/src/keyboard.c    2012-08-01 07:57:09 +0000
@@ -7894,7 +7894,8 @@
                    /* If the command is an alias for another
                       (such as lmenu.el set it up), check if the
                       original command matches the cached command.  */
-                   && !(SYMBOLP (def) && EQ (tem, XSYMBOL (def)->function))))
+                   && !(SYMBOLP (def)
+                        && EQ (tem, SVAR (XSYMBOL (def), function)))))
              keys = Qnil;
          }
 
@@ -8823,9 +8824,9 @@
   /* Handle a symbol whose function definition is a keymap
      or an array.  */
   if (SYMBOLP (next) && !NILP (Ffboundp (next))
-      && (ARRAYP (XSYMBOL (next)->function)
-         || KEYMAPP (XSYMBOL (next)->function)))
-    next = Fautoload_do_load (XSYMBOL (next)->function, next, Qnil);
+      && (ARRAYP (SVAR (XSYMBOL (next), function))
+         || KEYMAPP (SVAR (XSYMBOL (next), function))))
+    next = Fautoload_do_load (SVAR (XSYMBOL (next), function), next, Qnil);
 
   /* If the keymap gives a function, not an
      array, then call the function with one arg and use

=== modified file 'src/lisp.h'
--- a/src/lisp.h        2012-08-01 05:11:36 +0000
+++ b/src/lisp.h        2012-08-01 07:57:09 +0000
@@ -1039,6 +1039,11 @@
   SYMBOL_FORWARDED = 3
 };
 
+/* Most code should use this macro to access
+   Lisp fields in struct Lisp_Symbol.  */
+
+#define SVAR(sym, field) ((sym)->INTERNAL_FIELD (field))
+
 struct Lisp_Symbol
 {
   unsigned gcmarkbit : 1;
@@ -1066,22 +1071,22 @@
   /* The symbol's name, as a Lisp string.
      The name "xname" is used to intentionally break code referring to
      the old field "name" of type pointer to struct Lisp_String.  */
-  Lisp_Object xname;
+  Lisp_Object INTERNAL_FIELD (xname);
 
   /* Value of the symbol or Qunbound if unbound.  Which alternative of the
      union is used depends on the `redirect' field above.  */
   union {
-    Lisp_Object value;
+    Lisp_Object INTERNAL_FIELD (value);
     struct Lisp_Symbol *alias;
     struct Lisp_Buffer_Local_Value *blv;
     union Lisp_Fwd *fwd;
   } val;
 
   /* Function value of the symbol or Qunbound if not fboundp.  */
-  Lisp_Object function;
+  Lisp_Object INTERNAL_FIELD (function);
 
   /* The symbol's property list.  */
-  Lisp_Object plist;
+  Lisp_Object INTERNAL_FIELD (plist);
 
   /* Next symbol in obarray bucket, if the symbol is interned.  */
   struct Lisp_Symbol *next;
@@ -1090,7 +1095,7 @@
 /* Value is name of symbol.  */
 
 #define SYMBOL_VAL(sym)   \
-  (eassert ((sym)->redirect == SYMBOL_PLAINVAL),  (sym)->val.value)
+  (eassert ((sym)->redirect == SYMBOL_PLAINVAL),  SVAR (sym, val.value))
 #define SYMBOL_ALIAS(sym) \
   (eassert ((sym)->redirect == SYMBOL_VARALIAS),  (sym)->val.alias)
 #define SYMBOL_BLV(sym)   \
@@ -1098,7 +1103,7 @@
 #define SYMBOL_FWD(sym)   \
   (eassert ((sym)->redirect == SYMBOL_FORWARDED), (sym)->val.fwd)
 #define SET_SYMBOL_VAL(sym, v)     \
-  (eassert ((sym)->redirect == SYMBOL_PLAINVAL),  (sym)->val.value = (v))
+  (eassert ((sym)->redirect == SYMBOL_PLAINVAL),  SVAR (sym, val.value) = (v))
 #define SET_SYMBOL_ALIAS(sym, v)   \
   (eassert ((sym)->redirect == SYMBOL_VARALIAS),  (sym)->val.alias = (v))
 #define SET_SYMBOL_BLV(sym, v)     \
@@ -1107,7 +1112,7 @@
   (eassert ((sym)->redirect == SYMBOL_FORWARDED), (sym)->val.fwd = (v))
 
 #define SYMBOL_NAME(sym)  \
-     LISP_MAKE_RVALUE (XSYMBOL (sym)->xname)
+     LISP_MAKE_RVALUE (SVAR (XSYMBOL (sym), xname))
 
 /* Value is non-zero if SYM is an interned symbol.  */
 

=== modified file 'src/lread.c'
--- a/src/lread.c       2012-07-29 16:55:02 +0000
+++ b/src/lread.c       2012-08-01 07:57:09 +0000
@@ -3922,13 +3922,13 @@
   /* Fmake_symbol inits fields of new symbols with Qunbound and Qnil,
      so those two need to be fixed manually.  */
   SET_SYMBOL_VAL (XSYMBOL (Qunbound), Qunbound);
-  XSYMBOL (Qunbound)->function = Qunbound;
-  XSYMBOL (Qunbound)->plist = Qnil;
+  SVAR (XSYMBOL (Qunbound), function) = Qunbound;
+  SVAR (XSYMBOL (Qunbound), plist) = Qnil;
   /* XSYMBOL (Qnil)->function = Qunbound; */
   SET_SYMBOL_VAL (XSYMBOL (Qnil), Qnil);
   XSYMBOL (Qnil)->constant = 1;
   XSYMBOL (Qnil)->declared_special = 1;
-  XSYMBOL (Qnil)->plist = Qnil;
+  SVAR (XSYMBOL (Qnil), plist) = Qnil;
 
   Qt = intern_c_string ("t");
   SET_SYMBOL_VAL (XSYMBOL (Qt), Qt);
@@ -3950,7 +3950,7 @@
   Lisp_Object sym;
   sym = intern_c_string (sname->symbol_name);
   XSETTYPED_PVECTYPE (sname, size, PVEC_SUBR);
-  XSETSUBR (XSYMBOL (sym)->function, sname);
+  XSETSUBR (SVAR (XSYMBOL (sym), function), sname);
 }
 
 #ifdef NOTDEF /* Use fset in subr.el now!  */

=== modified file 'src/xterm.c'
--- a/src/xterm.c       2012-08-01 05:11:36 +0000
+++ b/src/xterm.c       2012-08-01 07:57:09 +0000
@@ -10117,7 +10117,7 @@
        terminal->kboard->next_kboard = all_kboards;
        all_kboards = terminal->kboard;
 
-       if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
+       if (!EQ (SVAR (XSYMBOL (Qvendor_specific_keysyms), function), Qunbound))
          {
            char *vendor = ServerVendor (dpy);
 


reply via email to

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