1From dfdb147844ea6c6448a38ab7a69c514c34879fda Mon Sep 17 00:00:00 2001
2From: Michael Forney <mforney@mforney.org>
3Date: Sat, 26 Oct 2019 02:05:31 -0700
4Subject: [PATCH] Track generated xkbcomp parser
5
6Generated with
7
8 yacc -H parser.h -o parser.c p _xkbcommon_ parser.y
9---
10 src/xkbcomp/parser.c | 3382 ++++++++++++++++++++++++++++++++++++++++++
11 src/xkbcomp/parser.h | 104 ++
12 2 files changed, 3486 insertions(+)
13 create mode 100644 src/xkbcomp/parser.c
14 create mode 100644 src/xkbcomp/parser.h
15
16diff --git a/src/xkbcomp/parser.c b/src/xkbcomp/parser.c
17new file mode 100644
18index 0000000..34e9ca8
19--- /dev/null
20+++ b/src/xkbcomp/parser.c
21@@ -0,0 +1,3382 @@
22+/* original parser id follows */
23+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
24+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
25+
26+#define YYBYACC 1
27+#define YYMAJOR 2
28+#define YYMINOR 0
29+#define YYPATCH 20240109
30+
31+#define YYEMPTY (-1)
32+#define yyclearin (yychar = YYEMPTY)
33+#define yyerrok (yyerrflag = 0)
34+#define YYRECOVERING() (yyerrflag != 0)
35+#define YYENOMEM (-2)
36+#define YYEOF 0
37+#undef YYBTYACC
38+#define YYBTYACC 0
39+#define YYDEBUGSTR YYPREFIX "debug"
40+
41+#ifndef yyparse
42+#define yyparse _xkbcommon_parse
43+#endif /* yyparse */
44+
45+#ifndef yylex
46+#define yylex _xkbcommon_lex
47+#endif /* yylex */
48+
49+#ifndef yyerror
50+#define yyerror _xkbcommon_error
51+#endif /* yyerror */
52+
53+#ifndef yychar
54+#define yychar _xkbcommon_char
55+#endif /* yychar */
56+
57+#ifndef yyval
58+#define yyval _xkbcommon_val
59+#endif /* yyval */
60+
61+#ifndef yylval
62+#define yylval _xkbcommon_lval
63+#endif /* yylval */
64+
65+#ifndef yydebug
66+#define yydebug _xkbcommon_debug
67+#endif /* yydebug */
68+
69+#ifndef yynerrs
70+#define yynerrs _xkbcommon_nerrs
71+#endif /* yynerrs */
72+
73+#ifndef yyerrflag
74+#define yyerrflag _xkbcommon_errflag
75+#endif /* yyerrflag */
76+
77+#ifndef yylhs
78+#define yylhs _xkbcommon_lhs
79+#endif /* yylhs */
80+
81+#ifndef yylen
82+#define yylen _xkbcommon_len
83+#endif /* yylen */
84+
85+#ifndef yydefred
86+#define yydefred _xkbcommon_defred
87+#endif /* yydefred */
88+
89+#ifndef yystos
90+#define yystos _xkbcommon_stos
91+#endif /* yystos */
92+
93+#ifndef yydgoto
94+#define yydgoto _xkbcommon_dgoto
95+#endif /* yydgoto */
96+
97+#ifndef yysindex
98+#define yysindex _xkbcommon_sindex
99+#endif /* yysindex */
100+
101+#ifndef yyrindex
102+#define yyrindex _xkbcommon_rindex
103+#endif /* yyrindex */
104+
105+#ifndef yygindex
106+#define yygindex _xkbcommon_gindex
107+#endif /* yygindex */
108+
109+#ifndef yytable
110+#define yytable _xkbcommon_table
111+#endif /* yytable */
112+
113+#ifndef yycheck
114+#define yycheck _xkbcommon_check
115+#endif /* yycheck */
116+
117+#ifndef yyname
118+#define yyname _xkbcommon_name
119+#endif /* yyname */
120+
121+#ifndef yyrule
122+#define yyrule _xkbcommon_rule
123+#endif /* yyrule */
124+
125+#if YYBTYACC
126+
127+#ifndef yycindex
128+#define yycindex _xkbcommon_cindex
129+#endif /* yycindex */
130+
131+#ifndef yyctable
132+#define yyctable _xkbcommon_ctable
133+#endif /* yyctable */
134+
135+#endif /* YYBTYACC */
136+
137+#define YYPREFIX "_xkbcommon_"
138+
139+#define YYPURE 1
140+
141+#line 34 "parser.y"
142+#include "config.h"
143+
144+#include "xkbcomp/xkbcomp-priv.h"
145+#include "xkbcomp/ast-build.h"
146+#include "xkbcomp/parser-priv.h"
147+#include "scanner-utils.h"
148+#include "keysym.h"
149+
150+struct parser_param {
151+ struct xkb_context *ctx;
152+ struct scanner *scanner;
153+ XkbFile *rtrn;
154+ bool more_maps;
155+};
156+
157+#define parser_err(param, error_id, fmt, ...) \
158+ scanner_err_with_code((param)->scanner, error_id, fmt, ##__VA_ARGS__)
159+
160+#define parser_warn(param, warning_id, fmt, ...) \
161+ scanner_warn_with_code((param)->scanner, warning_id, fmt, ##__VA_ARGS__)
162+
163+static void
164+_xkbcommon_error(struct parser_param *param, const char *msg)
165+{
166+ parser_err(param, XKB_ERROR_INVALID_SYNTAX, "%s", msg);
167+}
168+
169+static bool
170+resolve_keysym(const char *name, xkb_keysym_t *sym_rtrn)
171+{
172+ xkb_keysym_t sym;
173+
174+ if (!name || istreq(name, "any") || istreq(name, "nosymbol")) {
175+ *sym_rtrn = XKB_KEY_NoSymbol;
176+ return true;
177+ }
178+
179+ if (istreq(name, "none") || istreq(name, "voidsymbol")) {
180+ *sym_rtrn = XKB_KEY_VoidSymbol;
181+ return true;
182+ }
183+
184+ sym = xkb_keysym_from_name(name, XKB_KEYSYM_NO_FLAGS);
185+ if (sym != XKB_KEY_NoSymbol) {
186+ *sym_rtrn = sym;
187+ return true;
188+ }
189+
190+ return false;
191+}
192+
193+#define param_scanner param->scanner
194+#ifdef YYSTYPE
195+#undef YYSTYPE_IS_DECLARED
196+#define YYSTYPE_IS_DECLARED 1
197+#endif
198+#ifndef YYSTYPE_IS_DECLARED
199+#define YYSTYPE_IS_DECLARED 1
200+#line 165 "parser.y"
201+typedef union YYSTYPE {
202+ int64_t num;
203+ enum xkb_file_type file_type;
204+ char *str;
205+ xkb_atom_t atom;
206+ enum merge_mode merge;
207+ enum xkb_map_flags mapFlags;
208+ xkb_keysym_t keysym;
209+ ParseCommon *any;
210+ struct { ParseCommon *head; ParseCommon *last; } anyList;
211+ ExprDef *expr;
212+ struct { ExprDef *head; ExprDef *last; } exprList;
213+ VarDef *var;
214+ struct { VarDef *head; VarDef *last; } varList;
215+ VModDef *vmod;
216+ struct { VModDef *head; VModDef *last; } vmodList;
217+ InterpDef *interp;
218+ KeyTypeDef *keyType;
219+ SymbolsDef *syms;
220+ ModMapDef *modMask;
221+ GroupCompatDef *groupCompat;
222+ LedMapDef *ledMap;
223+ LedNameDef *ledName;
224+ KeycodeDef *keyCode;
225+ KeyAliasDef *keyAlias;
226+ void *geom;
227+ XkbFile *file;
228+ struct { XkbFile *head; XkbFile *last; } fileList;
229+} YYSTYPE;
230+#endif /* !YYSTYPE_IS_DECLARED */
231+#line 211 "parser.c"
232+
233+/* compatibility with bison */
234+#ifdef YYPARSE_PARAM
235+/* compatibility with FreeBSD */
236+# ifdef YYPARSE_PARAM_TYPE
237+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
238+# else
239+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
240+# endif
241+#else
242+# define YYPARSE_DECL() yyparse(struct parser_param *param)
243+#endif
244+
245+/* Parameters sent to lex. */
246+#ifdef YYLEX_PARAM
247+# ifdef YYLEX_PARAM_TYPE
248+# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
249+# else
250+# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
251+# endif
252+# define YYLEX yylex(&yylval, YYLEX_PARAM)
253+#else
254+# define YYLEX_DECL() yylex(YYSTYPE *yylval, struct scanner *param_scanner)
255+# define YYLEX yylex(&yylval, param_scanner)
256+#endif
257+
258+/* Parameters sent to yyerror. */
259+#ifndef YYERROR_DECL
260+#define YYERROR_DECL() yyerror(struct parser_param *param, const char *s)
261+#endif
262+#ifndef YYERROR_CALL
263+#define YYERROR_CALL(msg) yyerror(param, msg)
264+#endif
265+
266+#ifndef YYDESTRUCT_DECL
267+#define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val, struct parser_param *param)
268+#endif
269+#ifndef YYDESTRUCT_CALL
270+#define YYDESTRUCT_CALL(msg, psymb, val) yydestruct(msg, psymb, val, param)
271+#endif
272+
273+extern int YYPARSE_DECL();
274+
275+#define END_OF_FILE 0
276+#define ERROR_TOK 255
277+#define XKB_KEYMAP 1
278+#define XKB_KEYCODES 2
279+#define XKB_TYPES 3
280+#define XKB_SYMBOLS 4
281+#define XKB_COMPATMAP 5
282+#define XKB_GEOMETRY 6
283+#define XKB_SEMANTICS 7
284+#define XKB_LAYOUT 8
285+#define INCLUDE 10
286+#define OVERRIDE 11
287+#define AUGMENT 12
288+#define REPLACE 13
289+#define ALTERNATE 14
290+#define VIRTUAL_MODS 20
291+#define TYPE 21
292+#define INTERPRET 22
293+#define ACTION_TOK 23
294+#define KEY 24
295+#define ALIAS 25
296+#define GROUP 26
297+#define MODIFIER_MAP 27
298+#define INDICATOR 28
299+#define SHAPE 29
300+#define KEYS 30
301+#define ROW 31
302+#define SECTION 32
303+#define OVERLAY 33
304+#define TEXT 34
305+#define OUTLINE 35
306+#define SOLID 36
307+#define LOGO 37
308+#define VIRTUAL 38
309+#define EQUALS 40
310+#define PLUS 41
311+#define MINUS 42
312+#define DIVIDE 43
313+#define TIMES 44
314+#define OBRACE 45
315+#define CBRACE 46
316+#define OPAREN 47
317+#define CPAREN 48
318+#define OBRACKET 49
319+#define CBRACKET 50
320+#define DOT 51
321+#define COMMA 52
322+#define SEMI 53
323+#define EXCLAM 54
324+#define INVERT 55
325+#define STRING 60
326+#define INTEGER 61
327+#define FLOAT 62
328+#define IDENT 63
329+#define KEYNAME 64
330+#define PARTIAL 70
331+#define DEFAULT 71
332+#define HIDDEN 72
333+#define ALPHANUMERIC_KEYS 73
334+#define MODIFIER_KEYS 74
335+#define KEYPAD_KEYS 75
336+#define FUNCTION_KEYS 76
337+#define ALTERNATE_GROUP 77
338+#define YYERRCODE 256
339+typedef int YYINT;
340+static const YYINT _xkbcommon_lhs[] = { -1,
341+ 0, 0, 0, 70, 9, 9, 9, 69, 69, 68,
342+ 10, 10, 10, 10, 10, 13, 13, 12, 12, 11,
343+ 11, 11, 11, 11, 11, 11, 11, 22, 22, 22,
344+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
345+ 21, 21, 21, 21, 37, 37, 37, 52, 53, 43,
346+ 42, 42, 41, 41, 44, 45, 45, 39, 39, 46,
347+ 47, 40, 40, 38, 38, 38, 38, 38, 27, 27,
348+ 49, 48, 50, 51, 51, 54, 54, 55, 56, 56,
349+ 57, 57, 57, 57, 57, 58, 58, 59, 59, 60,
350+ 60, 61, 61, 62, 63, 63, 64, 65, 65, 66,
351+ 66, 66, 33, 33, 32, 67, 6, 6, 6, 6,
352+ 16, 16, 18, 18, 18, 18, 18, 18, 18, 18,
353+ 18, 18, 18, 8, 8, 7, 7, 7, 7, 7,
354+ 34, 34, 35, 35, 23, 23, 23, 23, 23, 23,
355+ 24, 24, 24, 24, 24, 24, 24, 24, 36, 36,
356+ 31, 25, 25, 25, 25, 26, 26, 26, 26, 29,
357+ 29, 30, 30, 30, 30, 28, 20, 20, 20, 5,
358+ 5, 2, 2, 4, 3, 1, 17, 17, 19, 15,
359+ 15, 14,
360+};
361+static const YYINT _xkbcommon_len[] = { 2,
362+ 1, 1, 1, 7, 1, 1, 1, 2, 1, 7,
363+ 1, 1, 1, 1, 1, 1, 0, 2, 1, 1,
364+ 1, 1, 1, 1, 1, 1, 1, 2, 3, 0,
365+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
366+ 2, 2, 2, 2, 4, 2, 3, 4, 5, 3,
367+ 3, 1, 1, 3, 6, 3, 1, 2, 1, 6,
368+ 6, 3, 1, 3, 3, 1, 2, 1, 3, 3,
369+ 5, 6, 6, 5, 6, 6, 6, 6, 2, 1,
370+ 5, 1, 1, 1, 1, 2, 1, 5, 1, 3,
371+ 1, 1, 3, 6, 3, 1, 3, 3, 1, 3,
372+ 5, 3, 3, 1, 5, 6, 1, 1, 1, 1,
373+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
374+ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
375+ 1, 0, 3, 1, 3, 3, 3, 3, 3, 1,
376+ 2, 2, 2, 2, 1, 4, 1, 3, 3, 1,
377+ 4, 1, 3, 4, 6, 1, 1, 1, 1, 1,
378+ 0, 3, 3, 1, 1, 3, 1, 1, 1, 2,
379+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
380+ 0, 1,
381+};
382+static const YYINT _xkbcommon_defred[] = { 0,
383+ 3, 20, 21, 22, 23, 24, 25, 26, 27, 0,
384+ 19, 0, 0, 2, 1, 18, 5, 11, 12, 14,
385+ 13, 15, 6, 7, 0, 0, 182, 180, 0, 0,
386+ 0, 30, 0, 9, 0, 0, 0, 8, 126, 128,
387+ 127, 129, 130, 0, 0, 0, 28, 4, 10, 44,
388+ 0, 0, 0, 113, 0, 0, 0, 0, 0, 0,
389+ 121, 0, 0, 108, 109, 110, 0, 0, 177, 0,
390+ 178, 0, 0, 0, 112, 0, 31, 29, 32, 35,
391+ 36, 37, 38, 39, 40, 33, 34, 41, 42, 43,
392+ 0, 52, 0, 179, 0, 168, 175, 167, 169, 0,
393+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
394+ 0, 0, 0, 0, 0, 46, 0, 0, 0, 50,
395+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
396+ 0, 0, 47, 176, 0, 0, 115, 114, 116, 117,
397+ 118, 119, 120, 122, 123, 0, 0, 0, 0, 0,
398+ 174, 159, 157, 158, 0, 111, 156, 0, 140, 0,
399+ 147, 0, 0, 0, 51, 59, 0, 0, 0, 0,
400+ 0, 0, 0, 68, 63, 0, 0, 0, 0, 0,
401+ 0, 0, 0, 0, 0, 104, 0, 0, 99, 0,
402+ 0, 0, 82, 84, 0, 80, 85, 83, 0, 48,
403+ 0, 142, 145, 141, 0, 143, 144, 0, 0, 0,
404+ 0, 0, 154, 0, 0, 45, 0, 58, 0, 0,
405+ 0, 0, 0, 164, 165, 0, 0, 150, 0, 67,
406+ 0, 0, 0, 49, 71, 0, 0, 74, 0, 0,
407+ 0, 173, 172, 171, 0, 0, 0, 0, 0, 0,
408+ 0, 0, 0, 79, 0, 0, 148, 0, 0, 0,
409+ 0, 135, 138, 0, 0, 60, 55, 0, 0, 69,
410+ 0, 70, 0, 0, 65, 61, 62, 72, 0, 73,
411+ 100, 170, 0, 0, 0, 77, 103, 76, 98, 0,
412+ 89, 0, 87, 0, 78, 75, 106, 146, 155, 166,
413+ 0, 162, 163, 149, 0, 0, 0, 0, 86, 0,
414+ 0, 96, 151, 105, 101, 0, 92, 0, 91, 81,
415+ 0, 0, 0, 0, 0, 0, 97, 94, 95, 93,
416+ 88, 90,
417+};
418+#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
419+static const YYINT _xkbcommon_stos[] = { 0,
420+ 0, 70, 71, 72, 73, 74, 75, 76, 77, 258,
421+ 269, 270, 271, 326, 328, 269, 1, 2, 3, 4,
422+ 5, 6, 7, 8, 267, 268, 60, 272, 273, 273,
423+ 45, 45, 271, 326, 327, 280, 46, 326, 10, 11,
424+ 12, 13, 14, 46, 265, 266, 279, 53, 53, 60,
425+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
426+ 31, 32, 34, 35, 36, 37, 38, 54, 63, 64,
427+ 71, 264, 274, 275, 276, 283, 295, 301, 302, 304,
428+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 325,
429+ 275, 299, 300, 60, 277, 32, 61, 63, 261, 278,
430+ 303, 64, 64, 261, 275, 261, 277, 277, 277, 28,
431+ 275, 40, 277, 49, 51, 53, 40, 40, 52, 53,
432+ 45, 41, 45, 45, 40, 40, 45, 40, 45, 45,
433+ 45, 261, 53, 61, 259, 45, 21, 22, 24, 26,
434+ 27, 28, 29, 32, 34, 41, 42, 47, 54, 55,
435+ 62, 64, 261, 262, 274, 275, 277, 281, 282, 283,
436+ 284, 274, 281, 281, 299, 295, 297, 281, 297, 49,
437+ 54, 275, 283, 285, 296, 298, 64, 281, 281, 293,
438+ 281, 297, 45, 49, 275, 290, 291, 323, 324, 28,
439+ 31, 33, 295, 308, 314, 315, 320, 325, 40, 53,
440+ 297, 282, 283, 282, 281, 282, 282, 47, 41, 42,
441+ 43, 44, 50, 40, 49, 53, 46, 295, 46, 32,
442+ 45, 63, 274, 278, 286, 287, 288, 289, 294, 275,
443+ 40, 46, 52, 53, 53, 46, 52, 53, 46, 291,
444+ 42, 61, 62, 260, 263, 40, 46, 52, 46, 52,
445+ 45, 277, 46, 315, 281, 46, 48, 292, 293, 281,
446+ 281, 281, 281, 281, 281, 53, 53, 288, 47, 50,
447+ 52, 50, 52, 281, 285, 53, 296, 53, 281, 53,
448+ 46, 260, 52, 45, 281, 53, 290, 53, 324, 30,
449+ 295, 316, 317, 45, 53, 53, 53, 48, 50, 46,
450+ 292, 278, 286, 289, 263, 291, 45, 46, 317, 64,
451+ 321, 322, 48, 50, 46, 45, 64, 318, 319, 53,
452+ 40, 46, 52, 293, 46, 52, 64, 53, 322, 46,
453+ 53, 319,
454+};
455+#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
456+static const YYINT _xkbcommon_dgoto[] = { 10,
457+ 135, 244, 153, 154, 245, 72, 45, 46, 25, 26,
458+ 11, 12, 33, 28, 29, 155, 156, 75, 157, 224,
459+ 47, 36, 179, 159, 160, 161, 174, 225, 226, 227,
460+ 228, 186, 187, 258, 259, 229, 166, 175, 167, 176,
461+ 92, 93, 78, 79, 101, 80, 81, 82, 83, 194,
462+ 85, 86, 87, 88, 89, 195, 196, 292, 293, 318,
463+ 319, 197, 311, 312, 188, 189, 198, 14, 35, 15,
464+};
465+static const YYINT _xkbcommon_sindex[] = { 164,
466+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
467+ 0, 499, 823, 0, 0, 0, 0, 0, 0, 0,
468+ 0, 0, 0, 0, -2, -2, 0, 0, -13, 26,
469+ 499, 0, 623, 0, 154, 15, -44, 0, 0, 0,
470+ 0, 0, 0, 23, 32, 16, 0, 0, 0, 0,
471+ -56, 40, 2, 0, 98, 108, 121, -56, 6, 40,
472+ 0, 40, 0, 0, 0, 0, 189, -56, 0, 192,
473+ 0, 40, 79, 202, 0, 227, 0, 0, 0, 0,
474+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
475+ 253, 0, 141, 0, 269, 0, 0, 0, 0, 257,
476+ 282, 283, 290, 302, 300, 315, 333, 337, 351, 121,
477+ 320, 348, 366, 422, 776, 0, 422, 422, -56, 0,
478+ 752, 422, 752, 570, 368, 422, 422, 422, 752, -14,
479+ 514, 385, 0, 0, 380, 752, 0, 0, 0, 0,
480+ 0, 0, 0, 0, 0, 422, 422, 422, 422, 422,
481+ 0, 0, 0, 0, 97, 0, 0, 66, 0, 401,
482+ 0, 393, 115, 201, 0, 0, 584, 201, 622, 638,
483+ -56, 0, 412, 0, 0, -36, 402, 133, 201, -22,
484+ 260, 684, 408, 56, 418, 0, 74, 81, 0, 40,
485+ 414, 40, 0, 0, 468, 0, 0, 0, 422, 0,
486+ 700, 0, 0, 0, 326, 0, 0, 422, 422, 422,
487+ 422, 422, 0, 422, 422, 0, 407, 0, 421, 0,
488+ 36, 0, 424, 0, 0, 417, 423, 0, 255, 0,
489+ 330, 425, 570, 0, 0, 426, 422, 0, 427, 119,
490+ 160, 0, 0, 0, 429, 376, 434, 408, 435, 1,
491+ 738, 453, 463, 0, 268, 465, 0, 458, 472, 276,
492+ 276, 0, 0, 201, 345, 0, 0, 143, 422, 0,
493+ 36, 0, 776, 201, 0, 0, 0, 0, 201, 0,
494+ 0, 0, 56, 408, 201, 0, 0, 0, 0, 484,
495+ 0, 532, 0, 470, 0, 0, 0, 0, 0, 0,
496+ 496, 0, 0, 0, 502, 217, 10, 504, 0, 525,
497+ 220, 0, 0, 0, 0, 422, 0, 277, 0, 0,
498+ 503, 526, 470, 360, 527, 10, 0, 0, 0, 0,
499+ 0, 0,
500+};
501+static const YYINT _xkbcommon_rindex[] = { 847,
502+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
503+ 0, 855, 0, 0, 0, 0, 0, 0, 0, 0,
504+ 0, 0, 0, 0, 537, 537, 0, 0, 0, 0,
505+ 692, 0, 0, 0, 692, 254, 0, 0, 0, 0,
506+ 0, 0, 0, 0, 312, 0, 0, 0, 0, 0,
507+ 0, 55, 73, 0, 91, 0, 112, 129, 157, 161,
508+ 0, 219, 42, 0, 0, 0, 0, 0, 0, 0,
509+ 0, 0, 544, 222, 0, 0, 0, 0, 0, 0,
510+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
511+ 328, 0, 0, 0, 0, 0, 0, 0, 0, 543,
512+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
513+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
514+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
515+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
516+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
517+ 0, 0, 0, 0, 208, 0, 0, 0, 0, 636,
518+ 0, 467, 0, 361, 0, 0, 0, 545, 0, 539,
519+ 0, 139, 0, 0, 0, 0, 0, 0, 475, 0,
520+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 157,
521+ 275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
522+ 0, 0, 0, 0, 0, 0, 0, 552, 0, 0,
523+ 0, 0, 0, 0, 0, 0, 0, 0, 0, -33,
524+ 0, 313, 0, 0, 0, 0, 559, 0, 0, 0,
525+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
526+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
527+ 0, 0, 0, 0, 0, 0, 0, 0, 566, 374,
528+ 420, 0, 0, 480, 0, 0, 0, 0, 552, 0,
529+ 0, 0, 0, 382, 0, 0, 0, 0, 535, 0,
530+ 0, 0, 0, 0, 383, 0, 0, 0, 0, 0,
531+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
532+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
533+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
534+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
535+ 0, 0,
536+};
537+#if YYBTYACC
538+static const YYINT _xkbcommon_cindex[] = { 0,
539+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
540+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
541+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
542+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
543+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
544+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
545+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
546+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
547+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
548+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
549+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
550+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
551+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
552+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
553+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
554+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
555+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
556+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
557+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
558+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
559+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
560+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
561+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
562+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
563+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
564+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
565+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
566+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
567+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
568+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
569+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
570+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
571+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
572+ 0, 0,
573+};
574+#endif
575+static const YYINT _xkbcommon_gindex[] = { 0,
576+ 0, 379, -51, 0, 334, 0, 0, 0, 0, 0,
577+ 609, 0, 637, 0, 596, 14, -46, 0, -39, -52,
578+ 0, 0, 85, 485, -35, 0, 392, 365, 0, 419,
579+ 369, 391, -179, 388, -124, 0, -28, 430, -67, 0,
580+ 533, 0, 0, 0, 0, 0, 0, 0, 0, 612,
581+ 0, 0, 0, 0, 0, 0, 476, 0, 381, 0,
582+ 349, 0, 0, 364, 0, 440, 628, 183, 0, 0,
583+};
584+#define YYTABLESIZE 863
585+static const YYINT _xkbcommon_table[] = { 74,
586+ 100, 99, 180, 240, 91, 104, 69, 106, 48, 232,
587+ 76, 105, 95, 122, 71, 233, 168, 77, 168, 107,
588+ 108, 111, 109, 236, 39, 40, 41, 42, 43, 237,
589+ 183, 31, 113, 96, 184, 51, 52, 53, 54, 55,
590+ 56, 57, 58, 59, 60, 183, 61, 62, 69, 63,
591+ 64, 65, 66, 67, 316, 169, 71, 27, 132, 73,
592+ 44, 182, 97, 69, 98, 94, 97, 96, 201, 68,
593+ 32, 71, 91, 317, 74, 49, 74, 172, 69, 70,
594+ 221, 123, 74, 185, 74, 76, 71, 76, 173, 74,
595+ 123, 50, 123, 76, 115, 76, 97, 241, 98, 94,
596+ 76, 107, 193, 115, 306, 115, 209, 210, 211, 212,
597+ 203, 203, 114, 203, 203, 213, 242, 243, 99, 247,
598+ 74, 114, 74, 114, 230, 248, 249, 114, 162, 115,
599+ 116, 76, 250, 76, 73, 74, 73, 73, 218, 116,
600+ 218, 116, 73, 208, 73, 114, 76, 115, 74, 73,
601+ 107, 117, 252, 218, 74, 209, 210, 211, 212, 76,
602+ 117, 102, 117, 1, 281, 76, 193, 216, 118, 99,
603+ 248, 103, 218, 209, 210, 211, 212, 118, 111, 118,
604+ 73, 97, 73, 223, 66, 235, 172, 111, 300, 111,
605+ 66, 324, 119, 120, 271, 73, 119, 173, 158, 37,
606+ 120, 163, 164, 185, 74, 119, 168, 119, 73, 120,
607+ 178, 120, 181, 34, 73, 76, 110, 38, 302, 99,
608+ 242, 243, 291, 2, 3, 4, 5, 6, 7, 8,
609+ 9, 112, 205, 2, 3, 4, 5, 6, 7, 8,
610+ 9, 209, 210, 211, 212, 74, 73, 152, 152, 152,
611+ 152, 152, 152, 152, 116, 152, 76, 152, 122, 152,
612+ 152, 111, 315, 291, 73, 322, 117, 122, 248, 122,
613+ 111, 323, 111, 125, 125, 125, 125, 125, 125, 125,
614+ 125, 125, 125, 255, 125, 125, 223, 125, 125, 125,
615+ 125, 125, 118, 260, 261, 262, 263, 122, 264, 265,
616+ 209, 210, 211, 212, 272, 73, 273, 125, 209, 210,
617+ 211, 212, 238, 121, 121, 274, 125, 125, 211, 212,
618+ 296, 279, 325, 121, 125, 121, 123, 124, 326, 125,
619+ 285, 124, 124, 124, 124, 124, 124, 124, 124, 124,
620+ 124, 126, 124, 124, 127, 124, 124, 124, 124, 124,
621+ 137, 138, 54, 139, 128, 140, 141, 142, 143, 177,
622+ 61, 144, 167, 145, 167, 124, 209, 210, 211, 212,
623+ 146, 147, 133, 257, 124, 124, 148, 129, 170, 53,
624+ 53, 130, 124, 149, 150, 209, 210, 211, 212, 94,
625+ 97, 151, 69, 152, 299, 131, 137, 138, 54, 139,
626+ 71, 140, 141, 142, 143, 330, 61, 144, 134, 145,
627+ 136, 237, 54, 54, 136, 136, 146, 147, 136, 136,
628+ 284, 136, 148, 136, 199, 136, 136, 64, 102, 149,
629+ 150, 177, 200, 64, 102, 94, 97, 151, 69, 152,
630+ 214, 215, 137, 138, 54, 139, 71, 140, 141, 142,
631+ 143, 231, 61, 144, 234, 145, 184, 246, 251, 266,
632+ 137, 137, 146, 147, 137, 137, 270, 137, 148, 137,
633+ 269, 137, 137, 267, 271, 149, 150, 276, 278, 280,
634+ 283, 94, 97, 151, 69, 152, 286, 288, 137, 138,
635+ 54, 139, 71, 140, 141, 190, 143, 294, 191, 144,
636+ 192, 63, 64, 65, 66, 298, 153, 153, 153, 153,
637+ 153, 153, 153, 253, 153, 295, 153, 297, 153, 153,
638+ 134, 68, 134, 237, 139, 139, 134, 139, 307, 139,
639+ 69, 139, 139, 310, 137, 138, 54, 139, 71, 140,
640+ 141, 190, 143, 313, 191, 144, 192, 63, 64, 65,
641+ 66, 314, 137, 138, 54, 139, 320, 140, 141, 142,
642+ 143, 290, 61, 144, 321, 145, 327, 68, 2, 3,
643+ 4, 5, 6, 7, 8, 9, 69, 308, 328, 331,
644+ 133, 181, 133, 152, 71, 68, 133, 57, 161, 56,
645+ 137, 138, 54, 139, 69, 140, 141, 142, 143, 132,
646+ 61, 144, 71, 145, 137, 138, 54, 139, 160, 140,
647+ 141, 142, 143, 131, 61, 144, 305, 145, 170, 282,
648+ 16, 30, 275, 171, 18, 19, 20, 21, 22, 217,
649+ 202, 204, 69, 206, 207, 303, 13, 68, 287, 268,
650+ 71, 304, 137, 138, 54, 139, 69, 140, 141, 142,
651+ 143, 165, 61, 144, 71, 145, 301, 84, 137, 138,
652+ 54, 139, 277, 140, 141, 142, 143, 219, 61, 220,
653+ 254, 145, 309, 90, 332, 68, 145, 145, 145, 145,
654+ 145, 145, 221, 145, 69, 145, 329, 145, 145, 289,
655+ 0, 0, 71, 17, 17, 17, 17, 17, 97, 0,
656+ 222, 0, 0, 0, 137, 138, 54, 139, 71, 140,
657+ 141, 142, 143, 0, 61, 144, 0, 145, 0, 0,
658+ 137, 138, 54, 139, 0, 140, 141, 142, 143, 239,
659+ 61, 144, 0, 145, 0, 0, 0, 68, 0, 0,
660+ 0, 0, 0, 0, 0, 256, 69, 0, 0, 0,
661+ 0, 0, 0, 68, 71, 0, 0, 0, 137, 138,
662+ 54, 139, 69, 140, 141, 142, 143, 290, 61, 144,
663+ 71, 145, 137, 138, 54, 139, 0, 140, 141, 142,
664+ 143, 0, 61, 144, 0, 145, 0, 0, 0, 0,
665+ 0, 68, 0, 0, 0, 0, 137, 138, 54, 139,
666+ 69, 140, 141, 142, 143, 68, 61, 144, 71, 145,
667+ 0, 0, 0, 0, 69, 0, 0, 0, 0, 0,
668+ 0, 0, 71, 17, 18, 19, 20, 21, 22, 23,
669+ 24, 0, 0, 0, 0, 0, 0, 0, 69, 0,
670+ 0, 0, 0, 0, 0, 0, 71, 17, 17, 17,
671+ 17, 17, 17, 17, 17, 16, 16, 16, 16, 16,
672+ 16, 16, 16,
673+};
674+static const YYINT _xkbcommon_check[] = { 46,
675+ 53, 53, 127, 183, 51, 57, 63, 59, 53, 46,
676+ 46, 58, 52, 47, 71, 52, 50, 46, 52, 59,
677+ 60, 68, 62, 46, 10, 11, 12, 13, 14, 52,
678+ 45, 45, 72, 32, 49, 20, 21, 22, 23, 24,
679+ 25, 26, 27, 28, 29, 45, 31, 32, 63, 34,
680+ 35, 36, 37, 38, 45, 123, 71, 60, 110, 46,
681+ 46, 129, 61, 63, 63, 60, 61, 32, 136, 54,
682+ 45, 71, 119, 64, 121, 53, 123, 124, 63, 64,
683+ 45, 40, 129, 130, 131, 121, 71, 123, 124, 136,
684+ 49, 60, 51, 129, 40, 131, 61, 42, 63, 60,
685+ 136, 60, 131, 49, 284, 51, 41, 42, 43, 44,
686+ 146, 147, 40, 149, 150, 50, 61, 62, 170, 46,
687+ 167, 49, 169, 51, 171, 52, 46, 49, 115, 51,
688+ 40, 167, 52, 169, 121, 182, 123, 124, 167, 49,
689+ 169, 51, 129, 47, 131, 49, 182, 51, 195, 136,
690+ 190, 40, 192, 182, 201, 41, 42, 43, 44, 195,
691+ 49, 64, 51, 0, 46, 201, 195, 53, 40, 221,
692+ 52, 64, 201, 41, 42, 43, 44, 49, 40, 51,
693+ 167, 61, 169, 170, 46, 53, 233, 49, 46, 51,
694+ 52, 316, 52, 53, 52, 182, 40, 233, 114, 46,
695+ 40, 117, 118, 250, 251, 49, 122, 51, 195, 49,
696+ 126, 51, 128, 31, 201, 251, 28, 35, 271, 271,
697+ 61, 62, 251, 70, 71, 72, 73, 74, 75, 76,
698+ 77, 40, 148, 70, 71, 72, 73, 74, 75, 76,
699+ 77, 41, 42, 43, 44, 292, 233, 40, 41, 42,
700+ 43, 44, 45, 46, 53, 48, 292, 50, 40, 52,
701+ 53, 40, 46, 292, 251, 46, 40, 49, 52, 51,
702+ 49, 52, 51, 20, 21, 22, 23, 24, 25, 26,
703+ 27, 28, 29, 199, 31, 32, 273, 34, 35, 36,
704+ 37, 38, 40, 209, 210, 211, 212, 41, 214, 215,
705+ 41, 42, 43, 44, 50, 292, 52, 54, 41, 42,
706+ 43, 44, 53, 45, 40, 231, 63, 64, 43, 44,
707+ 53, 237, 46, 49, 71, 51, 45, 45, 52, 40,
708+ 246, 20, 21, 22, 23, 24, 25, 26, 27, 28,
709+ 29, 40, 31, 32, 45, 34, 35, 36, 37, 38,
710+ 21, 22, 23, 24, 40, 26, 27, 28, 29, 47,
711+ 31, 32, 50, 34, 52, 54, 41, 42, 43, 44,
712+ 41, 42, 53, 48, 63, 64, 47, 45, 49, 52,
713+ 53, 45, 71, 54, 55, 41, 42, 43, 44, 60,
714+ 61, 62, 63, 64, 50, 45, 21, 22, 23, 24,
715+ 71, 26, 27, 28, 29, 46, 31, 32, 61, 34,
716+ 45, 52, 52, 53, 41, 42, 41, 42, 45, 46,
717+ 45, 48, 47, 50, 40, 52, 53, 46, 46, 54,
718+ 55, 64, 53, 52, 52, 60, 61, 62, 63, 64,
719+ 40, 49, 21, 22, 23, 24, 71, 26, 27, 28,
720+ 29, 40, 31, 32, 53, 34, 49, 40, 45, 53,
721+ 41, 42, 41, 42, 45, 46, 50, 48, 47, 50,
722+ 47, 52, 53, 53, 52, 54, 55, 53, 53, 53,
723+ 52, 60, 61, 62, 63, 64, 53, 53, 21, 22,
724+ 23, 24, 71, 26, 27, 28, 29, 45, 31, 32,
725+ 33, 34, 35, 36, 37, 48, 40, 41, 42, 43,
726+ 44, 45, 46, 46, 48, 53, 50, 53, 52, 53,
727+ 46, 54, 48, 52, 45, 46, 52, 48, 45, 50,
728+ 63, 52, 53, 64, 21, 22, 23, 24, 71, 26,
729+ 27, 28, 29, 48, 31, 32, 33, 34, 35, 36,
730+ 37, 50, 21, 22, 23, 24, 53, 26, 27, 28,
731+ 29, 30, 31, 32, 40, 34, 64, 54, 70, 71,
732+ 72, 73, 74, 75, 76, 77, 63, 46, 53, 53,
733+ 46, 45, 48, 40, 71, 54, 52, 45, 50, 45,
734+ 21, 22, 23, 24, 63, 26, 27, 28, 29, 48,
735+ 31, 32, 71, 34, 21, 22, 23, 24, 50, 26,
736+ 27, 28, 29, 48, 31, 32, 283, 34, 49, 241,
737+ 12, 26, 231, 54, 2, 3, 4, 5, 6, 46,
738+ 146, 147, 63, 149, 150, 271, 0, 54, 248, 221,
739+ 71, 273, 21, 22, 23, 24, 63, 26, 27, 28,
740+ 29, 119, 31, 32, 71, 34, 269, 46, 21, 22,
741+ 23, 24, 233, 26, 27, 28, 29, 46, 31, 32,
742+ 195, 34, 292, 46, 326, 54, 41, 42, 43, 44,
743+ 45, 46, 45, 48, 63, 50, 323, 52, 53, 250,
744+ -1, -1, 71, 2, 3, 4, 5, 6, 61, -1,
745+ 63, -1, -1, -1, 21, 22, 23, 24, 71, 26,
746+ 27, 28, 29, -1, 31, 32, -1, 34, -1, -1,
747+ 21, 22, 23, 24, -1, 26, 27, 28, 29, 46,
748+ 31, 32, -1, 34, -1, -1, -1, 54, -1, -1,
749+ -1, -1, -1, -1, -1, 46, 63, -1, -1, -1,
750+ -1, -1, -1, 54, 71, -1, -1, -1, 21, 22,
751+ 23, 24, 63, 26, 27, 28, 29, 30, 31, 32,
752+ 71, 34, 21, 22, 23, 24, -1, 26, 27, 28,
753+ 29, -1, 31, 32, -1, 34, -1, -1, -1, -1,
754+ -1, 54, -1, -1, -1, -1, 21, 22, 23, 24,
755+ 63, 26, 27, 28, 29, 54, 31, 32, 71, 34,
756+ -1, -1, -1, -1, 63, -1, -1, -1, -1, -1,
757+ -1, -1, 71, 1, 2, 3, 4, 5, 6, 7,
758+ 8, -1, -1, -1, -1, -1, -1, -1, 63, -1,
759+ -1, -1, -1, -1, -1, -1, 71, 1, 2, 3,
760+ 4, 5, 6, 7, 8, 1, 2, 3, 4, 5,
761+ 6, 7, 8,
762+};
763+#if YYBTYACC
764+static const YYINT _xkbcommon_ctable[] = { -1,
765+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
766+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
767+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
768+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
769+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
770+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
771+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
772+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
773+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
774+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
775+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
776+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
777+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
778+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
779+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
780+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
781+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
782+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
783+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
784+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
785+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
786+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
787+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
788+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
789+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
790+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
791+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
792+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
793+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
794+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
795+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
796+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
797+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
798+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
799+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
800+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
801+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
802+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
803+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
804+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
805+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
806+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
807+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
808+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
809+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
810+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
811+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
812+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
813+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
814+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
815+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
816+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
817+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
818+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
819+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
820+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
821+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
822+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
823+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
824+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
825+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
826+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
827+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
828+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
829+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
830+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
831+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
832+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
833+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
834+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
835+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
836+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
837+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
838+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
839+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
840+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
841+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
842+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
843+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
844+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
845+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
846+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
847+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
848+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
849+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
850+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
851+ -1, -1,
852+};
853+#endif
854+#define YYFINAL 10
855+#ifndef YYDEBUG
856+#define YYDEBUG 0
857+#endif
858+#define YYMAXTOKEN 256
859+#define YYUNDFTOKEN 329
860+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
861+#if YYDEBUG
862+static const char *const _xkbcommon_name[] = {
863+
864+"$end","XKB_KEYMAP","XKB_KEYCODES","XKB_TYPES","XKB_SYMBOLS","XKB_COMPATMAP",
865+"XKB_GEOMETRY","XKB_SEMANTICS","XKB_LAYOUT",0,"INCLUDE","OVERRIDE","AUGMENT",
866+"REPLACE","ALTERNATE",0,0,0,0,0,"VIRTUAL_MODS","TYPE","INTERPRET","ACTION_TOK",
867+"KEY","ALIAS","GROUP","MODIFIER_MAP","INDICATOR","SHAPE","KEYS","ROW","SECTION",
868+"OVERLAY","TEXT","OUTLINE","SOLID","LOGO","VIRTUAL",0,"EQUALS","PLUS","MINUS",
869+"DIVIDE","TIMES","OBRACE","CBRACE","OPAREN","CPAREN","OBRACKET","CBRACKET",
870+"DOT","COMMA","SEMI","EXCLAM","INVERT",0,0,0,0,"STRING","INTEGER","FLOAT",
871+"IDENT","KEYNAME",0,0,0,0,0,"PARTIAL","DEFAULT","HIDDEN","ALPHANUMERIC_KEYS",
872+"MODIFIER_KEYS","KEYPAD_KEYS","FUNCTION_KEYS","ALTERNATE_GROUP",0,0,0,0,0,0,0,0,
873+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
874+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
875+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
876+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
877+0,0,0,0,0,0,0,0,0,"ERROR_TOK","error","$accept","XkbFile","KeyCode","Number",
878+"Integer","Float","SignedNumber","DoodadType","MergeMode","OptMergeMode",
879+"XkbCompositeType","FileType","Flag","Flags","OptFlags","MapName","OptMapName",
880+"FieldSpec","Ident","Element","String","KeySym","Decl","DeclList","Expr","Term",
881+"Lhs","Terminal","ArrayInit","KeySyms","OptKeySymList","KeySymList","Action",
882+"Coord","CoordList","OptExprList","ExprList","ActionList","VarDecl",
883+"SymbolsVarDecl","VarDeclList","SymbolsBody","VModDef","VModDefList","VModDecl",
884+"InterpretDecl","InterpretMatch","KeyTypeDecl","SymbolsDecl","ModMapDecl",
885+"GroupCompatDecl","LedMapDecl","LedNameDecl","KeyNameDecl","KeyAliasDecl",
886+"ShapeDecl","SectionDecl","SectionBody","SectionBodyItem","RowBody",
887+"RowBodyItem","Keys","Key","OverlayDecl","OverlayKeyList","OverlayKey",
888+"OutlineList","OutlineInList","DoodadDecl","XkbMapConfig","XkbMapConfigList",
889+"XkbCompositeMap","illegal-symbol",
890+};
891+static const char *const _xkbcommon_rule[] = {
892+"$accept : XkbFile",
893+"XkbFile : XkbCompositeMap",
894+"XkbFile : XkbMapConfig",
895+"XkbFile : END_OF_FILE",
896+"XkbCompositeMap : OptFlags XkbCompositeType OptMapName OBRACE XkbMapConfigList CBRACE SEMI",
897+"XkbCompositeType : XKB_KEYMAP",
898+"XkbCompositeType : XKB_SEMANTICS",
899+"XkbCompositeType : XKB_LAYOUT",
900+"XkbMapConfigList : XkbMapConfigList XkbMapConfig",
901+"XkbMapConfigList : XkbMapConfig",
902+"XkbMapConfig : OptFlags FileType OptMapName OBRACE DeclList CBRACE SEMI",
903+"FileType : XKB_KEYCODES",
904+"FileType : XKB_TYPES",
905+"FileType : XKB_COMPATMAP",
906+"FileType : XKB_SYMBOLS",
907+"FileType : XKB_GEOMETRY",
908+"OptFlags : Flags",
909+"OptFlags :",
910+"Flags : Flags Flag",
911+"Flags : Flag",
912+"Flag : PARTIAL",
913+"Flag : DEFAULT",
914+"Flag : HIDDEN",
915+"Flag : ALPHANUMERIC_KEYS",
916+"Flag : MODIFIER_KEYS",
917+"Flag : KEYPAD_KEYS",
918+"Flag : FUNCTION_KEYS",
919+"Flag : ALTERNATE_GROUP",
920+"DeclList : DeclList Decl",
921+"DeclList : DeclList OptMergeMode VModDecl",
922+"DeclList :",
923+"Decl : OptMergeMode VarDecl",
924+"Decl : OptMergeMode InterpretDecl",
925+"Decl : OptMergeMode KeyNameDecl",
926+"Decl : OptMergeMode KeyAliasDecl",
927+"Decl : OptMergeMode KeyTypeDecl",
928+"Decl : OptMergeMode SymbolsDecl",
929+"Decl : OptMergeMode ModMapDecl",
930+"Decl : OptMergeMode GroupCompatDecl",
931+"Decl : OptMergeMode LedMapDecl",
932+"Decl : OptMergeMode LedNameDecl",
933+"Decl : OptMergeMode ShapeDecl",
934+"Decl : OptMergeMode SectionDecl",
935+"Decl : OptMergeMode DoodadDecl",
936+"Decl : MergeMode STRING",
937+"VarDecl : Lhs EQUALS Expr SEMI",
938+"VarDecl : Ident SEMI",
939+"VarDecl : EXCLAM Ident SEMI",
940+"KeyNameDecl : KEYNAME EQUALS KeyCode SEMI",
941+"KeyAliasDecl : ALIAS KEYNAME EQUALS KEYNAME SEMI",
942+"VModDecl : VIRTUAL_MODS VModDefList SEMI",
943+"VModDefList : VModDefList COMMA VModDef",
944+"VModDefList : VModDef",
945+"VModDef : Ident",
946+"VModDef : Ident EQUALS Expr",
947+"InterpretDecl : INTERPRET InterpretMatch OBRACE VarDeclList CBRACE SEMI",
948+"InterpretMatch : KeySym PLUS Expr",
949+"InterpretMatch : KeySym",
950+"VarDeclList : VarDeclList VarDecl",
951+"VarDeclList : VarDecl",
952+"KeyTypeDecl : TYPE String OBRACE VarDeclList CBRACE SEMI",
953+"SymbolsDecl : KEY KEYNAME OBRACE SymbolsBody CBRACE SEMI",
954+"SymbolsBody : SymbolsBody COMMA SymbolsVarDecl",
955+"SymbolsBody : SymbolsVarDecl",
956+"SymbolsVarDecl : Lhs EQUALS Expr",
957+"SymbolsVarDecl : Lhs EQUALS ArrayInit",
958+"SymbolsVarDecl : Ident",
959+"SymbolsVarDecl : EXCLAM Ident",
960+"SymbolsVarDecl : ArrayInit",
961+"ArrayInit : OBRACKET OptKeySymList CBRACKET",
962+"ArrayInit : OBRACKET ActionList CBRACKET",
963+"GroupCompatDecl : GROUP Integer EQUALS Expr SEMI",
964+"ModMapDecl : MODIFIER_MAP Ident OBRACE ExprList CBRACE SEMI",
965+"LedMapDecl : INDICATOR String OBRACE VarDeclList CBRACE SEMI",
966+"LedNameDecl : INDICATOR Integer EQUALS Expr SEMI",
967+"LedNameDecl : VIRTUAL INDICATOR Integer EQUALS Expr SEMI",
968+"ShapeDecl : SHAPE String OBRACE OutlineList CBRACE SEMI",
969+"ShapeDecl : SHAPE String OBRACE CoordList CBRACE SEMI",
970+"SectionDecl : SECTION String OBRACE SectionBody CBRACE SEMI",
971+"SectionBody : SectionBody SectionBodyItem",
972+"SectionBody : SectionBodyItem",
973+"SectionBodyItem : ROW OBRACE RowBody CBRACE SEMI",
974+"SectionBodyItem : VarDecl",
975+"SectionBodyItem : DoodadDecl",
976+"SectionBodyItem : LedMapDecl",
977+"SectionBodyItem : OverlayDecl",
978+"RowBody : RowBody RowBodyItem",
979+"RowBody : RowBodyItem",
980+"RowBodyItem : KEYS OBRACE Keys CBRACE SEMI",
981+"RowBodyItem : VarDecl",
982+"Keys : Keys COMMA Key",
983+"Keys : Key",
984+"Key : KEYNAME",
985+"Key : OBRACE ExprList CBRACE",
986+"OverlayDecl : OVERLAY String OBRACE OverlayKeyList CBRACE SEMI",
987+"OverlayKeyList : OverlayKeyList COMMA OverlayKey",
988+"OverlayKeyList : OverlayKey",
989+"OverlayKey : KEYNAME EQUALS KEYNAME",
990+"OutlineList : OutlineList COMMA OutlineInList",
991+"OutlineList : OutlineInList",
992+"OutlineInList : OBRACE CoordList CBRACE",
993+"OutlineInList : Ident EQUALS OBRACE CoordList CBRACE",
994+"OutlineInList : Ident EQUALS Expr",
995+"CoordList : CoordList COMMA Coord",
996+"CoordList : Coord",
997+"Coord : OBRACKET SignedNumber COMMA SignedNumber CBRACKET",
998+"DoodadDecl : DoodadType String OBRACE VarDeclList CBRACE SEMI",
999+"DoodadType : TEXT",
1000+"DoodadType : OUTLINE",
1001+"DoodadType : SOLID",
1002+"DoodadType : LOGO",
1003+"FieldSpec : Ident",
1004+"FieldSpec : Element",
1005+"Element : ACTION_TOK",
1006+"Element : INTERPRET",
1007+"Element : TYPE",
1008+"Element : KEY",
1009+"Element : GROUP",
1010+"Element : MODIFIER_MAP",
1011+"Element : INDICATOR",
1012+"Element : SHAPE",
1013+"Element : ROW",
1014+"Element : SECTION",
1015+"Element : TEXT",
1016+"OptMergeMode : MergeMode",
1017+"OptMergeMode :",
1018+"MergeMode : INCLUDE",
1019+"MergeMode : AUGMENT",
1020+"MergeMode : OVERRIDE",
1021+"MergeMode : REPLACE",
1022+"MergeMode : ALTERNATE",
1023+"OptExprList : ExprList",
1024+"OptExprList :",
1025+"ExprList : ExprList COMMA Expr",
1026+"ExprList : Expr",
1027+"Expr : Expr DIVIDE Expr",
1028+"Expr : Expr PLUS Expr",
1029+"Expr : Expr MINUS Expr",
1030+"Expr : Expr TIMES Expr",
1031+"Expr : Lhs EQUALS Expr",
1032+"Expr : Term",
1033+"Term : MINUS Term",
1034+"Term : PLUS Term",
1035+"Term : EXCLAM Term",
1036+"Term : INVERT Term",
1037+"Term : Lhs",
1038+"Term : FieldSpec OPAREN OptExprList CPAREN",
1039+"Term : Terminal",
1040+"Term : OPAREN Expr CPAREN",
1041+"ActionList : ActionList COMMA Action",
1042+"ActionList : Action",
1043+"Action : FieldSpec OPAREN OptExprList CPAREN",
1044+"Lhs : FieldSpec",
1045+"Lhs : FieldSpec DOT FieldSpec",
1046+"Lhs : FieldSpec OBRACKET Expr CBRACKET",
1047+"Lhs : FieldSpec DOT FieldSpec OBRACKET Expr CBRACKET",
1048+"Terminal : String",
1049+"Terminal : Integer",
1050+"Terminal : Float",
1051+"Terminal : KEYNAME",
1052+"OptKeySymList : KeySymList",
1053+"OptKeySymList :",
1054+"KeySymList : KeySymList COMMA KeySym",
1055+"KeySymList : KeySymList COMMA KeySyms",
1056+"KeySymList : KeySym",
1057+"KeySymList : KeySyms",
1058+"KeySyms : OBRACE KeySymList CBRACE",
1059+"KeySym : IDENT",
1060+"KeySym : SECTION",
1061+"KeySym : Integer",
1062+"SignedNumber : MINUS Number",
1063+"SignedNumber : Number",
1064+"Number : FLOAT",
1065+"Number : INTEGER",
1066+"Float : FLOAT",
1067+"Integer : INTEGER",
1068+"KeyCode : INTEGER",
1069+"Ident : IDENT",
1070+"Ident : DEFAULT",
1071+"String : STRING",
1072+"OptMapName : MapName",
1073+"OptMapName :",
1074+"MapName : STRING",
1075+
1076+};
1077+#endif
1078+
1079+#if YYDEBUG
1080+int yydebug;
1081+#endif
1082+
1083+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1084+#ifndef YYLLOC_DEFAULT
1085+#define YYLLOC_DEFAULT(loc, rhs, n) \
1086+do \
1087+{ \
1088+ if (n == 0) \
1089+ { \
1090+ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \
1091+ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
1092+ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \
1093+ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \
1094+ } \
1095+ else \
1096+ { \
1097+ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \
1098+ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
1099+ (loc).last_line = YYRHSLOC(rhs, n).last_line; \
1100+ (loc).last_column = YYRHSLOC(rhs, n).last_column; \
1101+ } \
1102+} while (0)
1103+#endif /* YYLLOC_DEFAULT */
1104+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1105+#if YYBTYACC
1106+
1107+#ifndef YYLVQUEUEGROWTH
1108+#define YYLVQUEUEGROWTH 32
1109+#endif
1110+#endif /* YYBTYACC */
1111+
1112+/* define the initial stack-sizes */
1113+#ifdef YYSTACKSIZE
1114+#undef YYMAXDEPTH
1115+#define YYMAXDEPTH YYSTACKSIZE
1116+#else
1117+#ifdef YYMAXDEPTH
1118+#define YYSTACKSIZE YYMAXDEPTH
1119+#else
1120+#define YYSTACKSIZE 10000
1121+#define YYMAXDEPTH 10000
1122+#endif
1123+#endif
1124+
1125+#ifndef YYINITSTACKSIZE
1126+#define YYINITSTACKSIZE 200
1127+#endif
1128+
1129+typedef struct {
1130+ unsigned stacksize;
1131+ YYINT *s_base;
1132+ YYINT *s_mark;
1133+ YYINT *s_last;
1134+ YYSTYPE *l_base;
1135+ YYSTYPE *l_mark;
1136+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1137+ YYLTYPE *p_base;
1138+ YYLTYPE *p_mark;
1139+#endif
1140+} YYSTACKDATA;
1141+#if YYBTYACC
1142+
1143+struct YYParseState_s
1144+{
1145+ struct YYParseState_s *save; /* Previously saved parser state */
1146+ YYSTACKDATA yystack; /* saved parser stack */
1147+ int state; /* saved parser state */
1148+ int errflag; /* saved error recovery status */
1149+ int lexeme; /* saved index of the conflict lexeme in the lexical queue */
1150+ YYINT ctry; /* saved index in yyctable[] for this conflict */
1151+};
1152+typedef struct YYParseState_s YYParseState;
1153+#endif /* YYBTYACC */
1154+#line 808 "parser.y"
1155+
1156+XkbFile *
1157+parse(struct xkb_context *ctx, struct scanner *scanner, const char *map)
1158+{
1159+ int ret;
1160+ XkbFile *first = NULL;
1161+ struct parser_param param = {
1162+ .scanner = scanner,
1163+ .ctx = ctx,
1164+ .rtrn = NULL,
1165+ .more_maps = false,
1166+ };
1167+
1168+ /*
1169+ * If we got a specific map, we look for it exclusively and return
1170+ * immediately upon finding it. Otherwise, we need to get the
1171+ * default map. If we find a map marked as default, we return it
1172+ * immediately. If there are no maps marked as default, we return
1173+ * the first map in the file.
1174+ */
1175+
1176+ while ((ret = yyparse(¶m)) == 0 && param.more_maps) {
1177+ if (map) {
1178+ if (streq_not_null(map, param.rtrn->name))
1179+ return param.rtrn;
1180+ else
1181+ FreeXkbFile(param.rtrn);
1182+ }
1183+ else {
1184+ if (param.rtrn->flags & MAP_IS_DEFAULT) {
1185+ FreeXkbFile(first);
1186+ return param.rtrn;
1187+ }
1188+ else if (!first) {
1189+ first = param.rtrn;
1190+ }
1191+ else {
1192+ FreeXkbFile(param.rtrn);
1193+ }
1194+ }
1195+ param.rtrn = NULL;
1196+ }
1197+
1198+ if (ret != 0) {
1199+ FreeXkbFile(first);
1200+ return NULL;
1201+ }
1202+
1203+ if (first)
1204+ log_vrb(ctx, 5,
1205+ XKB_WARNING_MISSING_DEFAULT_SECTION,
1206+ "No map in include statement, but \"%s\" contains several; "
1207+ "Using first defined map, \"%s\"\n",
1208+ scanner->file_name, first->name);
1209+
1210+ return first;
1211+}
1212+#line 1192 "parser.c"
1213+
1214+/* Release memory associated with symbol. */
1215+#if ! defined YYDESTRUCT_IS_DECLARED
1216+static void
1217+YYDESTRUCT_DECL()
1218+{
1219+ switch (psymb)
1220+ {
1221+ case 60:
1222+#line 239 "parser.y"
1223+ { free((*val).str); }
1224+#line 1204 "parser.c"
1225+ break;
1226+ case 63:
1227+#line 239 "parser.y"
1228+ { free((*val).str); }
1229+#line 1209 "parser.c"
1230+ break;
1231+ case 258:
1232+#line 237 "parser.y"
1233+ { if (!param->rtrn) FreeXkbFile((*val).file); }
1234+#line 1214 "parser.c"
1235+ break;
1236+ case 272:
1237+#line 239 "parser.y"
1238+ { free((*val).str); }
1239+#line 1219 "parser.c"
1240+ break;
1241+ case 273:
1242+#line 239 "parser.y"
1243+ { free((*val).str); }
1244+#line 1224 "parser.c"
1245+ break;
1246+ case 279:
1247+#line 230 "parser.y"
1248+ { FreeStmt((ParseCommon *) (*val).any); }
1249+#line 1229 "parser.c"
1250+ break;
1251+ case 280:
1252+#line 233 "parser.y"
1253+ { FreeStmt((ParseCommon *) (*val).anyList.head); }
1254+#line 1234 "parser.c"
1255+ break;
1256+ case 281:
1257+#line 230 "parser.y"
1258+ { FreeStmt((ParseCommon *) (*val).expr); }
1259+#line 1239 "parser.c"
1260+ break;
1261+ case 282:
1262+#line 230 "parser.y"
1263+ { FreeStmt((ParseCommon *) (*val).expr); }
1264+#line 1244 "parser.c"
1265+ break;
1266+ case 283:
1267+#line 230 "parser.y"
1268+ { FreeStmt((ParseCommon *) (*val).expr); }
1269+#line 1249 "parser.c"
1270+ break;
1271+ case 284:
1272+#line 230 "parser.y"
1273+ { FreeStmt((ParseCommon *) (*val).expr); }
1274+#line 1254 "parser.c"
1275+ break;
1276+ case 285:
1277+#line 230 "parser.y"
1278+ { FreeStmt((ParseCommon *) (*val).expr); }
1279+#line 1259 "parser.c"
1280+ break;
1281+ case 286:
1282+#line 230 "parser.y"
1283+ { FreeStmt((ParseCommon *) (*val).expr); }
1284+#line 1264 "parser.c"
1285+ break;
1286+ case 287:
1287+#line 230 "parser.y"
1288+ { FreeStmt((ParseCommon *) (*val).expr); }
1289+#line 1269 "parser.c"
1290+ break;
1291+ case 288:
1292+#line 230 "parser.y"
1293+ { FreeStmt((ParseCommon *) (*val).expr); }
1294+#line 1274 "parser.c"
1295+ break;
1296+ case 289:
1297+#line 230 "parser.y"
1298+ { FreeStmt((ParseCommon *) (*val).expr); }
1299+#line 1279 "parser.c"
1300+ break;
1301+ case 290:
1302+#line 230 "parser.y"
1303+ { FreeStmt((ParseCommon *) (*val).expr); }
1304+#line 1284 "parser.c"
1305+ break;
1306+ case 291:
1307+#line 230 "parser.y"
1308+ { FreeStmt((ParseCommon *) (*val).expr); }
1309+#line 1289 "parser.c"
1310+ break;
1311+ case 292:
1312+#line 233 "parser.y"
1313+ { FreeStmt((ParseCommon *) (*val).exprList.head); }
1314+#line 1294 "parser.c"
1315+ break;
1316+ case 293:
1317+#line 233 "parser.y"
1318+ { FreeStmt((ParseCommon *) (*val).exprList.head); }
1319+#line 1299 "parser.c"
1320+ break;
1321+ case 294:
1322+#line 233 "parser.y"
1323+ { FreeStmt((ParseCommon *) (*val).exprList.head); }
1324+#line 1304 "parser.c"
1325+ break;
1326+ case 295:
1327+#line 230 "parser.y"
1328+ { FreeStmt((ParseCommon *) (*val).var); }
1329+#line 1309 "parser.c"
1330+ break;
1331+ case 296:
1332+#line 230 "parser.y"
1333+ { FreeStmt((ParseCommon *) (*val).var); }
1334+#line 1314 "parser.c"
1335+ break;
1336+ case 297:
1337+#line 233 "parser.y"
1338+ { FreeStmt((ParseCommon *) (*val).varList.head); }
1339+#line 1319 "parser.c"
1340+ break;
1341+ case 298:
1342+#line 233 "parser.y"
1343+ { FreeStmt((ParseCommon *) (*val).varList.head); }
1344+#line 1324 "parser.c"
1345+ break;
1346+ case 299:
1347+#line 230 "parser.y"
1348+ { FreeStmt((ParseCommon *) (*val).vmod); }
1349+#line 1329 "parser.c"
1350+ break;
1351+ case 300:
1352+#line 233 "parser.y"
1353+ { FreeStmt((ParseCommon *) (*val).vmodList.head); }
1354+#line 1334 "parser.c"
1355+ break;
1356+ case 301:
1357+#line 233 "parser.y"
1358+ { FreeStmt((ParseCommon *) (*val).vmodList.head); }
1359+#line 1339 "parser.c"
1360+ break;
1361+ case 302:
1362+#line 230 "parser.y"
1363+ { FreeStmt((ParseCommon *) (*val).interp); }
1364+#line 1344 "parser.c"
1365+ break;
1366+ case 303:
1367+#line 230 "parser.y"
1368+ { FreeStmt((ParseCommon *) (*val).interp); }
1369+#line 1349 "parser.c"
1370+ break;
1371+ case 304:
1372+#line 230 "parser.y"
1373+ { FreeStmt((ParseCommon *) (*val).keyType); }
1374+#line 1354 "parser.c"
1375+ break;
1376+ case 305:
1377+#line 230 "parser.y"
1378+ { FreeStmt((ParseCommon *) (*val).syms); }
1379+#line 1359 "parser.c"
1380+ break;
1381+ case 306:
1382+#line 230 "parser.y"
1383+ { FreeStmt((ParseCommon *) (*val).modMask); }
1384+#line 1364 "parser.c"
1385+ break;
1386+ case 307:
1387+#line 230 "parser.y"
1388+ { FreeStmt((ParseCommon *) (*val).groupCompat); }
1389+#line 1369 "parser.c"
1390+ break;
1391+ case 308:
1392+#line 230 "parser.y"
1393+ { FreeStmt((ParseCommon *) (*val).ledMap); }
1394+#line 1374 "parser.c"
1395+ break;
1396+ case 309:
1397+#line 230 "parser.y"
1398+ { FreeStmt((ParseCommon *) (*val).ledName); }
1399+#line 1379 "parser.c"
1400+ break;
1401+ case 310:
1402+#line 230 "parser.y"
1403+ { FreeStmt((ParseCommon *) (*val).keyCode); }
1404+#line 1384 "parser.c"
1405+ break;
1406+ case 311:
1407+#line 230 "parser.y"
1408+ { FreeStmt((ParseCommon *) (*val).keyAlias); }
1409+#line 1389 "parser.c"
1410+ break;
1411+ case 326:
1412+#line 237 "parser.y"
1413+ { if (!param->rtrn) FreeXkbFile((*val).file); }
1414+#line 1394 "parser.c"
1415+ break;
1416+ case 327:
1417+#line 238 "parser.y"
1418+ { FreeXkbFile((*val).fileList.head); }
1419+#line 1399 "parser.c"
1420+ break;
1421+ case 328:
1422+#line 237 "parser.y"
1423+ { if (!param->rtrn) FreeXkbFile((*val).file); }
1424+#line 1404 "parser.c"
1425+ break;
1426+ }
1427+}
1428+#define YYDESTRUCT_IS_DECLARED 1
1429+#endif
1430+
1431+/* For use in generated program */
1432+#define yydepth (int)(yystack.s_mark - yystack.s_base)
1433+#if YYBTYACC
1434+#define yytrial (yyps->save)
1435+#endif /* YYBTYACC */
1436+
1437+#if YYDEBUG
1438+#include <stdio.h> /* needed for printf */
1439+#endif
1440+
1441+#include <stdlib.h> /* needed for malloc, etc */
1442+#include <string.h> /* needed for memset */
1443+
1444+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
1445+static int yygrowstack(YYSTACKDATA *data)
1446+{
1447+ int i;
1448+ unsigned newsize;
1449+ YYINT *newss;
1450+ YYSTYPE *newvs;
1451+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1452+ YYLTYPE *newps;
1453+#endif
1454+
1455+ if ((newsize = data->stacksize) == 0)
1456+ newsize = YYINITSTACKSIZE;
1457+ else if (newsize >= YYMAXDEPTH)
1458+ return YYENOMEM;
1459+ else if ((newsize *= 2) > YYMAXDEPTH)
1460+ newsize = YYMAXDEPTH;
1461+
1462+ i = (int) (data->s_mark - data->s_base);
1463+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
1464+ if (newss == 0)
1465+ return YYENOMEM;
1466+
1467+ data->s_base = newss;
1468+ data->s_mark = newss + i;
1469+
1470+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
1471+ if (newvs == 0)
1472+ return YYENOMEM;
1473+
1474+ data->l_base = newvs;
1475+ data->l_mark = newvs + i;
1476+
1477+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1478+ newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
1479+ if (newps == 0)
1480+ return YYENOMEM;
1481+
1482+ data->p_base = newps;
1483+ data->p_mark = newps + i;
1484+#endif
1485+
1486+ data->stacksize = newsize;
1487+ data->s_last = data->s_base + newsize - 1;
1488+
1489+#if YYDEBUG
1490+ if (yydebug)
1491+ fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
1492+#endif
1493+ return 0;
1494+}
1495+
1496+#if YYPURE || defined(YY_NO_LEAKS)
1497+static void yyfreestack(YYSTACKDATA *data)
1498+{
1499+ free(data->s_base);
1500+ free(data->l_base);
1501+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1502+ free(data->p_base);
1503+#endif
1504+ memset(data, 0, sizeof(*data));
1505+}
1506+#else
1507+#define yyfreestack(data) /* nothing */
1508+#endif /* YYPURE || defined(YY_NO_LEAKS) */
1509+#if YYBTYACC
1510+
1511+static YYParseState *
1512+yyNewState(unsigned size)
1513+{
1514+ YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
1515+ if (p == NULL) return NULL;
1516+
1517+ p->yystack.stacksize = size;
1518+ if (size == 0)
1519+ {
1520+ p->yystack.s_base = NULL;
1521+ p->yystack.l_base = NULL;
1522+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1523+ p->yystack.p_base = NULL;
1524+#endif
1525+ return p;
1526+ }
1527+ p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
1528+ if (p->yystack.s_base == NULL) return NULL;
1529+ p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
1530+ if (p->yystack.l_base == NULL) return NULL;
1531+ memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
1532+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1533+ p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
1534+ if (p->yystack.p_base == NULL) return NULL;
1535+ memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
1536+#endif
1537+
1538+ return p;
1539+}
1540+
1541+static void
1542+yyFreeState(YYParseState *p)
1543+{
1544+ yyfreestack(&p->yystack);
1545+ free(p);
1546+}
1547+#endif /* YYBTYACC */
1548+
1549+#define YYABORT goto yyabort
1550+#define YYREJECT goto yyabort
1551+#define YYACCEPT goto yyaccept
1552+#define YYERROR goto yyerrlab
1553+#if YYBTYACC
1554+#define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
1555+#define YYVALID_NESTED do { if (yyps->save && \
1556+ yyps->save->save == 0) goto yyvalid; } while(0)
1557+#endif /* YYBTYACC */
1558+
1559+int
1560+YYPARSE_DECL()
1561+{
1562+ int yyerrflag;
1563+ int yychar;
1564+ YYSTYPE yyval;
1565+ YYSTYPE yylval;
1566+ int yynerrs;
1567+
1568+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1569+ YYLTYPE yyloc; /* position returned by actions */
1570+ YYLTYPE yylloc; /* position from the lexer */
1571+#endif
1572+
1573+ /* variables for the parser stack */
1574+ YYSTACKDATA yystack;
1575+#if YYBTYACC
1576+
1577+ /* Current parser state */
1578+ static YYParseState *yyps = 0;
1579+
1580+ /* yypath != NULL: do the full parse, starting at *yypath parser state. */
1581+ static YYParseState *yypath = 0;
1582+
1583+ /* Base of the lexical value queue */
1584+ static YYSTYPE *yylvals = 0;
1585+
1586+ /* Current position at lexical value queue */
1587+ static YYSTYPE *yylvp = 0;
1588+
1589+ /* End position of lexical value queue */
1590+ static YYSTYPE *yylve = 0;
1591+
1592+ /* The last allocated position at the lexical value queue */
1593+ static YYSTYPE *yylvlim = 0;
1594+
1595+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1596+ /* Base of the lexical position queue */
1597+ static YYLTYPE *yylpsns = 0;
1598+
1599+ /* Current position at lexical position queue */
1600+ static YYLTYPE *yylpp = 0;
1601+
1602+ /* End position of lexical position queue */
1603+ static YYLTYPE *yylpe = 0;
1604+
1605+ /* The last allocated position at the lexical position queue */
1606+ static YYLTYPE *yylplim = 0;
1607+#endif
1608+
1609+ /* Current position at lexical token queue */
1610+ static YYINT *yylexp = 0;
1611+
1612+ static YYINT *yylexemes = 0;
1613+#endif /* YYBTYACC */
1614+ int yym, yyn, yystate, yyresult;
1615+#if YYBTYACC
1616+ int yynewerrflag;
1617+ YYParseState *yyerrctx = NULL;
1618+#endif /* YYBTYACC */
1619+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1620+ YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */
1621+#endif
1622+#if YYDEBUG
1623+ const char *yys;
1624+
1625+ if ((yys = getenv("YYDEBUG")) != 0)
1626+ {
1627+ yyn = *yys;
1628+ if (yyn >= '0' && yyn <= '9')
1629+ yydebug = yyn - '0';
1630+ }
1631+ if (yydebug)
1632+ fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
1633+#endif
1634+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1635+ memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
1636+#endif
1637+
1638+ yyerrflag = 0;
1639+ yychar = 0;
1640+ memset(&yyval, 0, sizeof(yyval));
1641+ memset(&yylval, 0, sizeof(yylval));
1642+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1643+ memset(&yyloc, 0, sizeof(yyloc));
1644+ memset(&yylloc, 0, sizeof(yylloc));
1645+#endif
1646+
1647+#if YYBTYACC
1648+ yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
1649+ yyps->save = 0;
1650+#endif /* YYBTYACC */
1651+ yym = 0;
1652+ /* yyn is set below */
1653+ yynerrs = 0;
1654+ yyerrflag = 0;
1655+ yychar = YYEMPTY;
1656+ yystate = 0;
1657+
1658+#if YYPURE
1659+ memset(&yystack, 0, sizeof(yystack));
1660+#endif
1661+
1662+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1663+ yystack.s_mark = yystack.s_base;
1664+ yystack.l_mark = yystack.l_base;
1665+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1666+ yystack.p_mark = yystack.p_base;
1667+#endif
1668+ yystate = 0;
1669+ *yystack.s_mark = 0;
1670+
1671+yyloop:
1672+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
1673+ if (yychar < 0)
1674+ {
1675+#if YYBTYACC
1676+ do {
1677+ if (yylvp < yylve)
1678+ {
1679+ /* we're currently re-reading tokens */
1680+ yylval = *yylvp++;
1681+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1682+ yylloc = *yylpp++;
1683+#endif
1684+ yychar = *yylexp++;
1685+ break;
1686+ }
1687+ if (yyps->save)
1688+ {
1689+ /* in trial mode; save scanner results for future parse attempts */
1690+ if (yylvp == yylvlim)
1691+ { /* Enlarge lexical value queue */
1692+ size_t p = (size_t) (yylvp - yylvals);
1693+ size_t s = (size_t) (yylvlim - yylvals);
1694+
1695+ s += YYLVQUEUEGROWTH;
1696+ if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
1697+ if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
1698+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1699+ if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
1700+#endif
1701+ yylvp = yylve = yylvals + p;
1702+ yylvlim = yylvals + s;
1703+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1704+ yylpp = yylpe = yylpsns + p;
1705+ yylplim = yylpsns + s;
1706+#endif
1707+ yylexp = yylexemes + p;
1708+ }
1709+ *yylexp = (YYINT) YYLEX;
1710+ *yylvp++ = yylval;
1711+ yylve++;
1712+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1713+ *yylpp++ = yylloc;
1714+ yylpe++;
1715+#endif
1716+ yychar = *yylexp++;
1717+ break;
1718+ }
1719+ /* normal operation, no conflict encountered */
1720+#endif /* YYBTYACC */
1721+ yychar = YYLEX;
1722+#if YYBTYACC
1723+ } while (0);
1724+#endif /* YYBTYACC */
1725+ if (yychar < 0) yychar = YYEOF;
1726+#if YYDEBUG
1727+ if (yydebug)
1728+ {
1729+ if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1730+ fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
1731+ YYDEBUGSTR, yydepth, yystate, yychar, yys);
1732+#ifdef YYSTYPE_TOSTRING
1733+#if YYBTYACC
1734+ if (!yytrial)
1735+#endif /* YYBTYACC */
1736+ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
1737+#endif
1738+ fputc('\n', stderr);
1739+ }
1740+#endif
1741+ }
1742+#if YYBTYACC
1743+
1744+ /* Do we have a conflict? */
1745+ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1746+ yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1747+ {
1748+ YYINT ctry;
1749+
1750+ if (yypath)
1751+ {
1752+ YYParseState *save;
1753+#if YYDEBUG
1754+ if (yydebug)
1755+ fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
1756+ YYDEBUGSTR, yydepth, yystate);
1757+#endif
1758+ /* Switch to the next conflict context */
1759+ save = yypath;
1760+ yypath = save->save;
1761+ save->save = NULL;
1762+ ctry = save->ctry;
1763+ if (save->state != yystate) YYABORT;
1764+ yyFreeState(save);
1765+
1766+ }
1767+ else
1768+ {
1769+
1770+ /* Unresolved conflict - start/continue trial parse */
1771+ YYParseState *save;
1772+#if YYDEBUG
1773+ if (yydebug)
1774+ {
1775+ fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
1776+ if (yyps->save)
1777+ fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
1778+ else
1779+ fputs("Starting trial parse.\n", stderr);
1780+ }
1781+#endif
1782+ save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1783+ if (save == NULL) goto yyenomem;
1784+ save->save = yyps->save;
1785+ save->state = yystate;
1786+ save->errflag = yyerrflag;
1787+ save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
1788+ memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1789+ save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
1790+ memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1791+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1792+ save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
1793+ memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1794+#endif
1795+ ctry = yytable[yyn];
1796+ if (yyctable[ctry] == -1)
1797+ {
1798+#if YYDEBUG
1799+ if (yydebug && yychar >= YYEOF)
1800+ fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
1801+#endif
1802+ ctry++;
1803+ }
1804+ save->ctry = ctry;
1805+ if (yyps->save == NULL)
1806+ {
1807+ /* If this is a first conflict in the stack, start saving lexemes */
1808+ if (!yylexemes)
1809+ {
1810+ yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
1811+ if (yylexemes == NULL) goto yyenomem;
1812+ yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
1813+ if (yylvals == NULL) goto yyenomem;
1814+ yylvlim = yylvals + YYLVQUEUEGROWTH;
1815+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1816+ yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
1817+ if (yylpsns == NULL) goto yyenomem;
1818+ yylplim = yylpsns + YYLVQUEUEGROWTH;
1819+#endif
1820+ }
1821+ if (yylvp == yylve)
1822+ {
1823+ yylvp = yylve = yylvals;
1824+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1825+ yylpp = yylpe = yylpsns;
1826+#endif
1827+ yylexp = yylexemes;
1828+ if (yychar >= YYEOF)
1829+ {
1830+ *yylve++ = yylval;
1831+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1832+ *yylpe++ = yylloc;
1833+#endif
1834+ *yylexp = (YYINT) yychar;
1835+ yychar = YYEMPTY;
1836+ }
1837+ }
1838+ }
1839+ if (yychar >= YYEOF)
1840+ {
1841+ yylvp--;
1842+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1843+ yylpp--;
1844+#endif
1845+ yylexp--;
1846+ yychar = YYEMPTY;
1847+ }
1848+ save->lexeme = (int) (yylvp - yylvals);
1849+ yyps->save = save;
1850+ }
1851+ if (yytable[yyn] == ctry)
1852+ {
1853+#if YYDEBUG
1854+ if (yydebug)
1855+ fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1856+ YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
1857+#endif
1858+ if (yychar < 0)
1859+ {
1860+ yylvp++;
1861+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1862+ yylpp++;
1863+#endif
1864+ yylexp++;
1865+ }
1866+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
1867+ goto yyoverflow;
1868+ yystate = yyctable[ctry];
1869+ *++yystack.s_mark = (YYINT) yystate;
1870+ *++yystack.l_mark = yylval;
1871+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1872+ *++yystack.p_mark = yylloc;
1873+#endif
1874+ yychar = YYEMPTY;
1875+ if (yyerrflag > 0) --yyerrflag;
1876+ goto yyloop;
1877+ }
1878+ else
1879+ {
1880+ yyn = yyctable[ctry];
1881+ goto yyreduce;
1882+ }
1883+ } /* End of code dealing with conflicts */
1884+#endif /* YYBTYACC */
1885+ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1886+ yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1887+ {
1888+#if YYDEBUG
1889+ if (yydebug)
1890+ fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1891+ YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
1892+#endif
1893+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1894+ yystate = yytable[yyn];
1895+ *++yystack.s_mark = yytable[yyn];
1896+ *++yystack.l_mark = yylval;
1897+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1898+ *++yystack.p_mark = yylloc;
1899+#endif
1900+ yychar = YYEMPTY;
1901+ if (yyerrflag > 0) --yyerrflag;
1902+ goto yyloop;
1903+ }
1904+ if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1905+ yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1906+ {
1907+ yyn = yytable[yyn];
1908+ goto yyreduce;
1909+ }
1910+ if (yyerrflag != 0) goto yyinrecovery;
1911+#if YYBTYACC
1912+
1913+ yynewerrflag = 1;
1914+ goto yyerrhandler;
1915+ goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1916+
1917+yyerrlab:
1918+ /* explicit YYERROR from an action -- pop the rhs of the rule reduced
1919+ * before looking for error recovery */
1920+ yystack.s_mark -= yym;
1921+ yystate = *yystack.s_mark;
1922+ yystack.l_mark -= yym;
1923+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1924+ yystack.p_mark -= yym;
1925+#endif
1926+
1927+ yynewerrflag = 0;
1928+yyerrhandler:
1929+ while (yyps->save)
1930+ {
1931+ int ctry;
1932+ YYParseState *save = yyps->save;
1933+#if YYDEBUG
1934+ if (yydebug)
1935+ fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
1936+ YYDEBUGSTR, yydepth, yystate, yyps->save->state,
1937+ (int)(yylvp - yylvals - yyps->save->lexeme));
1938+#endif
1939+ /* Memorize most forward-looking error state in case it's really an error. */
1940+ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
1941+ {
1942+ /* Free old saved error context state */
1943+ if (yyerrctx) yyFreeState(yyerrctx);
1944+ /* Create and fill out new saved error context state */
1945+ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1946+ if (yyerrctx == NULL) goto yyenomem;
1947+ yyerrctx->save = yyps->save;
1948+ yyerrctx->state = yystate;
1949+ yyerrctx->errflag = yyerrflag;
1950+ yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1951+ memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1952+ yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1953+ memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1954+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1955+ yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1956+ memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1957+#endif
1958+ yyerrctx->lexeme = (int) (yylvp - yylvals);
1959+ }
1960+ yylvp = yylvals + save->lexeme;
1961+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1962+ yylpp = yylpsns + save->lexeme;
1963+#endif
1964+ yylexp = yylexemes + save->lexeme;
1965+ yychar = YYEMPTY;
1966+ yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1967+ memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1968+ yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1969+ memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1970+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1971+ yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1972+ memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1973+#endif
1974+ ctry = ++save->ctry;
1975+ yystate = save->state;
1976+ /* We tried shift, try reduce now */
1977+ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1978+ yyps->save = save->save;
1979+ save->save = NULL;
1980+ yyFreeState(save);
1981+
1982+ /* Nothing left on the stack -- error */
1983+ if (!yyps->save)
1984+ {
1985+#if YYDEBUG
1986+ if (yydebug)
1987+ fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1988+ YYPREFIX, yydepth);
1989+#endif
1990+ /* Restore state as it was in the most forward-advanced error */
1991+ yylvp = yylvals + yyerrctx->lexeme;
1992+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1993+ yylpp = yylpsns + yyerrctx->lexeme;
1994+#endif
1995+ yylexp = yylexemes + yyerrctx->lexeme;
1996+ yychar = yylexp[-1];
1997+ yylval = yylvp[-1];
1998+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1999+ yylloc = yylpp[-1];
2000+#endif
2001+ yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
2002+ memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
2003+ yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
2004+ memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
2005+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2006+ yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
2007+ memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
2008+#endif
2009+ yystate = yyerrctx->state;
2010+ yyFreeState(yyerrctx);
2011+ yyerrctx = NULL;
2012+ }
2013+ yynewerrflag = 1;
2014+ }
2015+ if (yynewerrflag == 0) goto yyinrecovery;
2016+#endif /* YYBTYACC */
2017+
2018+ YYERROR_CALL("syntax error");
2019+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2020+ yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
2021+#endif
2022+
2023+#if !YYBTYACC
2024+ goto yyerrlab; /* redundant goto avoids 'unused label' warning */
2025+yyerrlab:
2026+#endif
2027+ ++yynerrs;
2028+
2029+yyinrecovery:
2030+ if (yyerrflag < 3)
2031+ {
2032+ yyerrflag = 3;
2033+ for (;;)
2034+ {
2035+ if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
2036+ yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
2037+ {
2038+#if YYDEBUG
2039+ if (yydebug)
2040+ fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
2041+ YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
2042+#endif
2043+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
2044+ yystate = yytable[yyn];
2045+ *++yystack.s_mark = yytable[yyn];
2046+ *++yystack.l_mark = yylval;
2047+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2048+ /* lookahead position is error end position */
2049+ yyerror_loc_range[2] = yylloc;
2050+ YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
2051+ *++yystack.p_mark = yyloc;
2052+#endif
2053+ goto yyloop;
2054+ }
2055+ else
2056+ {
2057+#if YYDEBUG
2058+ if (yydebug)
2059+ fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
2060+ YYDEBUGSTR, yydepth, *yystack.s_mark);
2061+#endif
2062+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
2063+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2064+ /* the current TOS position is the error start position */
2065+ yyerror_loc_range[1] = *yystack.p_mark;
2066+#endif
2067+#if defined(YYDESTRUCT_CALL)
2068+#if YYBTYACC
2069+ if (!yytrial)
2070+#endif /* YYBTYACC */
2071+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2072+ YYDESTRUCT_CALL("error: discarding state",
2073+ yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
2074+#else
2075+ YYDESTRUCT_CALL("error: discarding state",
2076+ yystos[*yystack.s_mark], yystack.l_mark);
2077+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
2078+#endif /* defined(YYDESTRUCT_CALL) */
2079+ --yystack.s_mark;
2080+ --yystack.l_mark;
2081+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2082+ --yystack.p_mark;
2083+#endif
2084+ }
2085+ }
2086+ }
2087+ else
2088+ {
2089+ if (yychar == YYEOF) goto yyabort;
2090+#if YYDEBUG
2091+ if (yydebug)
2092+ {
2093+ if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
2094+ fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
2095+ YYDEBUGSTR, yydepth, yystate, yychar, yys);
2096+ }
2097+#endif
2098+#if defined(YYDESTRUCT_CALL)
2099+#if YYBTYACC
2100+ if (!yytrial)
2101+#endif /* YYBTYACC */
2102+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2103+ YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
2104+#else
2105+ YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
2106+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
2107+#endif /* defined(YYDESTRUCT_CALL) */
2108+ yychar = YYEMPTY;
2109+ goto yyloop;
2110+ }
2111+
2112+yyreduce:
2113+ yym = yylen[yyn];
2114+#if YYDEBUG
2115+ if (yydebug)
2116+ {
2117+ fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
2118+ YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
2119+#ifdef YYSTYPE_TOSTRING
2120+#if YYBTYACC
2121+ if (!yytrial)
2122+#endif /* YYBTYACC */
2123+ if (yym > 0)
2124+ {
2125+ int i;
2126+ fputc('<', stderr);
2127+ for (i = yym; i > 0; i--)
2128+ {
2129+ if (i != yym) fputs(", ", stderr);
2130+ fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
2131+ yystack.l_mark[1-i]), stderr);
2132+ }
2133+ fputc('>', stderr);
2134+ }
2135+#endif
2136+ fputc('\n', stderr);
2137+ }
2138+#endif
2139+ if (yym > 0)
2140+ yyval = yystack.l_mark[1-yym];
2141+ else
2142+ memset(&yyval, 0, sizeof yyval);
2143+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2144+
2145+ /* Perform position reduction */
2146+ memset(&yyloc, 0, sizeof(yyloc));
2147+#if YYBTYACC
2148+ if (!yytrial)
2149+#endif /* YYBTYACC */
2150+ {
2151+ YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
2152+ /* just in case YYERROR is invoked within the action, save
2153+ the start of the rhs as the error start position */
2154+ yyerror_loc_range[1] = yystack.p_mark[1-yym];
2155+ }
2156+#endif
2157+
2158+ switch (yyn)
2159+ {
2160+case 1:
2161+#line 256 "parser.y"
2162+ { yyval.file = param->rtrn = yystack.l_mark[0].file; param->more_maps = !!param->rtrn; }
2163+#line 2143 "parser.c"
2164+break;
2165+case 2:
2166+#line 258 "parser.y"
2167+ { yyval.file = param->rtrn = yystack.l_mark[0].file; param->more_maps = !!param->rtrn; YYACCEPT; }
2168+#line 2148 "parser.c"
2169+break;
2170+case 3:
2171+#line 260 "parser.y"
2172+ { yyval.file = param->rtrn = NULL; param->more_maps = false; }
2173+#line 2153 "parser.c"
2174+break;
2175+case 4:
2176+#line 266 "parser.y"
2177+ { yyval.file = XkbFileCreate(yystack.l_mark[-5].file_type, yystack.l_mark[-4].str, (ParseCommon *) yystack.l_mark[-2].fileList.head, yystack.l_mark[-6].mapFlags); }
2178+#line 2158 "parser.c"
2179+break;
2180+case 5:
2181+#line 269 "parser.y"
2182+ { yyval.file_type = FILE_TYPE_KEYMAP; }
2183+#line 2163 "parser.c"
2184+break;
2185+case 6:
2186+#line 270 "parser.y"
2187+ { yyval.file_type = FILE_TYPE_KEYMAP; }
2188+#line 2168 "parser.c"
2189+break;
2190+case 7:
2191+#line 271 "parser.y"
2192+ { yyval.file_type = FILE_TYPE_KEYMAP; }
2193+#line 2173 "parser.c"
2194+break;
2195+case 8:
2196+#line 275 "parser.y"
2197+ { yyval.fileList.head = yystack.l_mark[-1].fileList.head; yyval.fileList.last->common.next = &yystack.l_mark[0].file->common; yyval.fileList.last = yystack.l_mark[0].file; }
2198+#line 2178 "parser.c"
2199+break;
2200+case 9:
2201+#line 277 "parser.y"
2202+ { yyval.fileList.head = yyval.fileList.last = yystack.l_mark[0].file; }
2203+#line 2183 "parser.c"
2204+break;
2205+case 10:
2206+#line 283 "parser.y"
2207+ {
2208+ yyval.file = XkbFileCreate(yystack.l_mark[-5].file_type, yystack.l_mark[-4].str, yystack.l_mark[-2].anyList.head, yystack.l_mark[-6].mapFlags);
2209+ }
2210+#line 2190 "parser.c"
2211+break;
2212+case 11:
2213+#line 288 "parser.y"
2214+ { yyval.file_type = FILE_TYPE_KEYCODES; }
2215+#line 2195 "parser.c"
2216+break;
2217+case 12:
2218+#line 289 "parser.y"
2219+ { yyval.file_type = FILE_TYPE_TYPES; }
2220+#line 2200 "parser.c"
2221+break;
2222+case 13:
2223+#line 290 "parser.y"
2224+ { yyval.file_type = FILE_TYPE_COMPAT; }
2225+#line 2205 "parser.c"
2226+break;
2227+case 14:
2228+#line 291 "parser.y"
2229+ { yyval.file_type = FILE_TYPE_SYMBOLS; }
2230+#line 2210 "parser.c"
2231+break;
2232+case 15:
2233+#line 292 "parser.y"
2234+ { yyval.file_type = FILE_TYPE_GEOMETRY; }
2235+#line 2215 "parser.c"
2236+break;
2237+case 16:
2238+#line 295 "parser.y"
2239+ { yyval.mapFlags = yystack.l_mark[0].mapFlags; }
2240+#line 2220 "parser.c"
2241+break;
2242+case 17:
2243+#line 296 "parser.y"
2244+ { yyval.mapFlags = 0; }
2245+#line 2225 "parser.c"
2246+break;
2247+case 18:
2248+#line 299 "parser.y"
2249+ { yyval.mapFlags = (yystack.l_mark[-1].mapFlags | yystack.l_mark[0].mapFlags); }
2250+#line 2230 "parser.c"
2251+break;
2252+case 19:
2253+#line 300 "parser.y"
2254+ { yyval.mapFlags = yystack.l_mark[0].mapFlags; }
2255+#line 2235 "parser.c"
2256+break;
2257+case 20:
2258+#line 303 "parser.y"
2259+ { yyval.mapFlags = MAP_IS_PARTIAL; }
2260+#line 2240 "parser.c"
2261+break;
2262+case 21:
2263+#line 304 "parser.y"
2264+ { yyval.mapFlags = MAP_IS_DEFAULT; }
2265+#line 2245 "parser.c"
2266+break;
2267+case 22:
2268+#line 305 "parser.y"
2269+ { yyval.mapFlags = MAP_IS_HIDDEN; }
2270+#line 2250 "parser.c"
2271+break;
2272+case 23:
2273+#line 306 "parser.y"
2274+ { yyval.mapFlags = MAP_HAS_ALPHANUMERIC; }
2275+#line 2255 "parser.c"
2276+break;
2277+case 24:
2278+#line 307 "parser.y"
2279+ { yyval.mapFlags = MAP_HAS_MODIFIER; }
2280+#line 2260 "parser.c"
2281+break;
2282+case 25:
2283+#line 308 "parser.y"
2284+ { yyval.mapFlags = MAP_HAS_KEYPAD; }
2285+#line 2265 "parser.c"
2286+break;
2287+case 26:
2288+#line 309 "parser.y"
2289+ { yyval.mapFlags = MAP_HAS_FN; }
2290+#line 2270 "parser.c"
2291+break;
2292+case 27:
2293+#line 310 "parser.y"
2294+ { yyval.mapFlags = MAP_IS_ALTGR; }
2295+#line 2275 "parser.c"
2296+break;
2297+case 28:
2298+#line 314 "parser.y"
2299+ {
2300+ if (yystack.l_mark[0].any) {
2301+ if (yystack.l_mark[-1].anyList.head) {
2302+ yyval.anyList.head = yystack.l_mark[-1].anyList.head; yystack.l_mark[-1].anyList.last->next = yystack.l_mark[0].any; yyval.anyList.last = yystack.l_mark[0].any;
2303+ } else {
2304+ yyval.anyList.head = yyval.anyList.last = yystack.l_mark[0].any;
2305+ }
2306+ }
2307+ }
2308+#line 2288 "parser.c"
2309+break;
2310+case 29:
2311+#line 329 "parser.y"
2312+ {
2313+ for (VModDef *vmod = yystack.l_mark[0].vmodList.head; vmod; vmod = (VModDef *) vmod->common.next)
2314+ vmod->merge = yystack.l_mark[-1].merge;
2315+ if (yystack.l_mark[-2].anyList.head) {
2316+ yyval.anyList.head = yystack.l_mark[-2].anyList.head; yystack.l_mark[-2].anyList.last->next = &yystack.l_mark[0].vmodList.head->common; yyval.anyList.last = &yystack.l_mark[0].vmodList.last->common;
2317+ } else {
2318+ yyval.anyList.head = &yystack.l_mark[0].vmodList.head->common; yyval.anyList.last = &yystack.l_mark[0].vmodList.last->common;
2319+ }
2320+ }
2321+#line 2301 "parser.c"
2322+break;
2323+case 30:
2324+#line 338 "parser.y"
2325+ { yyval.anyList.head = yyval.anyList.last = NULL; }
2326+#line 2306 "parser.c"
2327+break;
2328+case 31:
2329+#line 342 "parser.y"
2330+ {
2331+ yystack.l_mark[0].var->merge = yystack.l_mark[-1].merge;
2332+ yyval.any = (ParseCommon *) yystack.l_mark[0].var;
2333+ }
2334+#line 2314 "parser.c"
2335+break;
2336+case 32:
2337+#line 348 "parser.y"
2338+ {
2339+ yystack.l_mark[0].interp->merge = yystack.l_mark[-1].merge;
2340+ yyval.any = (ParseCommon *) yystack.l_mark[0].interp;
2341+ }
2342+#line 2322 "parser.c"
2343+break;
2344+case 33:
2345+#line 353 "parser.y"
2346+ {
2347+ yystack.l_mark[0].keyCode->merge = yystack.l_mark[-1].merge;
2348+ yyval.any = (ParseCommon *) yystack.l_mark[0].keyCode;
2349+ }
2350+#line 2330 "parser.c"
2351+break;
2352+case 34:
2353+#line 358 "parser.y"
2354+ {
2355+ yystack.l_mark[0].keyAlias->merge = yystack.l_mark[-1].merge;
2356+ yyval.any = (ParseCommon *) yystack.l_mark[0].keyAlias;
2357+ }
2358+#line 2338 "parser.c"
2359+break;
2360+case 35:
2361+#line 363 "parser.y"
2362+ {
2363+ yystack.l_mark[0].keyType->merge = yystack.l_mark[-1].merge;
2364+ yyval.any = (ParseCommon *) yystack.l_mark[0].keyType;
2365+ }
2366+#line 2346 "parser.c"
2367+break;
2368+case 36:
2369+#line 368 "parser.y"
2370+ {
2371+ yystack.l_mark[0].syms->merge = yystack.l_mark[-1].merge;
2372+ yyval.any = (ParseCommon *) yystack.l_mark[0].syms;
2373+ }
2374+#line 2354 "parser.c"
2375+break;
2376+case 37:
2377+#line 373 "parser.y"
2378+ {
2379+ yystack.l_mark[0].modMask->merge = yystack.l_mark[-1].merge;
2380+ yyval.any = (ParseCommon *) yystack.l_mark[0].modMask;
2381+ }
2382+#line 2362 "parser.c"
2383+break;
2384+case 38:
2385+#line 378 "parser.y"
2386+ {
2387+ yystack.l_mark[0].groupCompat->merge = yystack.l_mark[-1].merge;
2388+ yyval.any = (ParseCommon *) yystack.l_mark[0].groupCompat;
2389+ }
2390+#line 2370 "parser.c"
2391+break;
2392+case 39:
2393+#line 383 "parser.y"
2394+ {
2395+ yystack.l_mark[0].ledMap->merge = yystack.l_mark[-1].merge;
2396+ yyval.any = (ParseCommon *) yystack.l_mark[0].ledMap;
2397+ }
2398+#line 2378 "parser.c"
2399+break;
2400+case 40:
2401+#line 388 "parser.y"
2402+ {
2403+ yystack.l_mark[0].ledName->merge = yystack.l_mark[-1].merge;
2404+ yyval.any = (ParseCommon *) yystack.l_mark[0].ledName;
2405+ }
2406+#line 2386 "parser.c"
2407+break;
2408+case 41:
2409+#line 392 "parser.y"
2410+ { yyval.any = NULL; }
2411+#line 2391 "parser.c"
2412+break;
2413+case 42:
2414+#line 393 "parser.y"
2415+ { yyval.any = NULL; }
2416+#line 2396 "parser.c"
2417+break;
2418+case 43:
2419+#line 394 "parser.y"
2420+ { yyval.any = NULL; }
2421+#line 2401 "parser.c"
2422+break;
2423+case 44:
2424+#line 396 "parser.y"
2425+ {
2426+ yyval.any = (ParseCommon *) IncludeCreate(param->ctx, yystack.l_mark[0].str, yystack.l_mark[-1].merge);
2427+ free(yystack.l_mark[0].str);
2428+ }
2429+#line 2409 "parser.c"
2430+break;
2431+case 45:
2432+#line 403 "parser.y"
2433+ { yyval.var = VarCreate(yystack.l_mark[-3].expr, yystack.l_mark[-1].expr); }
2434+#line 2414 "parser.c"
2435+break;
2436+case 46:
2437+#line 405 "parser.y"
2438+ { yyval.var = BoolVarCreate(yystack.l_mark[-1].atom, true); }
2439+#line 2419 "parser.c"
2440+break;
2441+case 47:
2442+#line 407 "parser.y"
2443+ { yyval.var = BoolVarCreate(yystack.l_mark[-1].atom, false); }
2444+#line 2424 "parser.c"
2445+break;
2446+case 48:
2447+#line 411 "parser.y"
2448+ { yyval.keyCode = KeycodeCreate(yystack.l_mark[-3].atom, yystack.l_mark[-1].num); }
2449+#line 2429 "parser.c"
2450+break;
2451+case 49:
2452+#line 415 "parser.y"
2453+ { yyval.keyAlias = KeyAliasCreate(yystack.l_mark[-3].atom, yystack.l_mark[-1].atom); }
2454+#line 2434 "parser.c"
2455+break;
2456+case 50:
2457+#line 419 "parser.y"
2458+ { yyval.vmodList = yystack.l_mark[-1].vmodList; }
2459+#line 2439 "parser.c"
2460+break;
2461+case 51:
2462+#line 423 "parser.y"
2463+ { yyval.vmodList.head = yystack.l_mark[-2].vmodList.head; yyval.vmodList.last->common.next = &yystack.l_mark[0].vmod->common; yyval.vmodList.last = yystack.l_mark[0].vmod; }
2464+#line 2444 "parser.c"
2465+break;
2466+case 52:
2467+#line 425 "parser.y"
2468+ { yyval.vmodList.head = yyval.vmodList.last = yystack.l_mark[0].vmod; }
2469+#line 2449 "parser.c"
2470+break;
2471+case 53:
2472+#line 429 "parser.y"
2473+ { yyval.vmod = VModCreate(yystack.l_mark[0].atom, NULL); }
2474+#line 2454 "parser.c"
2475+break;
2476+case 54:
2477+#line 431 "parser.y"
2478+ { yyval.vmod = VModCreate(yystack.l_mark[-2].atom, yystack.l_mark[0].expr); }
2479+#line 2459 "parser.c"
2480+break;
2481+case 55:
2482+#line 437 "parser.y"
2483+ { yystack.l_mark[-4].interp->def = yystack.l_mark[-2].varList.head; yyval.interp = yystack.l_mark[-4].interp; }
2484+#line 2464 "parser.c"
2485+break;
2486+case 56:
2487+#line 441 "parser.y"
2488+ { yyval.interp = InterpCreate(yystack.l_mark[-2].keysym, yystack.l_mark[0].expr); }
2489+#line 2469 "parser.c"
2490+break;
2491+case 57:
2492+#line 443 "parser.y"
2493+ { yyval.interp = InterpCreate(yystack.l_mark[0].keysym, NULL); }
2494+#line 2474 "parser.c"
2495+break;
2496+case 58:
2497+#line 447 "parser.y"
2498+ { yyval.varList.head = yystack.l_mark[-1].varList.head; yyval.varList.last->common.next = &yystack.l_mark[0].var->common; yyval.varList.last = yystack.l_mark[0].var; }
2499+#line 2479 "parser.c"
2500+break;
2501+case 59:
2502+#line 449 "parser.y"
2503+ { yyval.varList.head = yyval.varList.last = yystack.l_mark[0].var; }
2504+#line 2484 "parser.c"
2505+break;
2506+case 60:
2507+#line 455 "parser.y"
2508+ { yyval.keyType = KeyTypeCreate(yystack.l_mark[-4].atom, yystack.l_mark[-2].varList.head); }
2509+#line 2489 "parser.c"
2510+break;
2511+case 61:
2512+#line 461 "parser.y"
2513+ { yyval.syms = SymbolsCreate(yystack.l_mark[-4].atom, yystack.l_mark[-2].varList.head); }
2514+#line 2494 "parser.c"
2515+break;
2516+case 62:
2517+#line 465 "parser.y"
2518+ { yyval.varList.head = yystack.l_mark[-2].varList.head; yyval.varList.last->common.next = &yystack.l_mark[0].var->common; yyval.varList.last = yystack.l_mark[0].var; }
2519+#line 2499 "parser.c"
2520+break;
2521+case 63:
2522+#line 467 "parser.y"
2523+ { yyval.varList.head = yyval.varList.last = yystack.l_mark[0].var; }
2524+#line 2504 "parser.c"
2525+break;
2526+case 64:
2527+#line 470 "parser.y"
2528+ { yyval.var = VarCreate(yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
2529+#line 2509 "parser.c"
2530+break;
2531+case 65:
2532+#line 471 "parser.y"
2533+ { yyval.var = VarCreate(yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
2534+#line 2514 "parser.c"
2535+break;
2536+case 66:
2537+#line 472 "parser.y"
2538+ { yyval.var = BoolVarCreate(yystack.l_mark[0].atom, true); }
2539+#line 2519 "parser.c"
2540+break;
2541+case 67:
2542+#line 473 "parser.y"
2543+ { yyval.var = BoolVarCreate(yystack.l_mark[0].atom, false); }
2544+#line 2524 "parser.c"
2545+break;
2546+case 68:
2547+#line 474 "parser.y"
2548+ { yyval.var = VarCreate(NULL, yystack.l_mark[0].expr); }
2549+#line 2529 "parser.c"
2550+break;
2551+case 69:
2552+#line 478 "parser.y"
2553+ { yyval.expr = yystack.l_mark[-1].expr; }
2554+#line 2534 "parser.c"
2555+break;
2556+case 70:
2557+#line 480 "parser.y"
2558+ { yyval.expr = ExprCreateActionList(yystack.l_mark[-1].exprList.head); }
2559+#line 2539 "parser.c"
2560+break;
2561+case 71:
2562+#line 484 "parser.y"
2563+ { yyval.groupCompat = GroupCompatCreate(yystack.l_mark[-3].num, yystack.l_mark[-1].expr); }
2564+#line 2544 "parser.c"
2565+break;
2566+case 72:
2567+#line 488 "parser.y"
2568+ { yyval.modMask = ModMapCreate(yystack.l_mark[-4].atom, yystack.l_mark[-2].exprList.head); }
2569+#line 2549 "parser.c"
2570+break;
2571+case 73:
2572+#line 492 "parser.y"
2573+ { yyval.ledMap = LedMapCreate(yystack.l_mark[-4].atom, yystack.l_mark[-2].varList.head); }
2574+#line 2554 "parser.c"
2575+break;
2576+case 74:
2577+#line 496 "parser.y"
2578+ { yyval.ledName = LedNameCreate(yystack.l_mark[-3].num, yystack.l_mark[-1].expr, false); }
2579+#line 2559 "parser.c"
2580+break;
2581+case 75:
2582+#line 498 "parser.y"
2583+ { yyval.ledName = LedNameCreate(yystack.l_mark[-3].num, yystack.l_mark[-1].expr, true); }
2584+#line 2564 "parser.c"
2585+break;
2586+case 76:
2587+#line 502 "parser.y"
2588+ { yyval.geom = NULL; }
2589+#line 2569 "parser.c"
2590+break;
2591+case 77:
2592+#line 504 "parser.y"
2593+ { (void) yystack.l_mark[-2].expr; yyval.geom = NULL; }
2594+#line 2574 "parser.c"
2595+break;
2596+case 78:
2597+#line 508 "parser.y"
2598+ { yyval.geom = NULL; }
2599+#line 2579 "parser.c"
2600+break;
2601+case 79:
2602+#line 511 "parser.y"
2603+ { yyval.geom = NULL;}
2604+#line 2584 "parser.c"
2605+break;
2606+case 80:
2607+#line 512 "parser.y"
2608+ { yyval.geom = NULL; }
2609+#line 2589 "parser.c"
2610+break;
2611+case 81:
2612+#line 516 "parser.y"
2613+ { yyval.geom = NULL; }
2614+#line 2594 "parser.c"
2615+break;
2616+case 82:
2617+#line 518 "parser.y"
2618+ { FreeStmt((ParseCommon *) yystack.l_mark[0].var); yyval.geom = NULL; }
2619+#line 2599 "parser.c"
2620+break;
2621+case 83:
2622+#line 520 "parser.y"
2623+ { yyval.geom = NULL; }
2624+#line 2604 "parser.c"
2625+break;
2626+case 84:
2627+#line 522 "parser.y"
2628+ { FreeStmt((ParseCommon *) yystack.l_mark[0].ledMap); yyval.geom = NULL; }
2629+#line 2609 "parser.c"
2630+break;
2631+case 85:
2632+#line 524 "parser.y"
2633+ { yyval.geom = NULL; }
2634+#line 2614 "parser.c"
2635+break;
2636+case 86:
2637+#line 527 "parser.y"
2638+ { yyval.geom = NULL;}
2639+#line 2619 "parser.c"
2640+break;
2641+case 87:
2642+#line 528 "parser.y"
2643+ { yyval.geom = NULL; }
2644+#line 2624 "parser.c"
2645+break;
2646+case 88:
2647+#line 531 "parser.y"
2648+ { yyval.geom = NULL; }
2649+#line 2629 "parser.c"
2650+break;
2651+case 89:
2652+#line 533 "parser.y"
2653+ { FreeStmt((ParseCommon *) yystack.l_mark[0].var); yyval.geom = NULL; }
2654+#line 2634 "parser.c"
2655+break;
2656+case 90:
2657+#line 536 "parser.y"
2658+ { yyval.geom = NULL; }
2659+#line 2639 "parser.c"
2660+break;
2661+case 91:
2662+#line 537 "parser.y"
2663+ { yyval.geom = NULL; }
2664+#line 2644 "parser.c"
2665+break;
2666+case 92:
2667+#line 541 "parser.y"
2668+ { yyval.geom = NULL; }
2669+#line 2649 "parser.c"
2670+break;
2671+case 93:
2672+#line 543 "parser.y"
2673+ { FreeStmt((ParseCommon *) yystack.l_mark[-1].exprList.head); yyval.geom = NULL; }
2674+#line 2654 "parser.c"
2675+break;
2676+case 94:
2677+#line 547 "parser.y"
2678+ { yyval.geom = NULL; }
2679+#line 2659 "parser.c"
2680+break;
2681+case 95:
2682+#line 550 "parser.y"
2683+ { yyval.geom = NULL; }
2684+#line 2664 "parser.c"
2685+break;
2686+case 96:
2687+#line 551 "parser.y"
2688+ { yyval.geom = NULL; }
2689+#line 2669 "parser.c"
2690+break;
2691+case 97:
2692+#line 554 "parser.y"
2693+ { yyval.geom = NULL; }
2694+#line 2674 "parser.c"
2695+break;
2696+case 98:
2697+#line 558 "parser.y"
2698+ { yyval.geom = NULL;}
2699+#line 2679 "parser.c"
2700+break;
2701+case 99:
2702+#line 560 "parser.y"
2703+ { yyval.geom = NULL; }
2704+#line 2684 "parser.c"
2705+break;
2706+case 100:
2707+#line 564 "parser.y"
2708+ { (void) yystack.l_mark[-1].expr; yyval.geom = NULL; }
2709+#line 2689 "parser.c"
2710+break;
2711+case 101:
2712+#line 566 "parser.y"
2713+ { (void) yystack.l_mark[-1].expr; yyval.geom = NULL; }
2714+#line 2694 "parser.c"
2715+break;
2716+case 102:
2717+#line 568 "parser.y"
2718+ { FreeStmt((ParseCommon *) yystack.l_mark[0].expr); yyval.geom = NULL; }
2719+#line 2699 "parser.c"
2720+break;
2721+case 103:
2722+#line 572 "parser.y"
2723+ { (void) yystack.l_mark[-2].expr; (void) yystack.l_mark[0].expr; yyval.expr = NULL; }
2724+#line 2704 "parser.c"
2725+break;
2726+case 104:
2727+#line 574 "parser.y"
2728+ { (void) yystack.l_mark[0].expr; yyval.expr = NULL; }
2729+#line 2709 "parser.c"
2730+break;
2731+case 105:
2732+#line 578 "parser.y"
2733+ { yyval.expr = NULL; }
2734+#line 2714 "parser.c"
2735+break;
2736+case 106:
2737+#line 582 "parser.y"
2738+ { FreeStmt((ParseCommon *) yystack.l_mark[-2].varList.head); yyval.geom = NULL; }
2739+#line 2719 "parser.c"
2740+break;
2741+case 107:
2742+#line 585 "parser.y"
2743+ { yyval.num = 0; }
2744+#line 2724 "parser.c"
2745+break;
2746+case 108:
2747+#line 586 "parser.y"
2748+ { yyval.num = 0; }
2749+#line 2729 "parser.c"
2750+break;
2751+case 109:
2752+#line 587 "parser.y"
2753+ { yyval.num = 0; }
2754+#line 2734 "parser.c"
2755+break;
2756+case 110:
2757+#line 588 "parser.y"
2758+ { yyval.num = 0; }
2759+#line 2739 "parser.c"
2760+break;
2761+case 111:
2762+#line 591 "parser.y"
2763+ { yyval.atom = yystack.l_mark[0].atom; }
2764+#line 2744 "parser.c"
2765+break;
2766+case 112:
2767+#line 592 "parser.y"
2768+ { yyval.atom = yystack.l_mark[0].atom; }
2769+#line 2749 "parser.c"
2770+break;
2771+case 113:
2772+#line 596 "parser.y"
2773+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "action"); }
2774+#line 2754 "parser.c"
2775+break;
2776+case 114:
2777+#line 598 "parser.y"
2778+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "interpret"); }
2779+#line 2759 "parser.c"
2780+break;
2781+case 115:
2782+#line 600 "parser.y"
2783+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "type"); }
2784+#line 2764 "parser.c"
2785+break;
2786+case 116:
2787+#line 602 "parser.y"
2788+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "key"); }
2789+#line 2769 "parser.c"
2790+break;
2791+case 117:
2792+#line 604 "parser.y"
2793+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "group"); }
2794+#line 2774 "parser.c"
2795+break;
2796+case 118:
2797+#line 606 "parser.y"
2798+ {yyval.atom = xkb_atom_intern_literal(param->ctx, "modifier_map");}
2799+#line 2779 "parser.c"
2800+break;
2801+case 119:
2802+#line 608 "parser.y"
2803+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "indicator"); }
2804+#line 2784 "parser.c"
2805+break;
2806+case 120:
2807+#line 610 "parser.y"
2808+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "shape"); }
2809+#line 2789 "parser.c"
2810+break;
2811+case 121:
2812+#line 612 "parser.y"
2813+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "row"); }
2814+#line 2794 "parser.c"
2815+break;
2816+case 122:
2817+#line 614 "parser.y"
2818+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "section"); }
2819+#line 2799 "parser.c"
2820+break;
2821+case 123:
2822+#line 616 "parser.y"
2823+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "text"); }
2824+#line 2804 "parser.c"
2825+break;
2826+case 124:
2827+#line 619 "parser.y"
2828+ { yyval.merge = yystack.l_mark[0].merge; }
2829+#line 2809 "parser.c"
2830+break;
2831+case 125:
2832+#line 620 "parser.y"
2833+ { yyval.merge = MERGE_DEFAULT; }
2834+#line 2814 "parser.c"
2835+break;
2836+case 126:
2837+#line 623 "parser.y"
2838+ { yyval.merge = MERGE_DEFAULT; }
2839+#line 2819 "parser.c"
2840+break;
2841+case 127:
2842+#line 624 "parser.y"
2843+ { yyval.merge = MERGE_AUGMENT; }
2844+#line 2824 "parser.c"
2845+break;
2846+case 128:
2847+#line 625 "parser.y"
2848+ { yyval.merge = MERGE_OVERRIDE; }
2849+#line 2829 "parser.c"
2850+break;
2851+case 129:
2852+#line 626 "parser.y"
2853+ { yyval.merge = MERGE_REPLACE; }
2854+#line 2834 "parser.c"
2855+break;
2856+case 130:
2857+#line 628 "parser.y"
2858+ {
2859+ /*
2860+ * This used to be MERGE_ALT_FORM. This functionality was
2861+ * unused and has been removed.
2862+ */
2863+ yyval.merge = MERGE_DEFAULT;
2864+ }
2865+#line 2845 "parser.c"
2866+break;
2867+case 131:
2868+#line 637 "parser.y"
2869+ { yyval.exprList = yystack.l_mark[0].exprList; }
2870+#line 2850 "parser.c"
2871+break;
2872+case 132:
2873+#line 638 "parser.y"
2874+ { yyval.exprList.head = yyval.exprList.last = NULL; }
2875+#line 2855 "parser.c"
2876+break;
2877+case 133:
2878+#line 642 "parser.y"
2879+ { yyval.exprList.head = yystack.l_mark[-2].exprList.head; yyval.exprList.last->common.next = &yystack.l_mark[0].expr->common; yyval.exprList.last = yystack.l_mark[0].expr; }
2880+#line 2860 "parser.c"
2881+break;
2882+case 134:
2883+#line 644 "parser.y"
2884+ { yyval.exprList.head = yyval.exprList.last = yystack.l_mark[0].expr; }
2885+#line 2865 "parser.c"
2886+break;
2887+case 135:
2888+#line 648 "parser.y"
2889+ { yyval.expr = ExprCreateBinary(EXPR_DIVIDE, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
2890+#line 2870 "parser.c"
2891+break;
2892+case 136:
2893+#line 650 "parser.y"
2894+ { yyval.expr = ExprCreateBinary(EXPR_ADD, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
2895+#line 2875 "parser.c"
2896+break;
2897+case 137:
2898+#line 652 "parser.y"
2899+ { yyval.expr = ExprCreateBinary(EXPR_SUBTRACT, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
2900+#line 2880 "parser.c"
2901+break;
2902+case 138:
2903+#line 654 "parser.y"
2904+ { yyval.expr = ExprCreateBinary(EXPR_MULTIPLY, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
2905+#line 2885 "parser.c"
2906+break;
2907+case 139:
2908+#line 656 "parser.y"
2909+ { yyval.expr = ExprCreateBinary(EXPR_ASSIGN, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
2910+#line 2890 "parser.c"
2911+break;
2912+case 140:
2913+#line 658 "parser.y"
2914+ { yyval.expr = yystack.l_mark[0].expr; }
2915+#line 2895 "parser.c"
2916+break;
2917+case 141:
2918+#line 662 "parser.y"
2919+ { yyval.expr = ExprCreateUnary(EXPR_NEGATE, yystack.l_mark[0].expr->expr.value_type, yystack.l_mark[0].expr); }
2920+#line 2900 "parser.c"
2921+break;
2922+case 142:
2923+#line 664 "parser.y"
2924+ { yyval.expr = ExprCreateUnary(EXPR_UNARY_PLUS, yystack.l_mark[0].expr->expr.value_type, yystack.l_mark[0].expr); }
2925+#line 2905 "parser.c"
2926+break;
2927+case 143:
2928+#line 666 "parser.y"
2929+ { yyval.expr = ExprCreateUnary(EXPR_NOT, EXPR_TYPE_BOOLEAN, yystack.l_mark[0].expr); }
2930+#line 2910 "parser.c"
2931+break;
2932+case 144:
2933+#line 668 "parser.y"
2934+ { yyval.expr = ExprCreateUnary(EXPR_INVERT, yystack.l_mark[0].expr->expr.value_type, yystack.l_mark[0].expr); }
2935+#line 2915 "parser.c"
2936+break;
2937+case 145:
2938+#line 670 "parser.y"
2939+ { yyval.expr = yystack.l_mark[0].expr; }
2940+#line 2920 "parser.c"
2941+break;
2942+case 146:
2943+#line 672 "parser.y"
2944+ { yyval.expr = ExprCreateAction(yystack.l_mark[-3].atom, yystack.l_mark[-1].exprList.head); }
2945+#line 2925 "parser.c"
2946+break;
2947+case 147:
2948+#line 674 "parser.y"
2949+ { yyval.expr = yystack.l_mark[0].expr; }
2950+#line 2930 "parser.c"
2951+break;
2952+case 148:
2953+#line 676 "parser.y"
2954+ { yyval.expr = yystack.l_mark[-1].expr; }
2955+#line 2935 "parser.c"
2956+break;
2957+case 149:
2958+#line 680 "parser.y"
2959+ { yyval.exprList.head = yystack.l_mark[-2].exprList.head; yyval.exprList.last->common.next = &yystack.l_mark[0].expr->common; yyval.exprList.last = yystack.l_mark[0].expr; }
2960+#line 2940 "parser.c"
2961+break;
2962+case 150:
2963+#line 682 "parser.y"
2964+ { yyval.exprList.head = yyval.exprList.last = yystack.l_mark[0].expr; }
2965+#line 2945 "parser.c"
2966+break;
2967+case 151:
2968+#line 686 "parser.y"
2969+ { yyval.expr = ExprCreateAction(yystack.l_mark[-3].atom, yystack.l_mark[-1].exprList.head); }
2970+#line 2950 "parser.c"
2971+break;
2972+case 152:
2973+#line 690 "parser.y"
2974+ { yyval.expr = ExprCreateIdent(yystack.l_mark[0].atom); }
2975+#line 2955 "parser.c"
2976+break;
2977+case 153:
2978+#line 692 "parser.y"
2979+ { yyval.expr = ExprCreateFieldRef(yystack.l_mark[-2].atom, yystack.l_mark[0].atom); }
2980+#line 2960 "parser.c"
2981+break;
2982+case 154:
2983+#line 694 "parser.y"
2984+ { yyval.expr = ExprCreateArrayRef(XKB_ATOM_NONE, yystack.l_mark[-3].atom, yystack.l_mark[-1].expr); }
2985+#line 2965 "parser.c"
2986+break;
2987+case 155:
2988+#line 696 "parser.y"
2989+ { yyval.expr = ExprCreateArrayRef(yystack.l_mark[-5].atom, yystack.l_mark[-3].atom, yystack.l_mark[-1].expr); }
2990+#line 2970 "parser.c"
2991+break;
2992+case 156:
2993+#line 700 "parser.y"
2994+ { yyval.expr = ExprCreateString(yystack.l_mark[0].atom); }
2995+#line 2975 "parser.c"
2996+break;
2997+case 157:
2998+#line 702 "parser.y"
2999+ { yyval.expr = ExprCreateInteger(yystack.l_mark[0].num); }
3000+#line 2980 "parser.c"
3001+break;
3002+case 158:
3003+#line 704 "parser.y"
3004+ { yyval.expr = ExprCreateFloat(/* Discard $1 */); }
3005+#line 2985 "parser.c"
3006+break;
3007+case 159:
3008+#line 706 "parser.y"
3009+ { yyval.expr = ExprCreateKeyName(yystack.l_mark[0].atom); }
3010+#line 2990 "parser.c"
3011+break;
3012+case 160:
3013+#line 709 "parser.y"
3014+ { yyval.expr = yystack.l_mark[0].expr; }
3015+#line 2995 "parser.c"
3016+break;
3017+case 161:
3018+#line 710 "parser.y"
3019+ { yyval.expr = NULL; }
3020+#line 3000 "parser.c"
3021+break;
3022+case 162:
3023+#line 714 "parser.y"
3024+ { yyval.expr = ExprAppendKeysymList(yystack.l_mark[-2].expr, yystack.l_mark[0].keysym); }
3025+#line 3005 "parser.c"
3026+break;
3027+case 163:
3028+#line 716 "parser.y"
3029+ { yyval.expr = ExprAppendMultiKeysymList(yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
3030+#line 3010 "parser.c"
3031+break;
3032+case 164:
3033+#line 718 "parser.y"
3034+ { yyval.expr = ExprCreateKeysymList(yystack.l_mark[0].keysym); }
3035+#line 3015 "parser.c"
3036+break;
3037+case 165:
3038+#line 720 "parser.y"
3039+ { yyval.expr = ExprCreateMultiKeysymList(yystack.l_mark[0].expr); }
3040+#line 3020 "parser.c"
3041+break;
3042+case 166:
3043+#line 724 "parser.y"
3044+ { yyval.expr = yystack.l_mark[-1].expr; }
3045+#line 3025 "parser.c"
3046+break;
3047+case 167:
3048+#line 728 "parser.y"
3049+ {
3050+ if (!resolve_keysym(yystack.l_mark[0].str, &yyval.keysym)) {
3051+ parser_warn(
3052+ param,
3053+ XKB_WARNING_UNRECOGNIZED_KEYSYM,
3054+ "unrecognized keysym \"%s\"",
3055+ yystack.l_mark[0].str
3056+ );
3057+ yyval.keysym = XKB_KEY_NoSymbol;
3058+ }
3059+ free(yystack.l_mark[0].str);
3060+ }
3061+#line 3041 "parser.c"
3062+break;
3063+case 168:
3064+#line 740 "parser.y"
3065+ { yyval.keysym = XKB_KEY_section; }
3066+#line 3046 "parser.c"
3067+break;
3068+case 169:
3069+#line 742 "parser.y"
3070+ {
3071+ if (yystack.l_mark[0].num < XKB_KEYSYM_MIN) {
3072+ parser_warn(
3073+ param,
3074+ XKB_WARNING_UNRECOGNIZED_KEYSYM,
3075+ "unrecognized keysym \"%"PRId64"\"",
3076+ yystack.l_mark[0].num
3077+ );
3078+ yyval.keysym = XKB_KEY_NoSymbol;
3079+ }
3080+ /* Special case for digits 0..9 */
3081+ else if (yystack.l_mark[0].num < 10) { /* XKB_KEY_0 .. XKB_KEY_9 */
3082+ yyval.keysym = XKB_KEY_0 + (xkb_keysym_t) yystack.l_mark[0].num;
3083+ }
3084+ else {
3085+ if (yystack.l_mark[0].num <= XKB_KEYSYM_MAX) {
3086+ yyval.keysym = (xkb_keysym_t) yystack.l_mark[0].num;
3087+ } else {
3088+ parser_warn(
3089+ param, XKB_WARNING_UNRECOGNIZED_KEYSYM,
3090+ "unrecognized keysym \"0x%"PRIx64"\" "
3091+ "(%"PRId64")", yystack.l_mark[0].num, yystack.l_mark[0].num
3092+ );
3093+ yyval.keysym = XKB_KEY_NoSymbol;
3094+ }
3095+ parser_warn(
3096+ param, XKB_WARNING_NUMERIC_KEYSYM,
3097+ "numeric keysym \"0x%"PRIx64"\" (%"PRId64")",
3098+ yystack.l_mark[0].num, yystack.l_mark[0].num
3099+ );
3100+ }
3101+ }
3102+#line 3082 "parser.c"
3103+break;
3104+case 170:
3105+#line 776 "parser.y"
3106+ { yyval.num = -yystack.l_mark[0].num; }
3107+#line 3087 "parser.c"
3108+break;
3109+case 171:
3110+#line 777 "parser.y"
3111+ { yyval.num = yystack.l_mark[0].num; }
3112+#line 3092 "parser.c"
3113+break;
3114+case 172:
3115+#line 780 "parser.y"
3116+ { yyval.num = yystack.l_mark[0].num; }
3117+#line 3097 "parser.c"
3118+break;
3119+case 173:
3120+#line 781 "parser.y"
3121+ { yyval.num = yystack.l_mark[0].num; }
3122+#line 3102 "parser.c"
3123+break;
3124+case 174:
3125+#line 784 "parser.y"
3126+ { yyval.num = 0; }
3127+#line 3107 "parser.c"
3128+break;
3129+case 175:
3130+#line 787 "parser.y"
3131+ { yyval.num = yystack.l_mark[0].num; }
3132+#line 3112 "parser.c"
3133+break;
3134+case 176:
3135+#line 790 "parser.y"
3136+ { yyval.num = yystack.l_mark[0].num; }
3137+#line 3117 "parser.c"
3138+break;
3139+case 177:
3140+#line 793 "parser.y"
3141+ { yyval.atom = xkb_atom_intern(param->ctx, yystack.l_mark[0].str, strlen(yystack.l_mark[0].str)); free(yystack.l_mark[0].str); }
3142+#line 3122 "parser.c"
3143+break;
3144+case 178:
3145+#line 794 "parser.y"
3146+ { yyval.atom = xkb_atom_intern_literal(param->ctx, "default"); }
3147+#line 3127 "parser.c"
3148+break;
3149+case 179:
3150+#line 797 "parser.y"
3151+ { yyval.atom = xkb_atom_intern(param->ctx, yystack.l_mark[0].str, strlen(yystack.l_mark[0].str)); free(yystack.l_mark[0].str); }
3152+#line 3132 "parser.c"
3153+break;
3154+case 180:
3155+#line 800 "parser.y"
3156+ { yyval.str = yystack.l_mark[0].str; }
3157+#line 3137 "parser.c"
3158+break;
3159+case 181:
3160+#line 801 "parser.y"
3161+ { yyval.str = NULL; }
3162+#line 3142 "parser.c"
3163+break;
3164+case 182:
3165+#line 804 "parser.y"
3166+ { yyval.str = yystack.l_mark[0].str; }
3167+#line 3147 "parser.c"
3168+break;
3169+#line 3149 "parser.c"
3170+ default:
3171+ break;
3172+ }
3173+ yystack.s_mark -= yym;
3174+ yystate = *yystack.s_mark;
3175+ yystack.l_mark -= yym;
3176+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3177+ yystack.p_mark -= yym;
3178+#endif
3179+ yym = yylhs[yyn];
3180+ if (yystate == 0 && yym == 0)
3181+ {
3182+#if YYDEBUG
3183+ if (yydebug)
3184+ {
3185+ fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
3186+#ifdef YYSTYPE_TOSTRING
3187+#if YYBTYACC
3188+ if (!yytrial)
3189+#endif /* YYBTYACC */
3190+ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
3191+#endif
3192+ fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
3193+ }
3194+#endif
3195+ yystate = YYFINAL;
3196+ *++yystack.s_mark = YYFINAL;
3197+ *++yystack.l_mark = yyval;
3198+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3199+ *++yystack.p_mark = yyloc;
3200+#endif
3201+ if (yychar < 0)
3202+ {
3203+#if YYBTYACC
3204+ do {
3205+ if (yylvp < yylve)
3206+ {
3207+ /* we're currently re-reading tokens */
3208+ yylval = *yylvp++;
3209+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3210+ yylloc = *yylpp++;
3211+#endif
3212+ yychar = *yylexp++;
3213+ break;
3214+ }
3215+ if (yyps->save)
3216+ {
3217+ /* in trial mode; save scanner results for future parse attempts */
3218+ if (yylvp == yylvlim)
3219+ { /* Enlarge lexical value queue */
3220+ size_t p = (size_t) (yylvp - yylvals);
3221+ size_t s = (size_t) (yylvlim - yylvals);
3222+
3223+ s += YYLVQUEUEGROWTH;
3224+ if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
3225+ goto yyenomem;
3226+ if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
3227+ goto yyenomem;
3228+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3229+ if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
3230+ goto yyenomem;
3231+#endif
3232+ yylvp = yylve = yylvals + p;
3233+ yylvlim = yylvals + s;
3234+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3235+ yylpp = yylpe = yylpsns + p;
3236+ yylplim = yylpsns + s;
3237+#endif
3238+ yylexp = yylexemes + p;
3239+ }
3240+ *yylexp = (YYINT) YYLEX;
3241+ *yylvp++ = yylval;
3242+ yylve++;
3243+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3244+ *yylpp++ = yylloc;
3245+ yylpe++;
3246+#endif
3247+ yychar = *yylexp++;
3248+ break;
3249+ }
3250+ /* normal operation, no conflict encountered */
3251+#endif /* YYBTYACC */
3252+ yychar = YYLEX;
3253+#if YYBTYACC
3254+ } while (0);
3255+#endif /* YYBTYACC */
3256+ if (yychar < 0) yychar = YYEOF;
3257+#if YYDEBUG
3258+ if (yydebug)
3259+ {
3260+ if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
3261+ fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
3262+ YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
3263+ }
3264+#endif
3265+ }
3266+ if (yychar == YYEOF) goto yyaccept;
3267+ goto yyloop;
3268+ }
3269+ if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
3270+ yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
3271+ yystate = yytable[yyn];
3272+ else
3273+ yystate = yydgoto[yym];
3274+#if YYDEBUG
3275+ if (yydebug)
3276+ {
3277+ fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
3278+#ifdef YYSTYPE_TOSTRING
3279+#if YYBTYACC
3280+ if (!yytrial)
3281+#endif /* YYBTYACC */
3282+ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
3283+#endif
3284+ fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
3285+ }
3286+#endif
3287+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
3288+ *++yystack.s_mark = (YYINT) yystate;
3289+ *++yystack.l_mark = yyval;
3290+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3291+ *++yystack.p_mark = yyloc;
3292+#endif
3293+ goto yyloop;
3294+#if YYBTYACC
3295+
3296+ /* Reduction declares that this path is valid. Set yypath and do a full parse */
3297+yyvalid:
3298+ if (yypath) YYABORT;
3299+ while (yyps->save)
3300+ {
3301+ YYParseState *save = yyps->save;
3302+ yyps->save = save->save;
3303+ save->save = yypath;
3304+ yypath = save;
3305+ }
3306+#if YYDEBUG
3307+ if (yydebug)
3308+ fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
3309+ YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
3310+#endif
3311+ if (yyerrctx)
3312+ {
3313+ yyFreeState(yyerrctx);
3314+ yyerrctx = NULL;
3315+ }
3316+ yylvp = yylvals + yypath->lexeme;
3317+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3318+ yylpp = yylpsns + yypath->lexeme;
3319+#endif
3320+ yylexp = yylexemes + yypath->lexeme;
3321+ yychar = YYEMPTY;
3322+ yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
3323+ memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
3324+ yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
3325+ memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
3326+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3327+ yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
3328+ memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
3329+#endif
3330+ yystate = yypath->state;
3331+ goto yyloop;
3332+#endif /* YYBTYACC */
3333+
3334+yyoverflow:
3335+ YYERROR_CALL("yacc stack overflow");
3336+#if YYBTYACC
3337+ goto yyabort_nomem;
3338+yyenomem:
3339+ YYERROR_CALL("memory exhausted");
3340+yyabort_nomem:
3341+#endif /* YYBTYACC */
3342+ yyresult = 2;
3343+ goto yyreturn;
3344+
3345+yyabort:
3346+ yyresult = 1;
3347+ goto yyreturn;
3348+
3349+yyaccept:
3350+#if YYBTYACC
3351+ if (yyps->save) goto yyvalid;
3352+#endif /* YYBTYACC */
3353+ yyresult = 0;
3354+
3355+yyreturn:
3356+#if defined(YYDESTRUCT_CALL)
3357+ if (yychar != YYEOF && yychar != YYEMPTY)
3358+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3359+ YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
3360+#else
3361+ YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
3362+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
3363+
3364+ {
3365+ YYSTYPE *pv;
3366+#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
3367+ YYLTYPE *pp;
3368+
3369+ for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
3370+ YYDESTRUCT_CALL("cleanup: discarding state",
3371+ yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
3372+#else
3373+ for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
3374+ YYDESTRUCT_CALL("cleanup: discarding state",
3375+ yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
3376+#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
3377+ }
3378+#endif /* defined(YYDESTRUCT_CALL) */
3379+
3380+#if YYBTYACC
3381+ if (yyerrctx)
3382+ {
3383+ yyFreeState(yyerrctx);
3384+ yyerrctx = NULL;
3385+ }
3386+ while (yyps)
3387+ {
3388+ YYParseState *save = yyps;
3389+ yyps = save->save;
3390+ save->save = NULL;
3391+ yyFreeState(save);
3392+ }
3393+ while (yypath)
3394+ {
3395+ YYParseState *save = yypath;
3396+ yypath = save->save;
3397+ save->save = NULL;
3398+ yyFreeState(save);
3399+ }
3400+#endif /* YYBTYACC */
3401+ yyfreestack(&yystack);
3402+ return (yyresult);
3403+}
3404diff --git a/src/xkbcomp/parser.h b/src/xkbcomp/parser.h
3405new file mode 100644
3406index 0000000..86f7a92
3407--- /dev/null
3408+++ b/src/xkbcomp/parser.h
3409@@ -0,0 +1,104 @@
3410+#ifndef __xkbcommon__defines_h_
3411+#define __xkbcommon__defines_h_
3412+
3413+#define END_OF_FILE 0
3414+#define ERROR_TOK 255
3415+#define XKB_KEYMAP 1
3416+#define XKB_KEYCODES 2
3417+#define XKB_TYPES 3
3418+#define XKB_SYMBOLS 4
3419+#define XKB_COMPATMAP 5
3420+#define XKB_GEOMETRY 6
3421+#define XKB_SEMANTICS 7
3422+#define XKB_LAYOUT 8
3423+#define INCLUDE 10
3424+#define OVERRIDE 11
3425+#define AUGMENT 12
3426+#define REPLACE 13
3427+#define ALTERNATE 14
3428+#define VIRTUAL_MODS 20
3429+#define TYPE 21
3430+#define INTERPRET 22
3431+#define ACTION_TOK 23
3432+#define KEY 24
3433+#define ALIAS 25
3434+#define GROUP 26
3435+#define MODIFIER_MAP 27
3436+#define INDICATOR 28
3437+#define SHAPE 29
3438+#define KEYS 30
3439+#define ROW 31
3440+#define SECTION 32
3441+#define OVERLAY 33
3442+#define TEXT 34
3443+#define OUTLINE 35
3444+#define SOLID 36
3445+#define LOGO 37
3446+#define VIRTUAL 38
3447+#define EQUALS 40
3448+#define PLUS 41
3449+#define MINUS 42
3450+#define DIVIDE 43
3451+#define TIMES 44
3452+#define OBRACE 45
3453+#define CBRACE 46
3454+#define OPAREN 47
3455+#define CPAREN 48
3456+#define OBRACKET 49
3457+#define CBRACKET 50
3458+#define DOT 51
3459+#define COMMA 52
3460+#define SEMI 53
3461+#define EXCLAM 54
3462+#define INVERT 55
3463+#define STRING 60
3464+#define INTEGER 61
3465+#define FLOAT 62
3466+#define IDENT 63
3467+#define KEYNAME 64
3468+#define PARTIAL 70
3469+#define DEFAULT 71
3470+#define HIDDEN 72
3471+#define ALPHANUMERIC_KEYS 73
3472+#define MODIFIER_KEYS 74
3473+#define KEYPAD_KEYS 75
3474+#define FUNCTION_KEYS 76
3475+#define ALTERNATE_GROUP 77
3476+#ifdef YYSTYPE
3477+#undef YYSTYPE_IS_DECLARED
3478+#define YYSTYPE_IS_DECLARED 1
3479+#endif
3480+#ifndef YYSTYPE_IS_DECLARED
3481+#define YYSTYPE_IS_DECLARED 1
3482+typedef union YYSTYPE {
3483+ int64_t num;
3484+ enum xkb_file_type file_type;
3485+ char *str;
3486+ xkb_atom_t atom;
3487+ enum merge_mode merge;
3488+ enum xkb_map_flags mapFlags;
3489+ xkb_keysym_t keysym;
3490+ ParseCommon *any;
3491+ struct { ParseCommon *head; ParseCommon *last; } anyList;
3492+ ExprDef *expr;
3493+ struct { ExprDef *head; ExprDef *last; } exprList;
3494+ VarDef *var;
3495+ struct { VarDef *head; VarDef *last; } varList;
3496+ VModDef *vmod;
3497+ struct { VModDef *head; VModDef *last; } vmodList;
3498+ InterpDef *interp;
3499+ KeyTypeDef *keyType;
3500+ SymbolsDef *syms;
3501+ ModMapDef *modMask;
3502+ GroupCompatDef *groupCompat;
3503+ LedMapDef *ledMap;
3504+ LedNameDef *ledName;
3505+ KeycodeDef *keyCode;
3506+ KeyAliasDef *keyAlias;
3507+ void *geom;
3508+ XkbFile *file;
3509+ struct { XkbFile *head; XkbFile *last; } fileList;
3510+} YYSTYPE;
3511+#endif /* !YYSTYPE_IS_DECLARED */
3512+
3513+#endif /* __xkbcommon__defines_h_ */
3514--
35152.45.1
3516