Introduce ExprResolveVModMask
authorDaniel Stone <daniel@fooishbar.org>
Mon, 20 Feb 2012 13:32:09 +0000 (13:32 +0000)
committerDaniel Stone <daniel@fooishbar.org>
Mon, 20 Feb 2012 13:32:09 +0000 (13:32 +0000)
Which is just a slightly more typesafe wrapper around the chained
ExprResolveModMask everyone was using earlier.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
src/xkbcomp/action.c
src/xkbcomp/compat.c
src/xkbcomp/expr.c
src/xkbcomp/expr.h
src/xkbcomp/indicators.c
src/xkbcomp/keytypes.c
src/xkbcomp/symbols.c

index 0dbad1b..2688647 100644 (file)
@@ -383,7 +383,7 @@ CheckModifierField(struct xkb_desc * xkb,
             return True;
         }
     }
-    if (!ExprResolveModMask(value, &rtrn, LookupVModMask, (char *) xkb))
+    if (!ExprResolveVModMask(value, &rtrn, xkb))
         return ReportMismatch(action, F_Modifiers, "modifier mask");
     *mods_rtrn = rtrn.uval;
     *flags_inout &= ~XkbSA_UseModMapMods;
index bae43c4..26117a1 100644 (file)
@@ -711,7 +711,7 @@ HandleGroupCompatDef(GroupCompatDef * def,
     }
     tmp.fileID = info->fileID;
     tmp.merge = merge;
-    if (!ExprResolveModMask(def->def, &val, LookupVModMask, (char *) xkb))
+    if (!ExprResolveVModMask(def->def, &val, xkb))
     {
         ERROR("Expected a modifier mask in group compatibility definition\n");
         ACTION("Ignoring illegal compatibility map for group %d\n",
index f49d1d7..2416bd2 100644 (file)
@@ -28,6 +28,7 @@
 #include "xkbmisc.h"
 #include "tokens.h"
 #include "expr.h"
+#include "vmod.h"
 
 #include <ctype.h>
 
@@ -277,6 +278,19 @@ ExprResolveModMask(ExprDef * expr,
 }
 
 int
+ExprResolveVModMask(ExprDef * expr,
+                    ExprResult * val_rtrn,
+                    struct xkb_desc *xkb)
+{
+    LookupPriv priv;
+
+    priv.priv = NULL;
+    priv.chain = LookupVModMask;
+    priv.chainPriv = (char *) xkb;
+    return ExprResolveMask(expr, val_rtrn, LookupModMask, (char *) & priv);
+}
+
+int
 ExprResolveBoolean(ExprDef * expr,
                    ExprResult * val_rtrn,
                    IdentLookupFunc lookup, char * lookupPriv)
index 22509a7..538770c 100644 (file)
@@ -99,6 +99,11 @@ extern int ExprResolveModMask(ExprDef * /* expr */ ,
                               char *  /* priv */
     );
 
+extern int ExprResolveVModMask(ExprDef * /* expr */ ,
+                               ExprResult * /* val_rtrn */ ,
+                               struct xkb_desc * /* xkb */
+    );
+
 extern int ExprResolveBoolean(ExprDef * /* expr */ ,
                               ExprResult * /* val_rtrn */ ,
                               IdentLookupFunc /* lookup */ ,
index 2b6c169..eeb2692 100644 (file)
@@ -211,7 +211,7 @@ SetIndicatorMapField(LEDInfo * led,
     {
         if (arrayNdx != NULL)
             return ReportIndicatorNotArray(led, field);
-        if (!ExprResolveModMask(value, &rtrn, LookupVModMask, (char *) xkb))
+        if (!ExprResolveVModMask(value, &rtrn, xkb))
             return ReportIndicatorBadType(led, field, "modifier mask");
         led->real_mods = rtrn.uval & 0xff;
         led->vmods = (rtrn.uval >> 8) & 0xff;
index aa18be7..9ea3a7b 100644 (file)
@@ -666,7 +666,7 @@ SetMapEntry(KeyTypeInfo * type,
 
     if (arrayNdx == NULL)
         return ReportTypeShouldBeArray(type, "map entry");
-    if (!ExprResolveModMask(arrayNdx, &rtrn, LookupVModMask, (char *) xkb))
+    if (!ExprResolveVModMask(arrayNdx, &rtrn, xkb))
         return ReportTypeBadType(type, "map entry", "modifier mask");
     entry.mods.real_mods = rtrn.uval & 0xff;      /* modifiers < 512 */
     entry.mods.vmods = (rtrn.uval >> 8) & 0xffff; /* modifiers > 512 */
@@ -712,7 +712,7 @@ SetPreserve(KeyTypeInfo * type,
 
     if (arrayNdx == NULL)
         return ReportTypeShouldBeArray(type, "preserve entry");
-    if (!ExprResolveModMask(arrayNdx, &rtrn, LookupVModMask, (char *) xkb))
+    if (!ExprResolveVModMask(arrayNdx, &rtrn, xkb))
         return ReportTypeBadType(type, "preserve entry", "modifier mask");
     new.defs = type->defs;
     new.defs.next = NULL;
@@ -731,7 +731,7 @@ SetPreserve(KeyTypeInfo * type,
         if (warningLevel > 0)
             INFO("%s\n", PreserveIndexTxt(xkb, &new));
     }
-    if (!ExprResolveModMask(value, &rtrn, LookupVModMask, (char *) xkb))
+    if (!ExprResolveVModMask(value, &rtrn, xkb))
     {
         ERROR("Preserve value in a key type is not a modifier mask\n");
         ACTION("Ignoring preserve[%s] in type %s\n",
@@ -869,7 +869,7 @@ SetKeyTypeField(KeyTypeInfo * type,
             ACTION("Illegal array subscript ignored\n");
         }
         /* get modifier mask for current type */
-        if (!ExprResolveModMask(value, &tmp, LookupVModMask, (char *) xkb))
+        if (!ExprResolveVModMask(value, &tmp, xkb))
         {
             ERROR("Key type mask field must be a modifier mask\n");
             ACTION("Key type definition ignored\n");
index 49cef4b..df787d3 100644 (file)
@@ -1175,7 +1175,7 @@ SetSymbolsField(KeyInfo * key,
              (uStrCaseCmp(field, "virtualmods") == 0) ||
              (uStrCaseCmp(field, "virtualmodifiers") == 0))
     {
-        ok = ExprResolveModMask(value, &tmp, LookupVModMask, (char *) xkb);
+        ok = ExprResolveVModMask(value, &tmp, xkb);
         if (ok)
         {
             key->vmodmap = (tmp.uval >> 8);