commit: d9b9650fa551a3823660ee3f3959edc988306a31
parent 95fa0bbc056a7e48c8f9702b650d8274afe43c37
Author: Michael Forney <mforney@mforney.org>
Date: Thu, 18 Nov 2021 22:52:19 -0800
libxkbcommon: Update to 1.3.1
Diffstat:
2 files changed, 309 insertions(+), 316 deletions(-)
diff --git a/pkg/libxkbcommon/patch/0001-Track-generated-xkbcomp-parser.patch b/pkg/libxkbcommon/patch/0001-Track-generated-xkbcomp-parser.patch
@@ -1,36 +1,29 @@
-From 07b3e7ec9c1f06ee2c7ccb146ca995f68893a30d Mon Sep 17 00:00:00 2001
+From 9c7c0b8c9b850c15b519be769f81f7a53e6299d7 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Sat, 26 Oct 2019 02:05:31 -0700
Subject: [PATCH] Track generated xkbcomp parser
+Generated with
+
+ bison -o parser.c -H -p _xkbcommon_ parser.y
---
- src/xkbcomp/.gitignore | 2 -
- src/xkbcomp/parser.c | 3260 ++++++++++++++++++++++++++++++++++++++++
- src/xkbcomp/parser.h | 169 +++
- 3 files changed, 3429 insertions(+), 2 deletions(-)
- delete mode 100644 src/xkbcomp/.gitignore
+ src/xkbcomp/parser.c | 3258 ++++++++++++++++++++++++++++++++++++++++++
+ src/xkbcomp/parser.h | 171 +++
+ 2 files changed, 3429 insertions(+)
create mode 100644 src/xkbcomp/parser.c
create mode 100644 src/xkbcomp/parser.h
-diff --git a/src/xkbcomp/.gitignore b/src/xkbcomp/.gitignore
-deleted file mode 100644
-index d7814e4..0000000
---- a/src/xkbcomp/.gitignore
-+++ /dev/null
-@@ -1,2 +0,0 @@
--parser.c
--parser.h
diff --git a/src/xkbcomp/parser.c b/src/xkbcomp/parser.c
new file mode 100644
-index 0000000..e5ce45b
+index 0000000..e9d5a8f
--- /dev/null
+++ b/src/xkbcomp/parser.c
-@@ -0,0 +1,3260 @@
-+/* A Bison parser, made by GNU Bison 3.7.4. */
+@@ -0,0 +1,3258 @@
++/* A Bison parser, made by GNU Bison 3.8.2. */
+
+/* Bison implementation for Yacc-like parsers in C
+
-+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
++ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
+
+ This program is free software: you can redistribute it and/or modify
@@ -44,7 +37,7 @@ index 0000000..e5ce45b
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
-+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
++ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
@@ -74,10 +67,10 @@ index 0000000..e5ce45b
+ USER NAME SPACE" below. */
+
+/* Identify Bison output, and Bison version. */
-+#define YYBISON 30704
++#define YYBISON 30802
+
+/* Bison version string. */
-+#define YYBISON_VERSION "3.7.4"
++#define YYBISON_VERSION "3.8.2"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
@@ -362,6 +355,18 @@ index 0000000..e5ce45b
+typedef short yytype_int16;
+#endif
+
++/* Work around bug in HP-UX 11.23, which defines these macros
++ incorrectly for preprocessor constants. This workaround can likely
++ be removed in 2023, as HPE has promised support for HP-UX 11.23
++ (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
++ <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
++#ifdef __hpux
++# undef UINT_LEAST8_MAX
++# undef UINT_LEAST16_MAX
++# define UINT_LEAST8_MAX 255
++# define UINT_LEAST16_MAX 65535
++#endif
++
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
@@ -459,17 +464,23 @@ index 0000000..e5ce45b
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
-+# define YYUSE(E) ((void) (E))
++# define YY_USE(E) ((void) (E))
+#else
-+# define YYUSE(E) /* empty */
++# define YY_USE(E) /* empty */
+#endif
+
-+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
++#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
++# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
++# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
++ _Pragma ("GCC diagnostic push") \
++ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
++# else
++# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
++# endif
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
+#else
@@ -683,7 +694,7 @@ index 0000000..e5ce45b
+};
+
+#if YYDEBUG
-+ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
++/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+static const yytype_int16 yyrline[] =
+{
+ 0, 254, 254, 256, 258, 262, 268, 269, 270, 273,
@@ -755,21 +766,6 @@ index 0000000..e5ce45b
+}
+#endif
+
-+#ifdef YYPRINT
-+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
-+ (internal) symbol number NUM (which must be that of a token). */
-+static const yytype_int16 yytoknum[] =
-+{
-+ 0, 256, 257, 255, 1, 2, 3, 4, 5, 6,
-+ 7, 8, 10, 11, 12, 13, 14, 20, 21, 22,
-+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
-+ 33, 34, 35, 36, 37, 38, 40, 41, 42, 43,
-+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
-+ 54, 55, 60, 61, 62, 63, 64, 70, 71, 72,
-+ 73, 74, 75, 76, 77
-+};
-+#endif
-+
+#define YYPACT_NINF (-182)
+
+#define yypact_value_is_default(Yyn) \
@@ -780,8 +776,8 @@ index 0000000..e5ce45b
+#define yytable_value_is_error(Yyn) \
+ 0
+
-+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-+ STATE-NUM. */
++/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
++ STATE-NUM. */
+static const yytype_int16 yypact[] =
+{
+ 176, -182, -182, -182, -182, -182, -182, -182, -182, -182,
@@ -820,9 +816,9 @@ index 0000000..e5ce45b
+ -182, -182, -182, -182
+};
+
-+ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-+ Performed when YYTABLE does not specify something else to do. Zero
-+ means the default is an error. */
++/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
++ Performed when YYTABLE does not specify something else to do. Zero
++ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 18, 4, 21, 22, 23, 24, 25, 26, 27, 28,
@@ -861,7 +857,7 @@ index 0000000..e5ce45b
+ 97, 95, 90, 92
+};
+
-+ /* YYPGOTO[NTERM-NUM]. */
++/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -182, -182, -182, -182, -182, 181, -182, 402, -182, 389,
@@ -874,10 +870,10 @@ index 0000000..e5ce45b
+ 420, -182
+};
+
-+ /* YYDEFGOTO[NTERM-NUM]. */
++/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
-+ -1, 10, 11, 25, 34, 12, 26, 36, 14, 15,
++ 0, 10, 11, 25, 34, 12, 26, 36, 14, 15,
+ 37, 46, 167, 73, 74, 75, 92, 93, 76, 100,
+ 168, 77, 78, 173, 174, 175, 79, 80, 195, 82,
+ 83, 84, 196, 197, 293, 294, 319, 320, 198, 312,
@@ -887,9 +883,9 @@ index 0000000..e5ce45b
+ 29, 30
+};
+
-+ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
-+ positive, shift that token. If negative, reduce the rule whose
-+ number is the opposite. If YYTABLE_NINF, syntax error. */
++/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
++ positive, shift that token. If negative, reduce the rule whose
++ number is the opposite. If YYTABLE_NINF, syntax error. */
+static const yytype_int16 yytable[] =
+{
+ 90, 101, 180, 241, 94, 184, 16, 69, 242, 102,
@@ -1046,8 +1042,8 @@ index 0000000..e5ce45b
+ -1, -1, 55, -1, -1, 58
+};
+
-+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-+ symbol of state STATE-NUM. */
++/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
++ state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 0, 57, 58, 59, 60, 61, 62, 63, 64,
@@ -1086,7 +1082,7 @@ index 0000000..e5ce45b
+ 105, 42, 49, 102
+};
+
-+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
++/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 65, 66, 66, 66, 67, 68, 68, 68, 69,
@@ -1110,7 +1106,7 @@ index 0000000..e5ce45b
+ 133, 134, 135, 135, 136
+};
+
-+ /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
++/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
+static const yytype_int8 yyr2[] =
+{
+ 0, 2, 1, 1, 1, 7, 1, 1, 1, 2,
@@ -1143,6 +1139,7 @@ index 0000000..e5ce45b
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
++#define YYNOMEM goto yyexhaustedlab
+
+
+#define YYRECOVERING() (!!yyerrstatus)
@@ -1183,10 +1180,7 @@ index 0000000..e5ce45b
+ YYFPRINTF Args; \
+} while (0)
+
-+/* This macro is provided for backward compatibility. */
-+# ifndef YY_LOCATION_PRINT
-+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-+# endif
++
+
+
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
@@ -1210,16 +1204,12 @@ index 0000000..e5ce45b
+ yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, struct parser_param *param)
+{
+ FILE *yyoutput = yyo;
-+ YYUSE (yyoutput);
-+ YYUSE (param);
++ YY_USE (yyoutput);
++ YY_USE (param);
+ if (!yyvaluep)
+ return;
-+# ifdef YYPRINT
-+ if (yykind < YYNTOKENS)
-+ YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
-+# endif
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-+ YYUSE (yykind);
++ YY_USE (yykind);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
+
@@ -1333,8 +1323,8 @@ index 0000000..e5ce45b
+yydestruct (const char *yymsg,
+ yysymbol_kind_t yykind, YYSTYPE *yyvaluep, struct parser_param *param)
+{
-+ YYUSE (yyvaluep);
-+ YYUSE (param);
++ YY_USE (yyvaluep);
++ YY_USE (param);
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
@@ -1345,247 +1335,247 @@ index 0000000..e5ce45b
+ case YYSYMBOL_STRING: /* STRING */
+#line 238 "parser.y"
+ { free(((*yyvaluep).str)); }
-+#line 1321 "parser.c"
++#line 1318 "parser.c"
+ break;
+
+ case YYSYMBOL_IDENT: /* IDENT */
+#line 238 "parser.y"
+ { free(((*yyvaluep).str)); }
-+#line 1327 "parser.c"
++#line 1324 "parser.c"
+ break;
+
+ case YYSYMBOL_XkbFile: /* XkbFile */
+#line 236 "parser.y"
+ { if (!param->rtrn) FreeXkbFile(((*yyvaluep).file)); }
-+#line 1333 "parser.c"
++#line 1330 "parser.c"
+ break;
+
+ case YYSYMBOL_XkbCompositeMap: /* XkbCompositeMap */
+#line 236 "parser.y"
+ { if (!param->rtrn) FreeXkbFile(((*yyvaluep).file)); }
-+#line 1339 "parser.c"
++#line 1336 "parser.c"
+ break;
+
+ case YYSYMBOL_XkbMapConfigList: /* XkbMapConfigList */
+#line 237 "parser.y"
+ { FreeXkbFile(((*yyvaluep).fileList).head); }
-+#line 1345 "parser.c"
++#line 1342 "parser.c"
+ break;
+
+ case YYSYMBOL_XkbMapConfig: /* XkbMapConfig */
+#line 236 "parser.y"
+ { if (!param->rtrn) FreeXkbFile(((*yyvaluep).file)); }
-+#line 1351 "parser.c"
++#line 1348 "parser.c"
+ break;
+
+ case YYSYMBOL_DeclList: /* DeclList */
+#line 232 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).anyList).head); }
-+#line 1357 "parser.c"
++#line 1354 "parser.c"
+ break;
+
+ case YYSYMBOL_Decl: /* Decl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).any)); }
-+#line 1363 "parser.c"
++#line 1360 "parser.c"
+ break;
+
+ case YYSYMBOL_VarDecl: /* VarDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).var)); }
-+#line 1369 "parser.c"
++#line 1366 "parser.c"
+ break;
+
+ case YYSYMBOL_KeyNameDecl: /* KeyNameDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).keyCode)); }
-+#line 1375 "parser.c"
++#line 1372 "parser.c"
+ break;
+
+ case YYSYMBOL_KeyAliasDecl: /* KeyAliasDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).keyAlias)); }
-+#line 1381 "parser.c"
++#line 1378 "parser.c"
+ break;
+
+ case YYSYMBOL_VModDecl: /* VModDecl */
+#line 232 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).vmodList).head); }
-+#line 1387 "parser.c"
++#line 1384 "parser.c"
+ break;
+
+ case YYSYMBOL_VModDefList: /* VModDefList */
+#line 232 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).vmodList).head); }
-+#line 1393 "parser.c"
++#line 1390 "parser.c"
+ break;
+
+ case YYSYMBOL_VModDef: /* VModDef */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).vmod)); }
-+#line 1399 "parser.c"
++#line 1396 "parser.c"
+ break;
+
+ case YYSYMBOL_InterpretDecl: /* InterpretDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).interp)); }
-+#line 1405 "parser.c"
++#line 1402 "parser.c"
+ break;
+
+ case YYSYMBOL_InterpretMatch: /* InterpretMatch */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).interp)); }
-+#line 1411 "parser.c"
++#line 1408 "parser.c"
+ break;
+
+ case YYSYMBOL_VarDeclList: /* VarDeclList */
+#line 232 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).varList).head); }
-+#line 1417 "parser.c"
++#line 1414 "parser.c"
+ break;
+
+ case YYSYMBOL_KeyTypeDecl: /* KeyTypeDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).keyType)); }
-+#line 1423 "parser.c"
++#line 1420 "parser.c"
+ break;
+
+ case YYSYMBOL_SymbolsDecl: /* SymbolsDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).syms)); }
-+#line 1429 "parser.c"
++#line 1426 "parser.c"
+ break;
+
+ case YYSYMBOL_SymbolsBody: /* SymbolsBody */
+#line 232 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).varList).head); }
-+#line 1435 "parser.c"
++#line 1432 "parser.c"
+ break;
+
+ case YYSYMBOL_SymbolsVarDecl: /* SymbolsVarDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).var)); }
-+#line 1441 "parser.c"
++#line 1438 "parser.c"
+ break;
+
+ case YYSYMBOL_ArrayInit: /* ArrayInit */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1447 "parser.c"
++#line 1444 "parser.c"
+ break;
+
+ case YYSYMBOL_GroupCompatDecl: /* GroupCompatDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).groupCompat)); }
-+#line 1453 "parser.c"
++#line 1450 "parser.c"
+ break;
+
+ case YYSYMBOL_ModMapDecl: /* ModMapDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).modMask)); }
-+#line 1459 "parser.c"
++#line 1456 "parser.c"
+ break;
+
+ case YYSYMBOL_LedMapDecl: /* LedMapDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).ledMap)); }
-+#line 1465 "parser.c"
++#line 1462 "parser.c"
+ break;
+
+ case YYSYMBOL_LedNameDecl: /* LedNameDecl */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).ledName)); }
-+#line 1471 "parser.c"
++#line 1468 "parser.c"
+ break;
+
+ case YYSYMBOL_CoordList: /* CoordList */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1477 "parser.c"
++#line 1474 "parser.c"
+ break;
+
+ case YYSYMBOL_Coord: /* Coord */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1483 "parser.c"
++#line 1480 "parser.c"
+ break;
+
+ case YYSYMBOL_OptExprList: /* OptExprList */
+#line 232 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).exprList).head); }
-+#line 1489 "parser.c"
++#line 1486 "parser.c"
+ break;
+
+ case YYSYMBOL_ExprList: /* ExprList */
+#line 232 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).exprList).head); }
-+#line 1495 "parser.c"
++#line 1492 "parser.c"
+ break;
+
+ case YYSYMBOL_Expr: /* Expr */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1501 "parser.c"
++#line 1498 "parser.c"
+ break;
+
+ case YYSYMBOL_Term: /* Term */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1507 "parser.c"
++#line 1504 "parser.c"
+ break;
+
+ case YYSYMBOL_ActionList: /* ActionList */
+#line 232 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).exprList).head); }
-+#line 1513 "parser.c"
++#line 1510 "parser.c"
+ break;
+
+ case YYSYMBOL_Action: /* Action */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1519 "parser.c"
++#line 1516 "parser.c"
+ break;
+
+ case YYSYMBOL_Lhs: /* Lhs */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1525 "parser.c"
++#line 1522 "parser.c"
+ break;
+
+ case YYSYMBOL_Terminal: /* Terminal */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1531 "parser.c"
++#line 1528 "parser.c"
+ break;
+
+ case YYSYMBOL_OptKeySymList: /* OptKeySymList */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1537 "parser.c"
++#line 1534 "parser.c"
+ break;
+
+ case YYSYMBOL_KeySymList: /* KeySymList */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1543 "parser.c"
++#line 1540 "parser.c"
+ break;
+
+ case YYSYMBOL_KeySyms: /* KeySyms */
+#line 229 "parser.y"
+ { FreeStmt((ParseCommon *) ((*yyvaluep).expr)); }
-+#line 1549 "parser.c"
++#line 1546 "parser.c"
+ break;
+
+ case YYSYMBOL_OptMapName: /* OptMapName */
+#line 238 "parser.y"
+ { free(((*yyvaluep).str)); }
-+#line 1555 "parser.c"
++#line 1552 "parser.c"
+ break;
+
+ case YYSYMBOL_MapName: /* MapName */
+#line 238 "parser.y"
+ { free(((*yyvaluep).str)); }
-+#line 1561 "parser.c"
++#line 1558 "parser.c"
+ break;
+
+ default:
@@ -1659,6 +1649,7 @@ index 0000000..e5ce45b
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yychar = YYEMPTY; /* Cause a token to be read. */
++
+ goto yysetstate;
+
+
@@ -1684,7 +1675,7 @@ index 0000000..e5ce45b
+
+ if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
-+ goto yyexhaustedlab;
++ YYNOMEM;
+#else
+ {
+ /* Get the current used size of the three stacks, in elements. */
@@ -1712,7 +1703,7 @@ index 0000000..e5ce45b
+# else /* defined YYSTACK_RELOCATE */
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
-+ goto yyexhaustedlab;
++ YYNOMEM;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
@@ -1723,7 +1714,7 @@ index 0000000..e5ce45b
+ YY_CAST (union yyalloc *,
+ YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
+ if (! yyptr)
-+ goto yyexhaustedlab;
++ YYNOMEM;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
@@ -1745,6 +1736,7 @@ index 0000000..e5ce45b
+ }
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
+
++
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
@@ -1859,55 +1851,55 @@ index 0000000..e5ce45b
+ case 2: /* XkbFile: XkbCompositeMap */
+#line 255 "parser.y"
+ { (yyval.file) = param->rtrn = (yyvsp[0].file); param->more_maps = !!param->rtrn; }
-+#line 1835 "parser.c"
++#line 1834 "parser.c"
+ break;
+
+ case 3: /* XkbFile: XkbMapConfig */
+#line 257 "parser.y"
+ { (yyval.file) = param->rtrn = (yyvsp[0].file); param->more_maps = !!param->rtrn; YYACCEPT; }
-+#line 1841 "parser.c"
++#line 1840 "parser.c"
+ break;
+
+ case 4: /* XkbFile: END_OF_FILE */
+#line 259 "parser.y"
+ { (yyval.file) = param->rtrn = NULL; param->more_maps = false; }
-+#line 1847 "parser.c"
++#line 1846 "parser.c"
+ break;
+
+ case 5: /* XkbCompositeMap: OptFlags XkbCompositeType OptMapName OBRACE XkbMapConfigList CBRACE SEMI */
+#line 265 "parser.y"
+ { (yyval.file) = XkbFileCreate((yyvsp[-5].file_type), (yyvsp[-4].str), (ParseCommon *) (yyvsp[-2].fileList).head, (yyvsp[-6].mapFlags)); }
-+#line 1853 "parser.c"
++#line 1852 "parser.c"
+ break;
+
+ case 6: /* XkbCompositeType: XKB_KEYMAP */
+#line 268 "parser.y"
+ { (yyval.file_type) = FILE_TYPE_KEYMAP; }
-+#line 1859 "parser.c"
++#line 1858 "parser.c"
+ break;
+
+ case 7: /* XkbCompositeType: XKB_SEMANTICS */
+#line 269 "parser.y"
+ { (yyval.file_type) = FILE_TYPE_KEYMAP; }
-+#line 1865 "parser.c"
++#line 1864 "parser.c"
+ break;
+
+ case 8: /* XkbCompositeType: XKB_LAYOUT */
+#line 270 "parser.y"
+ { (yyval.file_type) = FILE_TYPE_KEYMAP; }
-+#line 1871 "parser.c"
++#line 1870 "parser.c"
+ break;
+
+ case 9: /* XkbMapConfigList: XkbMapConfigList XkbMapConfig */
+#line 274 "parser.y"
+ { (yyval.fileList).head = (yyvsp[-1].fileList).head; (yyval.fileList).last->common.next = &(yyvsp[0].file)->common; (yyval.fileList).last = (yyvsp[0].file); }
-+#line 1877 "parser.c"
++#line 1876 "parser.c"
+ break;
+
+ case 10: /* XkbMapConfigList: XkbMapConfig */
+#line 276 "parser.y"
+ { (yyval.fileList).head = (yyval.fileList).last = (yyvsp[0].file); }
-+#line 1883 "parser.c"
++#line 1882 "parser.c"
+ break;
+
+ case 11: /* XkbMapConfig: OptFlags FileType OptMapName OBRACE DeclList CBRACE SEMI */
@@ -1915,109 +1907,109 @@ index 0000000..e5ce45b
+ {
+ (yyval.file) = XkbFileCreate((yyvsp[-5].file_type), (yyvsp[-4].str), (yyvsp[-2].anyList).head, (yyvsp[-6].mapFlags));
+ }
-+#line 1891 "parser.c"
++#line 1890 "parser.c"
+ break;
+
+ case 12: /* FileType: XKB_KEYCODES */
+#line 287 "parser.y"
+ { (yyval.file_type) = FILE_TYPE_KEYCODES; }
-+#line 1897 "parser.c"
++#line 1896 "parser.c"
+ break;
+
+ case 13: /* FileType: XKB_TYPES */
+#line 288 "parser.y"
+ { (yyval.file_type) = FILE_TYPE_TYPES; }
-+#line 1903 "parser.c"
++#line 1902 "parser.c"
+ break;
+
+ case 14: /* FileType: XKB_COMPATMAP */
+#line 289 "parser.y"
+ { (yyval.file_type) = FILE_TYPE_COMPAT; }
-+#line 1909 "parser.c"
++#line 1908 "parser.c"
+ break;
+
+ case 15: /* FileType: XKB_SYMBOLS */
+#line 290 "parser.y"
+ { (yyval.file_type) = FILE_TYPE_SYMBOLS; }
-+#line 1915 "parser.c"
++#line 1914 "parser.c"
+ break;
+
+ case 16: /* FileType: XKB_GEOMETRY */
+#line 291 "parser.y"
+ { (yyval.file_type) = FILE_TYPE_GEOMETRY; }
-+#line 1921 "parser.c"
++#line 1920 "parser.c"
+ break;
+
+ case 17: /* OptFlags: Flags */
+#line 294 "parser.y"
+ { (yyval.mapFlags) = (yyvsp[0].mapFlags); }
-+#line 1927 "parser.c"
++#line 1926 "parser.c"
+ break;
+
+ case 18: /* OptFlags: %empty */
+#line 295 "parser.y"
+ { (yyval.mapFlags) = 0; }
-+#line 1933 "parser.c"
++#line 1932 "parser.c"
+ break;
+
+ case 19: /* Flags: Flags Flag */
+#line 298 "parser.y"
+ { (yyval.mapFlags) = ((yyvsp[-1].mapFlags) | (yyvsp[0].mapFlags)); }
-+#line 1939 "parser.c"
++#line 1938 "parser.c"
+ break;
+
+ case 20: /* Flags: Flag */
+#line 299 "parser.y"
+ { (yyval.mapFlags) = (yyvsp[0].mapFlags); }
-+#line 1945 "parser.c"
++#line 1944 "parser.c"
+ break;
+
+ case 21: /* Flag: PARTIAL */
+#line 302 "parser.y"
+ { (yyval.mapFlags) = MAP_IS_PARTIAL; }
-+#line 1951 "parser.c"
++#line 1950 "parser.c"
+ break;
+
+ case 22: /* Flag: DEFAULT */
+#line 303 "parser.y"
+ { (yyval.mapFlags) = MAP_IS_DEFAULT; }
-+#line 1957 "parser.c"
++#line 1956 "parser.c"
+ break;
+
+ case 23: /* Flag: HIDDEN */
+#line 304 "parser.y"
+ { (yyval.mapFlags) = MAP_IS_HIDDEN; }
-+#line 1963 "parser.c"
++#line 1962 "parser.c"
+ break;
+
+ case 24: /* Flag: ALPHANUMERIC_KEYS */
+#line 305 "parser.y"
+ { (yyval.mapFlags) = MAP_HAS_ALPHANUMERIC; }
-+#line 1969 "parser.c"
++#line 1968 "parser.c"
+ break;
+
+ case 25: /* Flag: MODIFIER_KEYS */
+#line 306 "parser.y"
+ { (yyval.mapFlags) = MAP_HAS_MODIFIER; }
-+#line 1975 "parser.c"
++#line 1974 "parser.c"
+ break;
+
+ case 26: /* Flag: KEYPAD_KEYS */
+#line 307 "parser.y"
+ { (yyval.mapFlags) = MAP_HAS_KEYPAD; }
-+#line 1981 "parser.c"
++#line 1980 "parser.c"
+ break;
+
+ case 27: /* Flag: FUNCTION_KEYS */
+#line 308 "parser.y"
+ { (yyval.mapFlags) = MAP_HAS_FN; }
-+#line 1987 "parser.c"
++#line 1986 "parser.c"
+ break;
+
+ case 28: /* Flag: ALTERNATE_GROUP */
+#line 309 "parser.y"
+ { (yyval.mapFlags) = MAP_IS_ALTGR; }
-+#line 1993 "parser.c"
++#line 1992 "parser.c"
+ break;
+
+ case 29: /* DeclList: DeclList Decl */
@@ -2031,7 +2023,7 @@ index 0000000..e5ce45b
+ }
+ }
+ }
-+#line 2007 "parser.c"
++#line 2006 "parser.c"
+ break;
+
+ case 30: /* DeclList: DeclList OptMergeMode VModDecl */
@@ -2045,13 +2037,13 @@ index 0000000..e5ce45b
+ (yyval.anyList).head = &(yyvsp[0].vmodList).head->common; (yyval.anyList).last = &(yyvsp[0].vmodList).last->common;
+ }
+ }
-+#line 2021 "parser.c"
++#line 2020 "parser.c"
+ break;
+
+ case 31: /* DeclList: %empty */
+#line 337 "parser.y"
+ { (yyval.anyList).head = (yyval.anyList).last = NULL; }
-+#line 2027 "parser.c"
++#line 2026 "parser.c"
+ break;
+
+ case 32: /* Decl: OptMergeMode VarDecl */
@@ -2060,7 +2052,7 @@ index 0000000..e5ce45b
+ (yyvsp[0].var)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].var);
+ }
-+#line 2036 "parser.c"
++#line 2035 "parser.c"
+ break;
+
+ case 33: /* Decl: OptMergeMode InterpretDecl */
@@ -2069,7 +2061,7 @@ index 0000000..e5ce45b
+ (yyvsp[0].interp)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].interp);
+ }
-+#line 2045 "parser.c"
++#line 2044 "parser.c"
+ break;
+
+ case 34: /* Decl: OptMergeMode KeyNameDecl */
@@ -2078,7 +2070,7 @@ index 0000000..e5ce45b
+ (yyvsp[0].keyCode)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].keyCode);
+ }
-+#line 2054 "parser.c"
++#line 2053 "parser.c"
+ break;
+
+ case 35: /* Decl: OptMergeMode KeyAliasDecl */
@@ -2087,7 +2079,7 @@ index 0000000..e5ce45b
+ (yyvsp[0].keyAlias)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].keyAlias);
+ }
-+#line 2063 "parser.c"
++#line 2062 "parser.c"
+ break;
+
+ case 36: /* Decl: OptMergeMode KeyTypeDecl */
@@ -2096,7 +2088,7 @@ index 0000000..e5ce45b
+ (yyvsp[0].keyType)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].keyType);
+ }
-+#line 2072 "parser.c"
++#line 2071 "parser.c"
+ break;
+
+ case 37: /* Decl: OptMergeMode SymbolsDecl */
@@ -2105,7 +2097,7 @@ index 0000000..e5ce45b
+ (yyvsp[0].syms)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].syms);
+ }
-+#line 2081 "parser.c"
++#line 2080 "parser.c"
+ break;
+
+ case 38: /* Decl: OptMergeMode ModMapDecl */
@@ -2114,7 +2106,7 @@ index 0000000..e5ce45b
+ (yyvsp[0].modMask)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].modMask);
+ }
-+#line 2090 "parser.c"
++#line 2089 "parser.c"
+ break;
+
+ case 39: /* Decl: OptMergeMode GroupCompatDecl */
@@ -2123,7 +2115,7 @@ index 0000000..e5ce45b
+ (yyvsp[0].groupCompat)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].groupCompat);
+ }
-+#line 2099 "parser.c"
++#line 2098 "parser.c"
+ break;
+
+ case 40: /* Decl: OptMergeMode LedMapDecl */
@@ -2132,7 +2124,7 @@ index 0000000..e5ce45b
+ (yyvsp[0].ledMap)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].ledMap);
+ }
-+#line 2108 "parser.c"
++#line 2107 "parser.c"
+ break;
+
+ case 41: /* Decl: OptMergeMode LedNameDecl */
@@ -2141,25 +2133,25 @@ index 0000000..e5ce45b
+ (yyvsp[0].ledName)->merge = (yyvsp[-1].merge);
+ (yyval.any) = (ParseCommon *) (yyvsp[0].ledName);
+ }
-+#line 2117 "parser.c"
++#line 2116 "parser.c"
+ break;
+
+ case 42: /* Decl: OptMergeMode ShapeDecl */
+#line 391 "parser.y"
+ { (yyval.any) = NULL; }
-+#line 2123 "parser.c"
++#line 2122 "parser.c"
+ break;
+
+ case 43: /* Decl: OptMergeMode SectionDecl */
+#line 392 "parser.y"
+ { (yyval.any) = NULL; }
-+#line 2129 "parser.c"
++#line 2128 "parser.c"
+ break;
+
+ case 44: /* Decl: OptMergeMode DoodadDecl */
+#line 393 "parser.y"
+ { (yyval.any) = NULL; }
-+#line 2135 "parser.c"
++#line 2134 "parser.c"
+ break;
+
+ case 45: /* Decl: MergeMode STRING */
@@ -2168,523 +2160,523 @@ index 0000000..e5ce45b
+ (yyval.any) = (ParseCommon *) IncludeCreate(param->ctx, (yyvsp[0].str), (yyvsp[-1].merge));
+ free((yyvsp[0].str));
+ }
-+#line 2144 "parser.c"
++#line 2143 "parser.c"
+ break;
+
+ case 46: /* VarDecl: Lhs EQUALS Expr SEMI */
+#line 402 "parser.y"
+ { (yyval.var) = VarCreate((yyvsp[-3].expr), (yyvsp[-1].expr)); }
-+#line 2150 "parser.c"
++#line 2149 "parser.c"
+ break;
+
+ case 47: /* VarDecl: Ident SEMI */
+#line 404 "parser.y"
+ { (yyval.var) = BoolVarCreate((yyvsp[-1].atom), true); }
-+#line 2156 "parser.c"
++#line 2155 "parser.c"
+ break;
+
+ case 48: /* VarDecl: EXCLAM Ident SEMI */
+#line 406 "parser.y"
+ { (yyval.var) = BoolVarCreate((yyvsp[-1].atom), false); }
-+#line 2162 "parser.c"
++#line 2161 "parser.c"
+ break;
+
+ case 49: /* KeyNameDecl: KEYNAME EQUALS KeyCode SEMI */
+#line 410 "parser.y"
+ { (yyval.keyCode) = KeycodeCreate((yyvsp[-3].atom), (yyvsp[-1].num)); }
-+#line 2168 "parser.c"
++#line 2167 "parser.c"
+ break;
+
+ case 50: /* KeyAliasDecl: ALIAS KEYNAME EQUALS KEYNAME SEMI */
+#line 414 "parser.y"
+ { (yyval.keyAlias) = KeyAliasCreate((yyvsp[-3].atom), (yyvsp[-1].atom)); }
-+#line 2174 "parser.c"
++#line 2173 "parser.c"
+ break;
+
+ case 51: /* VModDecl: VIRTUAL_MODS VModDefList SEMI */
+#line 418 "parser.y"
+ { (yyval.vmodList) = (yyvsp[-1].vmodList); }
-+#line 2180 "parser.c"
++#line 2179 "parser.c"
+ break;
+
+ case 52: /* VModDefList: VModDefList COMMA VModDef */
+#line 422 "parser.y"
+ { (yyval.vmodList).head = (yyvsp[-2].vmodList).head; (yyval.vmodList).last->common.next = &(yyvsp[0].vmod)->common; (yyval.vmodList).last = (yyvsp[0].vmod); }
-+#line 2186 "parser.c"
++#line 2185 "parser.c"
+ break;
+
+ case 53: /* VModDefList: VModDef */
+#line 424 "parser.y"
+ { (yyval.vmodList).head = (yyval.vmodList).last = (yyvsp[0].vmod); }
-+#line 2192 "parser.c"
++#line 2191 "parser.c"
+ break;
+
+ case 54: /* VModDef: Ident */
+#line 428 "parser.y"
+ { (yyval.vmod) = VModCreate((yyvsp[0].atom), NULL); }
-+#line 2198 "parser.c"
++#line 2197 "parser.c"
+ break;
+
+ case 55: /* VModDef: Ident EQUALS Expr */
+#line 430 "parser.y"
+ { (yyval.vmod) = VModCreate((yyvsp[-2].atom), (yyvsp[0].expr)); }
-+#line 2204 "parser.c"
++#line 2203 "parser.c"
+ break;
+
+ case 56: /* InterpretDecl: INTERPRET InterpretMatch OBRACE VarDeclList CBRACE SEMI */
+#line 436 "parser.y"
+ { (yyvsp[-4].interp)->def = (yyvsp[-2].varList).head; (yyval.interp) = (yyvsp[-4].interp); }
-+#line 2210 "parser.c"
++#line 2209 "parser.c"
+ break;
+
+ case 57: /* InterpretMatch: KeySym PLUS Expr */
+#line 440 "parser.y"
+ { (yyval.interp) = InterpCreate((yyvsp[-2].keysym), (yyvsp[0].expr)); }
-+#line 2216 "parser.c"
++#line 2215 "parser.c"
+ break;
+
+ case 58: /* InterpretMatch: KeySym */
+#line 442 "parser.y"
+ { (yyval.interp) = InterpCreate((yyvsp[0].keysym), NULL); }
-+#line 2222 "parser.c"
++#line 2221 "parser.c"
+ break;
+
+ case 59: /* VarDeclList: VarDeclList VarDecl */
+#line 446 "parser.y"
+ { (yyval.varList).head = (yyvsp[-1].varList).head; (yyval.varList).last->common.next = &(yyvsp[0].var)->common; (yyval.varList).last = (yyvsp[0].var); }
-+#line 2228 "parser.c"
++#line 2227 "parser.c"
+ break;
+
+ case 60: /* VarDeclList: VarDecl */
+#line 448 "parser.y"
+ { (yyval.varList).head = (yyval.varList).last = (yyvsp[0].var); }
-+#line 2234 "parser.c"
++#line 2233 "parser.c"
+ break;
+
+ case 61: /* KeyTypeDecl: TYPE String OBRACE VarDeclList CBRACE SEMI */
+#line 454 "parser.y"
+ { (yyval.keyType) = KeyTypeCreate((yyvsp[-4].atom), (yyvsp[-2].varList).head); }
-+#line 2240 "parser.c"
++#line 2239 "parser.c"
+ break;
+
+ case 62: /* SymbolsDecl: KEY KEYNAME OBRACE SymbolsBody CBRACE SEMI */
+#line 460 "parser.y"
+ { (yyval.syms) = SymbolsCreate((yyvsp[-4].atom), (yyvsp[-2].varList).head); }
-+#line 2246 "parser.c"
++#line 2245 "parser.c"
+ break;
+
+ case 63: /* SymbolsBody: SymbolsBody COMMA SymbolsVarDecl */
+#line 464 "parser.y"
+ { (yyval.varList).head = (yyvsp[-2].varList).head; (yyval.varList).last->common.next = &(yyvsp[0].var)->common; (yyval.varList).last = (yyvsp[0].var); }
-+#line 2252 "parser.c"
++#line 2251 "parser.c"
+ break;
+
+ case 64: /* SymbolsBody: SymbolsVarDecl */
+#line 466 "parser.y"
+ { (yyval.varList).head = (yyval.varList).last = (yyvsp[0].var); }
-+#line 2258 "parser.c"
++#line 2257 "parser.c"
+ break;
+
+ case 65: /* SymbolsBody: %empty */
+#line 467 "parser.y"
+ { (yyval.varList).head = (yyval.varList).last = NULL; }
-+#line 2264 "parser.c"
++#line 2263 "parser.c"
+ break;
+
+ case 66: /* SymbolsVarDecl: Lhs EQUALS Expr */
+#line 470 "parser.y"
+ { (yyval.var) = VarCreate((yyvsp[-2].expr), (yyvsp[0].expr)); }
-+#line 2270 "parser.c"
++#line 2269 "parser.c"
+ break;
+
+ case 67: /* SymbolsVarDecl: Lhs EQUALS ArrayInit */
+#line 471 "parser.y"
+ { (yyval.var) = VarCreate((yyvsp[-2].expr), (yyvsp[0].expr)); }
-+#line 2276 "parser.c"
++#line 2275 "parser.c"
+ break;
+
+ case 68: /* SymbolsVarDecl: Ident */
+#line 472 "parser.y"
+ { (yyval.var) = BoolVarCreate((yyvsp[0].atom), true); }
-+#line 2282 "parser.c"
++#line 2281 "parser.c"
+ break;
+
+ case 69: /* SymbolsVarDecl: EXCLAM Ident */
+#line 473 "parser.y"
+ { (yyval.var) = BoolVarCreate((yyvsp[0].atom), false); }
-+#line 2288 "parser.c"
++#line 2287 "parser.c"
+ break;
+
+ case 70: /* SymbolsVarDecl: ArrayInit */
+#line 474 "parser.y"
+ { (yyval.var) = VarCreate(NULL, (yyvsp[0].expr)); }
-+#line 2294 "parser.c"
++#line 2293 "parser.c"
+ break;
+
+ case 71: /* ArrayInit: OBRACKET OptKeySymList CBRACKET */
+#line 478 "parser.y"
+ { (yyval.expr) = (yyvsp[-1].expr); }
-+#line 2300 "parser.c"
++#line 2299 "parser.c"
+ break;
+
+ case 72: /* ArrayInit: OBRACKET ActionList CBRACKET */
+#line 480 "parser.y"
+ { (yyval.expr) = ExprCreateActionList((yyvsp[-1].exprList).head); }
-+#line 2306 "parser.c"
++#line 2305 "parser.c"
+ break;
+
+ case 73: /* GroupCompatDecl: GROUP Integer EQUALS Expr SEMI */
+#line 484 "parser.y"
+ { (yyval.groupCompat) = GroupCompatCreate((yyvsp[-3].num), (yyvsp[-1].expr)); }
-+#line 2312 "parser.c"
++#line 2311 "parser.c"
+ break;
+
+ case 74: /* ModMapDecl: MODIFIER_MAP Ident OBRACE ExprList CBRACE SEMI */
+#line 488 "parser.y"
+ { (yyval.modMask) = ModMapCreate((yyvsp[-4].atom), (yyvsp[-2].exprList).head); }
-+#line 2318 "parser.c"
++#line 2317 "parser.c"
+ break;
+
+ case 75: /* LedMapDecl: INDICATOR String OBRACE VarDeclList CBRACE SEMI */
+#line 492 "parser.y"
+ { (yyval.ledMap) = LedMapCreate((yyvsp[-4].atom), (yyvsp[-2].varList).head); }
-+#line 2324 "parser.c"
++#line 2323 "parser.c"
+ break;
+
+ case 76: /* LedNameDecl: INDICATOR Integer EQUALS Expr SEMI */
+#line 496 "parser.y"
+ { (yyval.ledName) = LedNameCreate((yyvsp[-3].num), (yyvsp[-1].expr), false); }
-+#line 2330 "parser.c"
++#line 2329 "parser.c"
+ break;
+
+ case 77: /* LedNameDecl: VIRTUAL INDICATOR Integer EQUALS Expr SEMI */
+#line 498 "parser.y"
+ { (yyval.ledName) = LedNameCreate((yyvsp[-3].num), (yyvsp[-1].expr), true); }
-+#line 2336 "parser.c"
++#line 2335 "parser.c"
+ break;
+
+ case 78: /* ShapeDecl: SHAPE String OBRACE OutlineList CBRACE SEMI */
+#line 502 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2342 "parser.c"
++#line 2341 "parser.c"
+ break;
+
+ case 79: /* ShapeDecl: SHAPE String OBRACE CoordList CBRACE SEMI */
+#line 504 "parser.y"
+ { (void) (yyvsp[-2].expr); (yyval.geom) = NULL; }
-+#line 2348 "parser.c"
++#line 2347 "parser.c"
+ break;
+
+ case 80: /* SectionDecl: SECTION String OBRACE SectionBody CBRACE SEMI */
+#line 508 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2354 "parser.c"
++#line 2353 "parser.c"
+ break;
+
+ case 81: /* SectionBody: SectionBody SectionBodyItem */
+#line 511 "parser.y"
+ { (yyval.geom) = NULL;}
-+#line 2360 "parser.c"
++#line 2359 "parser.c"
+ break;
+
+ case 82: /* SectionBody: SectionBodyItem */
+#line 512 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2366 "parser.c"
++#line 2365 "parser.c"
+ break;
+
+ case 83: /* SectionBodyItem: ROW OBRACE RowBody CBRACE SEMI */
+#line 516 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2372 "parser.c"
++#line 2371 "parser.c"
+ break;
+
+ case 84: /* SectionBodyItem: VarDecl */
+#line 518 "parser.y"
+ { FreeStmt((ParseCommon *) (yyvsp[0].var)); (yyval.geom) = NULL; }
-+#line 2378 "parser.c"
++#line 2377 "parser.c"
+ break;
+
+ case 85: /* SectionBodyItem: DoodadDecl */
+#line 520 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2384 "parser.c"
++#line 2383 "parser.c"
+ break;
+
+ case 86: /* SectionBodyItem: LedMapDecl */
+#line 522 "parser.y"
+ { FreeStmt((ParseCommon *) (yyvsp[0].ledMap)); (yyval.geom) = NULL; }
-+#line 2390 "parser.c"
++#line 2389 "parser.c"
+ break;
+
+ case 87: /* SectionBodyItem: OverlayDecl */
+#line 524 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2396 "parser.c"
++#line 2395 "parser.c"
+ break;
+
+ case 88: /* RowBody: RowBody RowBodyItem */
+#line 527 "parser.y"
+ { (yyval.geom) = NULL;}
-+#line 2402 "parser.c"
++#line 2401 "parser.c"
+ break;
+
+ case 89: /* RowBody: RowBodyItem */
+#line 528 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2408 "parser.c"
++#line 2407 "parser.c"
+ break;
+
+ case 90: /* RowBodyItem: KEYS OBRACE Keys CBRACE SEMI */
+#line 531 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2414 "parser.c"
++#line 2413 "parser.c"
+ break;
+
+ case 91: /* RowBodyItem: VarDecl */
+#line 533 "parser.y"
+ { FreeStmt((ParseCommon *) (yyvsp[0].var)); (yyval.geom) = NULL; }
-+#line 2420 "parser.c"
++#line 2419 "parser.c"
+ break;
+
+ case 92: /* Keys: Keys COMMA Key */
+#line 536 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2426 "parser.c"
++#line 2425 "parser.c"
+ break;
+
+ case 93: /* Keys: Key */
+#line 537 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2432 "parser.c"
++#line 2431 "parser.c"
+ break;
+
+ case 94: /* Key: KEYNAME */
+#line 541 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2438 "parser.c"
++#line 2437 "parser.c"
+ break;
+
+ case 95: /* Key: OBRACE ExprList CBRACE */
+#line 543 "parser.y"
+ { FreeStmt((ParseCommon *) (yyvsp[-1].exprList).head); (yyval.geom) = NULL; }
-+#line 2444 "parser.c"
++#line 2443 "parser.c"
+ break;
+
+ case 96: /* OverlayDecl: OVERLAY String OBRACE OverlayKeyList CBRACE SEMI */
+#line 547 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2450 "parser.c"
++#line 2449 "parser.c"
+ break;
+
+ case 97: /* OverlayKeyList: OverlayKeyList COMMA OverlayKey */
+#line 550 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2456 "parser.c"
++#line 2455 "parser.c"
+ break;
+
+ case 98: /* OverlayKeyList: OverlayKey */
+#line 551 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2462 "parser.c"
++#line 2461 "parser.c"
+ break;
+
+ case 99: /* OverlayKey: KEYNAME EQUALS KEYNAME */
+#line 554 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2468 "parser.c"
++#line 2467 "parser.c"
+ break;
+
+ case 100: /* OutlineList: OutlineList COMMA OutlineInList */
+#line 558 "parser.y"
+ { (yyval.geom) = NULL;}
-+#line 2474 "parser.c"
++#line 2473 "parser.c"
+ break;
+
+ case 101: /* OutlineList: OutlineInList */
+#line 560 "parser.y"
+ { (yyval.geom) = NULL; }
-+#line 2480 "parser.c"
++#line 2479 "parser.c"
+ break;
+
+ case 102: /* OutlineInList: OBRACE CoordList CBRACE */
+#line 564 "parser.y"
+ { (void) (yyvsp[-1].expr); (yyval.geom) = NULL; }
-+#line 2486 "parser.c"
++#line 2485 "parser.c"
+ break;
+
+ case 103: /* OutlineInList: Ident EQUALS OBRACE CoordList CBRACE */
+#line 566 "parser.y"
+ { (void) (yyvsp[-1].expr); (yyval.geom) = NULL; }
-+#line 2492 "parser.c"
++#line 2491 "parser.c"
+ break;
+
+ case 104: /* OutlineInList: Ident EQUALS Expr */
+#line 568 "parser.y"
+ { FreeStmt((ParseCommon *) (yyvsp[0].expr)); (yyval.geom) = NULL; }
-+#line 2498 "parser.c"
++#line 2497 "parser.c"
+ break;
+
+ case 105: /* CoordList: CoordList COMMA Coord */
+#line 572 "parser.y"
+ { (void) (yyvsp[-2].expr); (void) (yyvsp[0].expr); (yyval.expr) = NULL; }
-+#line 2504 "parser.c"
++#line 2503 "parser.c"
+ break;
+
+ case 106: /* CoordList: Coord */
+#line 574 "parser.y"
+ { (void) (yyvsp[0].expr); (yyval.expr) = NULL; }
-+#line 2510 "parser.c"
++#line 2509 "parser.c"
+ break;
+
+ case 107: /* Coord: OBRACKET SignedNumber COMMA SignedNumber CBRACKET */
+#line 578 "parser.y"
+ { (yyval.expr) = NULL; }
-+#line 2516 "parser.c"
++#line 2515 "parser.c"
+ break;
+
+ case 108: /* DoodadDecl: DoodadType String OBRACE VarDeclList CBRACE SEMI */
+#line 582 "parser.y"
+ { FreeStmt((ParseCommon *) (yyvsp[-2].varList).head); (yyval.geom) = NULL; }
-+#line 2522 "parser.c"
++#line 2521 "parser.c"
+ break;
+
+ case 109: /* DoodadType: TEXT */
+#line 585 "parser.y"
+ { (yyval.num) = 0; }
-+#line 2528 "parser.c"
++#line 2527 "parser.c"
+ break;
+
+ case 110: /* DoodadType: OUTLINE */
+#line 586 "parser.y"
+ { (yyval.num) = 0; }
-+#line 2534 "parser.c"
++#line 2533 "parser.c"
+ break;
+
+ case 111: /* DoodadType: SOLID */
+#line 587 "parser.y"
+ { (yyval.num) = 0; }
-+#line 2540 "parser.c"
++#line 2539 "parser.c"
+ break;
+
+ case 112: /* DoodadType: LOGO */
+#line 588 "parser.y"
+ { (yyval.num) = 0; }
-+#line 2546 "parser.c"
++#line 2545 "parser.c"
+ break;
+
+ case 113: /* FieldSpec: Ident */
+#line 591 "parser.y"
+ { (yyval.atom) = (yyvsp[0].atom); }
-+#line 2552 "parser.c"
++#line 2551 "parser.c"
+ break;
+
+ case 114: /* FieldSpec: Element */
+#line 592 "parser.y"
+ { (yyval.atom) = (yyvsp[0].atom); }
-+#line 2558 "parser.c"
++#line 2557 "parser.c"
+ break;
+
+ case 115: /* Element: ACTION_TOK */
+#line 596 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "action"); }
-+#line 2564 "parser.c"
++#line 2563 "parser.c"
+ break;
+
+ case 116: /* Element: INTERPRET */
+#line 598 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "interpret"); }
-+#line 2570 "parser.c"
++#line 2569 "parser.c"
+ break;
+
+ case 117: /* Element: TYPE */
+#line 600 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "type"); }
-+#line 2576 "parser.c"
++#line 2575 "parser.c"
+ break;
+
+ case 118: /* Element: KEY */
+#line 602 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "key"); }
-+#line 2582 "parser.c"
++#line 2581 "parser.c"
+ break;
+
+ case 119: /* Element: GROUP */
+#line 604 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "group"); }
-+#line 2588 "parser.c"
++#line 2587 "parser.c"
+ break;
+
+ case 120: /* Element: MODIFIER_MAP */
+#line 606 "parser.y"
+ {(yyval.atom) = xkb_atom_intern_literal(param->ctx, "modifier_map");}
-+#line 2594 "parser.c"
++#line 2593 "parser.c"
+ break;
+
+ case 121: /* Element: INDICATOR */
+#line 608 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "indicator"); }
-+#line 2600 "parser.c"
++#line 2599 "parser.c"
+ break;
+
+ case 122: /* Element: SHAPE */
+#line 610 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "shape"); }
-+#line 2606 "parser.c"
++#line 2605 "parser.c"
+ break;
+
+ case 123: /* Element: ROW */
+#line 612 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "row"); }
-+#line 2612 "parser.c"
++#line 2611 "parser.c"
+ break;
+
+ case 124: /* Element: SECTION */
+#line 614 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "section"); }
-+#line 2618 "parser.c"
++#line 2617 "parser.c"
+ break;
+
+ case 125: /* Element: TEXT */
+#line 616 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "text"); }
-+#line 2624 "parser.c"
++#line 2623 "parser.c"
+ break;
+
+ case 126: /* OptMergeMode: MergeMode */
+#line 619 "parser.y"
+ { (yyval.merge) = (yyvsp[0].merge); }
-+#line 2630 "parser.c"
++#line 2629 "parser.c"
+ break;
+
+ case 127: /* OptMergeMode: %empty */
+#line 620 "parser.y"
+ { (yyval.merge) = MERGE_DEFAULT; }
-+#line 2636 "parser.c"
++#line 2635 "parser.c"
+ break;
+
+ case 128: /* MergeMode: INCLUDE */
+#line 623 "parser.y"
+ { (yyval.merge) = MERGE_DEFAULT; }
-+#line 2642 "parser.c"
++#line 2641 "parser.c"
+ break;
+
+ case 129: /* MergeMode: AUGMENT */
+#line 624 "parser.y"
+ { (yyval.merge) = MERGE_AUGMENT; }
-+#line 2648 "parser.c"
++#line 2647 "parser.c"
+ break;
+
+ case 130: /* MergeMode: OVERRIDE */
+#line 625 "parser.y"
+ { (yyval.merge) = MERGE_OVERRIDE; }
-+#line 2654 "parser.c"
++#line 2653 "parser.c"
+ break;
+
+ case 131: /* MergeMode: REPLACE */
+#line 626 "parser.y"
+ { (yyval.merge) = MERGE_REPLACE; }
-+#line 2660 "parser.c"
++#line 2659 "parser.c"
+ break;
+
+ case 132: /* MergeMode: ALTERNATE */
@@ -2696,223 +2688,223 @@ index 0000000..e5ce45b
+ */
+ (yyval.merge) = MERGE_DEFAULT;
+ }
-+#line 2672 "parser.c"
++#line 2671 "parser.c"
+ break;
+
+ case 133: /* OptExprList: ExprList */
+#line 637 "parser.y"
+ { (yyval.exprList) = (yyvsp[0].exprList); }
-+#line 2678 "parser.c"
++#line 2677 "parser.c"
+ break;
+
+ case 134: /* OptExprList: %empty */
+#line 638 "parser.y"
+ { (yyval.exprList).head = (yyval.exprList).last = NULL; }
-+#line 2684 "parser.c"
++#line 2683 "parser.c"
+ break;
+
+ case 135: /* ExprList: ExprList COMMA Expr */
+#line 642 "parser.y"
+ { (yyval.exprList).head = (yyvsp[-2].exprList).head; (yyval.exprList).last->common.next = &(yyvsp[0].expr)->common; (yyval.exprList).last = (yyvsp[0].expr); }
-+#line 2690 "parser.c"
++#line 2689 "parser.c"
+ break;
+
+ case 136: /* ExprList: Expr */
+#line 644 "parser.y"
+ { (yyval.exprList).head = (yyval.exprList).last = (yyvsp[0].expr); }
-+#line 2696 "parser.c"
++#line 2695 "parser.c"
+ break;
+
+ case 137: /* Expr: Expr DIVIDE Expr */
+#line 648 "parser.y"
+ { (yyval.expr) = ExprCreateBinary(EXPR_DIVIDE, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-+#line 2702 "parser.c"
++#line 2701 "parser.c"
+ break;
+
+ case 138: /* Expr: Expr PLUS Expr */
+#line 650 "parser.y"
+ { (yyval.expr) = ExprCreateBinary(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-+#line 2708 "parser.c"
++#line 2707 "parser.c"
+ break;
+
+ case 139: /* Expr: Expr MINUS Expr */
+#line 652 "parser.y"
+ { (yyval.expr) = ExprCreateBinary(EXPR_SUBTRACT, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-+#line 2714 "parser.c"
++#line 2713 "parser.c"
+ break;
+
+ case 140: /* Expr: Expr TIMES Expr */
+#line 654 "parser.y"
+ { (yyval.expr) = ExprCreateBinary(EXPR_MULTIPLY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-+#line 2720 "parser.c"
++#line 2719 "parser.c"
+ break;
+
+ case 141: /* Expr: Lhs EQUALS Expr */
+#line 656 "parser.y"
+ { (yyval.expr) = ExprCreateBinary(EXPR_ASSIGN, (yyvsp[-2].expr), (yyvsp[0].expr)); }
-+#line 2726 "parser.c"
++#line 2725 "parser.c"
+ break;
+
+ case 142: /* Expr: Term */
+#line 658 "parser.y"
+ { (yyval.expr) = (yyvsp[0].expr); }
-+#line 2732 "parser.c"
++#line 2731 "parser.c"
+ break;
+
+ case 143: /* Term: MINUS Term */
+#line 662 "parser.y"
+ { (yyval.expr) = ExprCreateUnary(EXPR_NEGATE, (yyvsp[0].expr)->expr.value_type, (yyvsp[0].expr)); }
-+#line 2738 "parser.c"
++#line 2737 "parser.c"
+ break;
+
+ case 144: /* Term: PLUS Term */
+#line 664 "parser.y"
+ { (yyval.expr) = ExprCreateUnary(EXPR_UNARY_PLUS, (yyvsp[0].expr)->expr.value_type, (yyvsp[0].expr)); }
-+#line 2744 "parser.c"
++#line 2743 "parser.c"
+ break;
+
+ case 145: /* Term: EXCLAM Term */
+#line 666 "parser.y"
+ { (yyval.expr) = ExprCreateUnary(EXPR_NOT, EXPR_TYPE_BOOLEAN, (yyvsp[0].expr)); }
-+#line 2750 "parser.c"
++#line 2749 "parser.c"
+ break;
+
+ case 146: /* Term: INVERT Term */
+#line 668 "parser.y"
+ { (yyval.expr) = ExprCreateUnary(EXPR_INVERT, (yyvsp[0].expr)->expr.value_type, (yyvsp[0].expr)); }
-+#line 2756 "parser.c"
++#line 2755 "parser.c"
+ break;
+
+ case 147: /* Term: Lhs */
+#line 670 "parser.y"
+ { (yyval.expr) = (yyvsp[0].expr); }
-+#line 2762 "parser.c"
++#line 2761 "parser.c"
+ break;
+
+ case 148: /* Term: FieldSpec OPAREN OptExprList CPAREN */
+#line 672 "parser.y"
+ { (yyval.expr) = ExprCreateAction((yyvsp[-3].atom), (yyvsp[-1].exprList).head); }
-+#line 2768 "parser.c"
++#line 2767 "parser.c"
+ break;
+
+ case 149: /* Term: Terminal */
+#line 674 "parser.y"
+ { (yyval.expr) = (yyvsp[0].expr); }
-+#line 2774 "parser.c"
++#line 2773 "parser.c"
+ break;
+
+ case 150: /* Term: OPAREN Expr CPAREN */
+#line 676 "parser.y"
+ { (yyval.expr) = (yyvsp[-1].expr); }
-+#line 2780 "parser.c"
++#line 2779 "parser.c"
+ break;
+
+ case 151: /* ActionList: ActionList COMMA Action */
+#line 680 "parser.y"
+ { (yyval.exprList).head = (yyvsp[-2].exprList).head; (yyval.exprList).last->common.next = &(yyvsp[0].expr)->common; (yyval.exprList).last = (yyvsp[0].expr); }
-+#line 2786 "parser.c"
++#line 2785 "parser.c"
+ break;
+
+ case 152: /* ActionList: Action */
+#line 682 "parser.y"
+ { (yyval.exprList).head = (yyval.exprList).last = (yyvsp[0].expr); }
-+#line 2792 "parser.c"
++#line 2791 "parser.c"
+ break;
+
+ case 153: /* Action: FieldSpec OPAREN OptExprList CPAREN */
+#line 686 "parser.y"
+ { (yyval.expr) = ExprCreateAction((yyvsp[-3].atom), (yyvsp[-1].exprList).head); }
-+#line 2798 "parser.c"
++#line 2797 "parser.c"
+ break;
+
+ case 154: /* Lhs: FieldSpec */
+#line 690 "parser.y"
+ { (yyval.expr) = ExprCreateIdent((yyvsp[0].atom)); }
-+#line 2804 "parser.c"
++#line 2803 "parser.c"
+ break;
+
+ case 155: /* Lhs: FieldSpec DOT FieldSpec */
+#line 692 "parser.y"
+ { (yyval.expr) = ExprCreateFieldRef((yyvsp[-2].atom), (yyvsp[0].atom)); }
-+#line 2810 "parser.c"
++#line 2809 "parser.c"
+ break;
+
+ case 156: /* Lhs: FieldSpec OBRACKET Expr CBRACKET */
+#line 694 "parser.y"
+ { (yyval.expr) = ExprCreateArrayRef(XKB_ATOM_NONE, (yyvsp[-3].atom), (yyvsp[-1].expr)); }
-+#line 2816 "parser.c"
++#line 2815 "parser.c"
+ break;
+
+ case 157: /* Lhs: FieldSpec DOT FieldSpec OBRACKET Expr CBRACKET */
+#line 696 "parser.y"
+ { (yyval.expr) = ExprCreateArrayRef((yyvsp[-5].atom), (yyvsp[-3].atom), (yyvsp[-1].expr)); }
-+#line 2822 "parser.c"
++#line 2821 "parser.c"
+ break;
+
+ case 158: /* Terminal: String */
+#line 700 "parser.y"
+ { (yyval.expr) = ExprCreateString((yyvsp[0].atom)); }
-+#line 2828 "parser.c"
++#line 2827 "parser.c"
+ break;
+
+ case 159: /* Terminal: Integer */
+#line 702 "parser.y"
+ { (yyval.expr) = ExprCreateInteger((yyvsp[0].num)); }
-+#line 2834 "parser.c"
++#line 2833 "parser.c"
+ break;
+
+ case 160: /* Terminal: Float */
+#line 704 "parser.y"
+ { (yyval.expr) = ExprCreateFloat(/* Discard $1 */); }
-+#line 2840 "parser.c"
++#line 2839 "parser.c"
+ break;
+
+ case 161: /* Terminal: KEYNAME */
+#line 706 "parser.y"
+ { (yyval.expr) = ExprCreateKeyName((yyvsp[0].atom)); }
-+#line 2846 "parser.c"
++#line 2845 "parser.c"
+ break;
+
+ case 162: /* OptKeySymList: KeySymList */
+#line 709 "parser.y"
+ { (yyval.expr) = (yyvsp[0].expr); }
-+#line 2852 "parser.c"
++#line 2851 "parser.c"
+ break;
+
+ case 163: /* OptKeySymList: %empty */
+#line 710 "parser.y"
+ { (yyval.expr) = NULL; }
-+#line 2858 "parser.c"
++#line 2857 "parser.c"
+ break;
+
+ case 164: /* KeySymList: KeySymList COMMA KeySym */
+#line 714 "parser.y"
+ { (yyval.expr) = ExprAppendKeysymList((yyvsp[-2].expr), (yyvsp[0].keysym)); }
-+#line 2864 "parser.c"
++#line 2863 "parser.c"
+ break;
+
+ case 165: /* KeySymList: KeySymList COMMA KeySyms */
+#line 716 "parser.y"
+ { (yyval.expr) = ExprAppendMultiKeysymList((yyvsp[-2].expr), (yyvsp[0].expr)); }
-+#line 2870 "parser.c"
++#line 2869 "parser.c"
+ break;
+
+ case 166: /* KeySymList: KeySym */
+#line 718 "parser.y"
+ { (yyval.expr) = ExprCreateKeysymList((yyvsp[0].keysym)); }
-+#line 2876 "parser.c"
++#line 2875 "parser.c"
+ break;
+
+ case 167: /* KeySymList: KeySyms */
+#line 720 "parser.y"
+ { (yyval.expr) = ExprCreateMultiKeysymList((yyvsp[0].expr)); }
-+#line 2882 "parser.c"
++#line 2881 "parser.c"
+ break;
+
+ case 168: /* KeySyms: OBRACE KeySymList CBRACE */
+#line 724 "parser.y"
+ { (yyval.expr) = (yyvsp[-1].expr); }
-+#line 2888 "parser.c"
++#line 2887 "parser.c"
+ break;
+
+ case 169: /* KeySym: IDENT */
@@ -2924,13 +2916,13 @@ index 0000000..e5ce45b
+ }
+ free((yyvsp[0].str));
+ }
-+#line 2900 "parser.c"
++#line 2899 "parser.c"
+ break;
+
+ case 170: /* KeySym: SECTION */
+#line 735 "parser.y"
+ { (yyval.keysym) = XKB_KEY_section; }
-+#line 2906 "parser.c"
++#line 2905 "parser.c"
+ break;
+
+ case 171: /* KeySym: Integer */
@@ -2952,89 +2944,89 @@ index 0000000..e5ce45b
+ }
+ }
+ }
-+#line 2928 "parser.c"
++#line 2927 "parser.c"
+ break;
+
+ case 172: /* SignedNumber: MINUS Number */
+#line 756 "parser.y"
+ { (yyval.num) = -(yyvsp[0].num); }
-+#line 2934 "parser.c"
++#line 2933 "parser.c"
+ break;
+
+ case 173: /* SignedNumber: Number */
+#line 757 "parser.y"
+ { (yyval.num) = (yyvsp[0].num); }
-+#line 2940 "parser.c"
++#line 2939 "parser.c"
+ break;
+
+ case 174: /* Number: FLOAT */
+#line 760 "parser.y"
+ { (yyval.num) = (yyvsp[0].num); }
-+#line 2946 "parser.c"
++#line 2945 "parser.c"
+ break;
+
+ case 175: /* Number: INTEGER */
+#line 761 "parser.y"
+ { (yyval.num) = (yyvsp[0].num); }
-+#line 2952 "parser.c"
++#line 2951 "parser.c"
+ break;
+
+ case 176: /* Float: FLOAT */
+#line 764 "parser.y"
+ { (yyval.num) = 0; }
-+#line 2958 "parser.c"
++#line 2957 "parser.c"
+ break;
+
+ case 177: /* Integer: INTEGER */
+#line 767 "parser.y"
+ { (yyval.num) = (yyvsp[0].num); }
-+#line 2964 "parser.c"
++#line 2963 "parser.c"
+ break;
+
+ case 178: /* KeyCode: INTEGER */
+#line 770 "parser.y"
+ { (yyval.num) = (yyvsp[0].num); }
-+#line 2970 "parser.c"
++#line 2969 "parser.c"
+ break;
+
+ case 179: /* Ident: IDENT */
+#line 773 "parser.y"
+ { (yyval.atom) = xkb_atom_intern(param->ctx, (yyvsp[0].str), strlen((yyvsp[0].str))); free((yyvsp[0].str)); }
-+#line 2976 "parser.c"
++#line 2975 "parser.c"
+ break;
+
+ case 180: /* Ident: DEFAULT */
+#line 774 "parser.y"
+ { (yyval.atom) = xkb_atom_intern_literal(param->ctx, "default"); }
-+#line 2982 "parser.c"
++#line 2981 "parser.c"
+ break;
+
+ case 181: /* String: STRING */
+#line 777 "parser.y"
+ { (yyval.atom) = xkb_atom_intern(param->ctx, (yyvsp[0].str), strlen((yyvsp[0].str))); free((yyvsp[0].str)); }
-+#line 2988 "parser.c"
++#line 2987 "parser.c"
+ break;
+
+ case 182: /* OptMapName: MapName */
+#line 780 "parser.y"
+ { (yyval.str) = (yyvsp[0].str); }
-+#line 2994 "parser.c"
++#line 2993 "parser.c"
+ break;
+
+ case 183: /* OptMapName: %empty */
+#line 781 "parser.y"
+ { (yyval.str) = NULL; }
-+#line 3000 "parser.c"
++#line 2999 "parser.c"
+ break;
+
+ case 184: /* MapName: STRING */
+#line 784 "parser.y"
+ { (yyval.str) = (yyvsp[0].str); }
-+#line 3006 "parser.c"
++#line 3005 "parser.c"
+ break;
+
+
-+#line 3010 "parser.c"
++#line 3009 "parser.c"
+
+ default: break;
+ }
@@ -3116,6 +3108,7 @@ index 0000000..e5ce45b
+ label yyerrorlab therefore never appears in user code. */
+ if (0)
+ YYERROR;
++ ++yynerrs;
+
+ /* Do not reclaim the symbols of the rule whose action triggered
+ this YYERROR. */
@@ -3176,7 +3169,7 @@ index 0000000..e5ce45b
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
-+ goto yyreturn;
++ goto yyreturnlab;
+
+
+/*-----------------------------------.
@@ -3184,24 +3177,22 @@ index 0000000..e5ce45b
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
-+ goto yyreturn;
++ goto yyreturnlab;
+
+
-+#if !defined yyoverflow
-+/*-------------------------------------------------.
-+| yyexhaustedlab -- memory exhaustion comes here. |
-+`-------------------------------------------------*/
++/*-----------------------------------------------------------.
++| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
++`-----------------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (param, YY_("memory exhausted"));
+ yyresult = 2;
-+ goto yyreturn;
-+#endif
++ goto yyreturnlab;
+
+
-+/*-------------------------------------------------------.
-+| yyreturn -- parsing is finished, clean up and return. |
-+`-------------------------------------------------------*/
-+yyreturn:
++/*----------------------------------------------------------.
++| yyreturnlab -- parsing is finished, clean up and return. |
++`----------------------------------------------------------*/
++yyreturnlab:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
@@ -3288,15 +3279,15 @@ index 0000000..e5ce45b
+}
diff --git a/src/xkbcomp/parser.h b/src/xkbcomp/parser.h
new file mode 100644
-index 0000000..feb82ce
+index 0000000..f788bdc
--- /dev/null
+++ b/src/xkbcomp/parser.h
-@@ -0,0 +1,169 @@
-+/* A Bison parser, made by GNU Bison 3.7.4. */
+@@ -0,0 +1,171 @@
++/* A Bison parser, made by GNU Bison 3.8.2. */
+
+/* Bison interface for Yacc-like parsers in C
+
-+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
++ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
+
+ This program is free software: you can redistribute it and/or modify
@@ -3310,7 +3301,7 @@ index 0000000..feb82ce
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
-+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
++ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
@@ -3458,9 +3449,11 @@ index 0000000..feb82ce
+
+
+
++
+int _xkbcommon_parse (struct parser_param *param);
+
++
+#endif /* !YY__XKBCOMMON_PARSER_H_INCLUDED */
--
-2.29.2
+2.34.0
diff --git a/pkg/libxkbcommon/ver b/pkg/libxkbcommon/ver
@@ -1 +1 @@
-1.3.0 r0
+1.3.1 r0