]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/dev/acpica/compiler/aslcompiler.y
A new jail(8) with a configuration file, ultimately to replace the work
[FreeBSD/FreeBSD.git] / sys / contrib / dev / acpica / compiler / aslcompiler.y
1 %{
2 /******************************************************************************
3  *
4  * Module Name: aslcompiler.y - Bison/Yacc input file (ASL grammar and actions)
5  *
6  *****************************************************************************/
7
8 /*
9  * Copyright (C) 2000 - 2012, Intel Corp.
10  * All rights reserved.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions, and the following disclaimer,
17  *    without modification.
18  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19  *    substantially similar to the "NO WARRANTY" disclaimer below
20  *    ("Disclaimer") and any redistribution must be conditioned upon
21  *    including a substantially similar Disclaimer requirement for further
22  *    binary redistribution.
23  * 3. Neither the names of the above-listed copyright holders nor the names
24  *    of any contributors may be used to endorse or promote products derived
25  *    from this software without specific prior written permission.
26  *
27  * Alternatively, this software may be distributed under the terms of the
28  * GNU General Public License ("GPL") version 2 as published by the Free
29  * Software Foundation.
30  *
31  * NO WARRANTY
32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42  * POSSIBILITY OF SUCH DAMAGES.
43  */
44
45 #include <contrib/dev/acpica/compiler/aslcompiler.h>
46 #include <stdio.h>
47 #include <stdlib.h>
48 #include <string.h>
49 #include <contrib/dev/acpica/include/acpi.h>
50 #include <contrib/dev/acpica/include/accommon.h>
51
52 #define _COMPONENT          ACPI_COMPILER
53         ACPI_MODULE_NAME    ("aslparse")
54
55 /*
56  * Global Notes:
57  *
58  * October 2005: The following list terms have been optimized (from the
59  * original ASL grammar in the ACPI specification) to force the immediate
60  * reduction of each list item so that the parse stack use doesn't increase on
61  * each list element and possibly overflow on very large lists (>4000 items).
62  * This dramatically reduces use of the parse stack overall.
63  *
64  *      ArgList, TermList, Objectlist, ByteList, DWordList, PackageList,
65  *      ResourceMacroList, and FieldUnitList
66  */
67
68 void *                      AslLocalAllocate (unsigned int Size);
69
70 /* Bison/yacc configuration */
71
72 #define static
73 #undef alloca
74 #define alloca              AslLocalAllocate
75 #define yytname             AslCompilername
76
77 #define YYINITDEPTH         600             /* State stack depth */
78 #define YYDEBUG             1               /* Enable debug output */
79 #define YYERROR_VERBOSE     1               /* Verbose error messages */
80
81 /* Define YYMALLOC/YYFREE to prevent redefinition errors  */
82
83 #define YYMALLOC            malloc
84 #define YYFREE              free
85
86 /*
87  * The windows version of bison defines this incorrectly as "32768" (Not negative).
88  * We use a custom (edited binary) version of bison that defines YYFLAG as YYFBAD
89  * instead (#define YYFBAD 32768), so we can define it correctly here.
90  *
91  * The problem is that if YYFLAG is positive, the extended syntax error messages
92  * are disabled.
93  */
94 #define YYFLAG              -32768
95
96 %}
97
98 /*
99  * Declare the type of values in the grammar
100  */
101 %union {
102     UINT64              i;
103     char                *s;
104     ACPI_PARSE_OBJECT   *n;
105 }
106
107 /*! [Begin] no source code translation */
108
109 /*
110  * These shift/reduce conflicts are expected. There should be zero
111  * reduce/reduce conflicts.
112  */
113 %expect 86
114
115 /******************************************************************************
116  *
117  * Token types: These are returned by the lexer
118  *
119  * NOTE: This list MUST match the AslKeywordMapping table found
120  *       in aslmap.c EXACTLY!  Double check any changes!
121  *
122  *****************************************************************************/
123
124 %token <i> PARSEOP_ACCESSAS
125 %token <i> PARSEOP_ACCESSATTRIB_BLOCK
126 %token <i> PARSEOP_ACCESSATTRIB_BLOCK_CALL
127 %token <i> PARSEOP_ACCESSATTRIB_BYTE
128 %token <i> PARSEOP_ACCESSATTRIB_MULTIBYTE
129 %token <i> PARSEOP_ACCESSATTRIB_QUICK
130 %token <i> PARSEOP_ACCESSATTRIB_RAW_BYTES
131 %token <i> PARSEOP_ACCESSATTRIB_RAW_PROCESS
132 %token <i> PARSEOP_ACCESSATTRIB_SND_RCV
133 %token <i> PARSEOP_ACCESSATTRIB_WORD
134 %token <i> PARSEOP_ACCESSATTRIB_WORD_CALL
135 %token <i> PARSEOP_ACCESSTYPE_ANY
136 %token <i> PARSEOP_ACCESSTYPE_BUF
137 %token <i> PARSEOP_ACCESSTYPE_BYTE
138 %token <i> PARSEOP_ACCESSTYPE_DWORD
139 %token <i> PARSEOP_ACCESSTYPE_QWORD
140 %token <i> PARSEOP_ACCESSTYPE_WORD
141 %token <i> PARSEOP_ACQUIRE
142 %token <i> PARSEOP_ADD
143 %token <i> PARSEOP_ADDRESSINGMODE_7BIT
144 %token <i> PARSEOP_ADDRESSINGMODE_10BIT
145 %token <i> PARSEOP_ADDRESSTYPE_ACPI
146 %token <i> PARSEOP_ADDRESSTYPE_MEMORY
147 %token <i> PARSEOP_ADDRESSTYPE_NVS
148 %token <i> PARSEOP_ADDRESSTYPE_RESERVED
149 %token <i> PARSEOP_ALIAS
150 %token <i> PARSEOP_AND
151 %token <i> PARSEOP_ARG0
152 %token <i> PARSEOP_ARG1
153 %token <i> PARSEOP_ARG2
154 %token <i> PARSEOP_ARG3
155 %token <i> PARSEOP_ARG4
156 %token <i> PARSEOP_ARG5
157 %token <i> PARSEOP_ARG6
158 %token <i> PARSEOP_BANKFIELD
159 %token <i> PARSEOP_BITSPERBYTE_EIGHT
160 %token <i> PARSEOP_BITSPERBYTE_FIVE
161 %token <i> PARSEOP_BITSPERBYTE_NINE
162 %token <i> PARSEOP_BITSPERBYTE_SEVEN
163 %token <i> PARSEOP_BITSPERBYTE_SIX
164 %token <i> PARSEOP_BREAK
165 %token <i> PARSEOP_BREAKPOINT
166 %token <i> PARSEOP_BUFFER
167 %token <i> PARSEOP_BUSMASTERTYPE_MASTER
168 %token <i> PARSEOP_BUSMASTERTYPE_NOTMASTER
169 %token <i> PARSEOP_BYTECONST
170 %token <i> PARSEOP_CASE
171 %token <i> PARSEOP_CLOCKPHASE_FIRST
172 %token <i> PARSEOP_CLOCKPHASE_SECOND
173 %token <i> PARSEOP_CLOCKPOLARITY_HIGH
174 %token <i> PARSEOP_CLOCKPOLARITY_LOW
175 %token <i> PARSEOP_CONCATENATE
176 %token <i> PARSEOP_CONCATENATERESTEMPLATE
177 %token <i> PARSEOP_CONDREFOF
178 %token <i> PARSEOP_CONNECTION
179 %token <i> PARSEOP_CONTINUE
180 %token <i> PARSEOP_COPYOBJECT
181 %token <i> PARSEOP_CREATEBITFIELD
182 %token <i> PARSEOP_CREATEBYTEFIELD
183 %token <i> PARSEOP_CREATEDWORDFIELD
184 %token <i> PARSEOP_CREATEFIELD
185 %token <i> PARSEOP_CREATEQWORDFIELD
186 %token <i> PARSEOP_CREATEWORDFIELD
187 %token <i> PARSEOP_DATABUFFER
188 %token <i> PARSEOP_DATATABLEREGION
189 %token <i> PARSEOP_DEBUG
190 %token <i> PARSEOP_DECODETYPE_POS
191 %token <i> PARSEOP_DECODETYPE_SUB
192 %token <i> PARSEOP_DECREMENT
193 %token <i> PARSEOP_DEFAULT
194 %token <i> PARSEOP_DEFAULT_ARG
195 %token <i> PARSEOP_DEFINITIONBLOCK
196 %token <i> PARSEOP_DEREFOF
197 %token <i> PARSEOP_DEVICE
198 %token <i> PARSEOP_DEVICEPOLARITY_HIGH
199 %token <i> PARSEOP_DEVICEPOLARITY_LOW
200 %token <i> PARSEOP_DIVIDE
201 %token <i> PARSEOP_DMA
202 %token <i> PARSEOP_DMATYPE_A
203 %token <i> PARSEOP_DMATYPE_COMPATIBILITY
204 %token <i> PARSEOP_DMATYPE_B
205 %token <i> PARSEOP_DMATYPE_F
206 %token <i> PARSEOP_DWORDCONST
207 %token <i> PARSEOP_DWORDIO
208 %token <i> PARSEOP_DWORDMEMORY
209 %token <i> PARSEOP_DWORDSPACE
210 %token <i> PARSEOP_EISAID
211 %token <i> PARSEOP_ELSE
212 %token <i> PARSEOP_ELSEIF
213 %token <i> PARSEOP_ENDDEPENDENTFN
214 %token <i> PARSEOP_ENDIAN_BIG
215 %token <i> PARSEOP_ENDIAN_LITTLE
216 %token <i> PARSEOP_ENDTAG
217 %token <i> PARSEOP_ERRORNODE
218 %token <i> PARSEOP_EVENT
219 %token <i> PARSEOP_EXTENDEDIO
220 %token <i> PARSEOP_EXTENDEDMEMORY
221 %token <i> PARSEOP_EXTENDEDSPACE
222 %token <i> PARSEOP_EXTERNAL
223 %token <i> PARSEOP_FATAL
224 %token <i> PARSEOP_FIELD
225 %token <i> PARSEOP_FINDSETLEFTBIT
226 %token <i> PARSEOP_FINDSETRIGHTBIT
227 %token <i> PARSEOP_FIXEDDMA
228 %token <i> PARSEOP_FIXEDIO
229 %token <i> PARSEOP_FLOWCONTROL_HW
230 %token <i> PARSEOP_FLOWCONTROL_NONE
231 %token <i> PARSEOP_FLOWCONTROL_SW
232 %token <i> PARSEOP_FROMBCD
233 %token <i> PARSEOP_FUNCTION
234 %token <i> PARSEOP_GPIO_INT
235 %token <i> PARSEOP_GPIO_IO
236 %token <i> PARSEOP_I2C_SERIALBUS
237 %token <i> PARSEOP_IF
238 %token <i> PARSEOP_INCLUDE
239 %token <i> PARSEOP_INCLUDE_END
240 %token <i> PARSEOP_INCREMENT
241 %token <i> PARSEOP_INDEX
242 %token <i> PARSEOP_INDEXFIELD
243 %token <i> PARSEOP_INTEGER
244 %token <i> PARSEOP_INTERRUPT
245 %token <i> PARSEOP_INTLEVEL_ACTIVEBOTH
246 %token <i> PARSEOP_INTLEVEL_ACTIVEHIGH
247 %token <i> PARSEOP_INTLEVEL_ACTIVELOW
248 %token <i> PARSEOP_INTTYPE_EDGE
249 %token <i> PARSEOP_INTTYPE_LEVEL
250 %token <i> PARSEOP_IO
251 %token <i> PARSEOP_IODECODETYPE_10
252 %token <i> PARSEOP_IODECODETYPE_16
253 %token <i> PARSEOP_IORESTRICT_IN
254 %token <i> PARSEOP_IORESTRICT_NONE
255 %token <i> PARSEOP_IORESTRICT_OUT
256 %token <i> PARSEOP_IORESTRICT_PRESERVE
257 %token <i> PARSEOP_IRQ
258 %token <i> PARSEOP_IRQNOFLAGS
259 %token <i> PARSEOP_LAND
260 %token <i> PARSEOP_LEQUAL
261 %token <i> PARSEOP_LGREATER
262 %token <i> PARSEOP_LGREATEREQUAL
263 %token <i> PARSEOP_LLESS
264 %token <i> PARSEOP_LLESSEQUAL
265 %token <i> PARSEOP_LNOT
266 %token <i> PARSEOP_LNOTEQUAL
267 %token <i> PARSEOP_LOAD
268 %token <i> PARSEOP_LOADTABLE
269 %token <i> PARSEOP_LOCAL0
270 %token <i> PARSEOP_LOCAL1
271 %token <i> PARSEOP_LOCAL2
272 %token <i> PARSEOP_LOCAL3
273 %token <i> PARSEOP_LOCAL4
274 %token <i> PARSEOP_LOCAL5
275 %token <i> PARSEOP_LOCAL6
276 %token <i> PARSEOP_LOCAL7
277 %token <i> PARSEOP_LOCKRULE_LOCK
278 %token <i> PARSEOP_LOCKRULE_NOLOCK
279 %token <i> PARSEOP_LOR
280 %token <i> PARSEOP_MATCH
281 %token <i> PARSEOP_MATCHTYPE_MEQ
282 %token <i> PARSEOP_MATCHTYPE_MGE
283 %token <i> PARSEOP_MATCHTYPE_MGT
284 %token <i> PARSEOP_MATCHTYPE_MLE
285 %token <i> PARSEOP_MATCHTYPE_MLT
286 %token <i> PARSEOP_MATCHTYPE_MTR
287 %token <i> PARSEOP_MAXTYPE_FIXED
288 %token <i> PARSEOP_MAXTYPE_NOTFIXED
289 %token <i> PARSEOP_MEMORY24
290 %token <i> PARSEOP_MEMORY32
291 %token <i> PARSEOP_MEMORY32FIXED
292 %token <i> PARSEOP_MEMTYPE_CACHEABLE
293 %token <i> PARSEOP_MEMTYPE_NONCACHEABLE
294 %token <i> PARSEOP_MEMTYPE_PREFETCHABLE
295 %token <i> PARSEOP_MEMTYPE_WRITECOMBINING
296 %token <i> PARSEOP_METHOD
297 %token <i> PARSEOP_METHODCALL
298 %token <i> PARSEOP_MID
299 %token <i> PARSEOP_MINTYPE_FIXED
300 %token <i> PARSEOP_MINTYPE_NOTFIXED
301 %token <i> PARSEOP_MOD
302 %token <i> PARSEOP_MULTIPLY
303 %token <i> PARSEOP_MUTEX
304 %token <i> PARSEOP_NAME
305 %token <s> PARSEOP_NAMESEG
306 %token <s> PARSEOP_NAMESTRING
307 %token <i> PARSEOP_NAND
308 %token <i> PARSEOP_NOOP
309 %token <i> PARSEOP_NOR
310 %token <i> PARSEOP_NOT
311 %token <i> PARSEOP_NOTIFY
312 %token <i> PARSEOP_OBJECTTYPE
313 %token <i> PARSEOP_OBJECTTYPE_BFF
314 %token <i> PARSEOP_OBJECTTYPE_BUF
315 %token <i> PARSEOP_OBJECTTYPE_DDB
316 %token <i> PARSEOP_OBJECTTYPE_DEV
317 %token <i> PARSEOP_OBJECTTYPE_EVT
318 %token <i> PARSEOP_OBJECTTYPE_FLD
319 %token <i> PARSEOP_OBJECTTYPE_INT
320 %token <i> PARSEOP_OBJECTTYPE_MTH
321 %token <i> PARSEOP_OBJECTTYPE_MTX
322 %token <i> PARSEOP_OBJECTTYPE_OPR
323 %token <i> PARSEOP_OBJECTTYPE_PKG
324 %token <i> PARSEOP_OBJECTTYPE_POW
325 %token <i> PARSEOP_OBJECTTYPE_PRO
326 %token <i> PARSEOP_OBJECTTYPE_STR
327 %token <i> PARSEOP_OBJECTTYPE_THZ
328 %token <i> PARSEOP_OBJECTTYPE_UNK
329 %token <i> PARSEOP_OFFSET
330 %token <i> PARSEOP_ONE
331 %token <i> PARSEOP_ONES
332 %token <i> PARSEOP_OPERATIONREGION
333 %token <i> PARSEOP_OR
334 %token <i> PARSEOP_PACKAGE
335 %token <i> PARSEOP_PACKAGE_LENGTH
336 %token <i> PARSEOP_PARITYTYPE_EVEN
337 %token <i> PARSEOP_PARITYTYPE_MARK
338 %token <i> PARSEOP_PARITYTYPE_NONE
339 %token <i> PARSEOP_PARITYTYPE_ODD
340 %token <i> PARSEOP_PARITYTYPE_SPACE
341 %token <i> PARSEOP_PIN_NOPULL
342 %token <i> PARSEOP_PIN_PULLDEFAULT
343 %token <i> PARSEOP_PIN_PULLDOWN
344 %token <i> PARSEOP_PIN_PULLUP
345 %token <i> PARSEOP_POWERRESOURCE
346 %token <i> PARSEOP_PROCESSOR
347 %token <i> PARSEOP_QWORDCONST
348 %token <i> PARSEOP_QWORDIO
349 %token <i> PARSEOP_QWORDMEMORY
350 %token <i> PARSEOP_QWORDSPACE
351 %token <i> PARSEOP_RANGETYPE_ENTIRE
352 %token <i> PARSEOP_RANGETYPE_ISAONLY
353 %token <i> PARSEOP_RANGETYPE_NONISAONLY
354 %token <i> PARSEOP_RAW_DATA
355 %token <i> PARSEOP_READWRITETYPE_BOTH
356 %token <i> PARSEOP_READWRITETYPE_READONLY
357 %token <i> PARSEOP_REFOF
358 %token <i> PARSEOP_REGIONSPACE_CMOS
359 %token <i> PARSEOP_REGIONSPACE_EC
360 %token <i> PARSEOP_REGIONSPACE_FFIXEDHW
361 %token <i> PARSEOP_REGIONSPACE_GPIO
362 %token <i> PARSEOP_REGIONSPACE_GSBUS
363 %token <i> PARSEOP_REGIONSPACE_IO
364 %token <i> PARSEOP_REGIONSPACE_IPMI
365 %token <i> PARSEOP_REGIONSPACE_MEM
366 %token <i> PARSEOP_REGIONSPACE_PCI
367 %token <i> PARSEOP_REGIONSPACE_PCIBAR
368 %token <i> PARSEOP_REGIONSPACE_SMBUS
369 %token <i> PARSEOP_REGISTER
370 %token <i> PARSEOP_RELEASE
371 %token <i> PARSEOP_RESERVED_BYTES
372 %token <i> PARSEOP_RESET
373 %token <i> PARSEOP_RESOURCETEMPLATE
374 %token <i> PARSEOP_RESOURCETYPE_CONSUMER
375 %token <i> PARSEOP_RESOURCETYPE_PRODUCER
376 %token <i> PARSEOP_RETURN
377 %token <i> PARSEOP_REVISION
378 %token <i> PARSEOP_SCOPE
379 %token <i> PARSEOP_SERIALIZERULE_NOTSERIAL
380 %token <i> PARSEOP_SERIALIZERULE_SERIAL
381 %token <i> PARSEOP_SHARETYPE_EXCLUSIVE
382 %token <i> PARSEOP_SHARETYPE_EXCLUSIVEWAKE
383 %token <i> PARSEOP_SHARETYPE_SHARED
384 %token <i> PARSEOP_SHARETYPE_SHAREDWAKE
385 %token <i> PARSEOP_SHIFTLEFT
386 %token <i> PARSEOP_SHIFTRIGHT
387 %token <i> PARSEOP_SIGNAL
388 %token <i> PARSEOP_SIZEOF
389 %token <i> PARSEOP_SLAVEMODE_CONTROLLERINIT
390 %token <i> PARSEOP_SLAVEMODE_DEVICEINIT
391 %token <i> PARSEOP_SLEEP
392 %token <i> PARSEOP_SPI_SERIALBUS
393 %token <i> PARSEOP_STALL
394 %token <i> PARSEOP_STARTDEPENDENTFN
395 %token <i> PARSEOP_STARTDEPENDENTFN_NOPRI
396 %token <i> PARSEOP_STOPBITS_ONE
397 %token <i> PARSEOP_STOPBITS_ONEPLUSHALF
398 %token <i> PARSEOP_STOPBITS_TWO
399 %token <i> PARSEOP_STOPBITS_ZERO
400 %token <i> PARSEOP_STORE
401 %token <s> PARSEOP_STRING_LITERAL
402 %token <i> PARSEOP_SUBTRACT
403 %token <i> PARSEOP_SWITCH
404 %token <i> PARSEOP_THERMALZONE
405 %token <i> PARSEOP_TIMER
406 %token <i> PARSEOP_TOBCD
407 %token <i> PARSEOP_TOBUFFER
408 %token <i> PARSEOP_TODECIMALSTRING
409 %token <i> PARSEOP_TOHEXSTRING
410 %token <i> PARSEOP_TOINTEGER
411 %token <i> PARSEOP_TOSTRING
412 %token <i> PARSEOP_TOUUID
413 %token <i> PARSEOP_TRANSLATIONTYPE_DENSE
414 %token <i> PARSEOP_TRANSLATIONTYPE_SPARSE
415 %token <i> PARSEOP_TYPE_STATIC
416 %token <i> PARSEOP_TYPE_TRANSLATION
417 %token <i> PARSEOP_UART_SERIALBUS
418 %token <i> PARSEOP_UNICODE
419 %token <i> PARSEOP_UNLOAD
420 %token <i> PARSEOP_UPDATERULE_ONES
421 %token <i> PARSEOP_UPDATERULE_PRESERVE
422 %token <i> PARSEOP_UPDATERULE_ZEROS
423 %token <i> PARSEOP_VAR_PACKAGE
424 %token <i> PARSEOP_VENDORLONG
425 %token <i> PARSEOP_VENDORSHORT
426 %token <i> PARSEOP_WAIT
427 %token <i> PARSEOP_WHILE
428 %token <i> PARSEOP_WIREMODE_FOUR
429 %token <i> PARSEOP_WIREMODE_THREE
430 %token <i> PARSEOP_WORDBUSNUMBER
431 %token <i> PARSEOP_WORDCONST
432 %token <i> PARSEOP_WORDIO
433 %token <i> PARSEOP_WORDSPACE
434 %token <i> PARSEOP_XFERSIZE_8
435 %token <i> PARSEOP_XFERSIZE_16
436 %token <i> PARSEOP_XFERSIZE_32
437 %token <i> PARSEOP_XFERSIZE_64
438 %token <i> PARSEOP_XFERSIZE_128
439 %token <i> PARSEOP_XFERSIZE_256
440 %token <i> PARSEOP_XFERTYPE_8
441 %token <i> PARSEOP_XFERTYPE_8_16
442 %token <i> PARSEOP_XFERTYPE_16
443 %token <i> PARSEOP_XOR
444 %token <i> PARSEOP_ZERO
445
446 /*
447  * Special functions. These should probably stay at the end of this
448  * table.
449  */
450 %token <i> PARSEOP___DATE__
451 %token <i> PARSEOP___FILE__
452 %token <i> PARSEOP___LINE__
453 %token <i> PARSEOP___PATH__
454
455
456 /******************************************************************************
457  *
458  * Production names
459  *
460  *****************************************************************************/
461
462 %type <n> ArgList
463 %type <n> ASLCode
464 %type <n> BufferData
465 %type <n> BufferTermData
466 %type <n> CompilerDirective
467 %type <n> DataObject
468 %type <n> DefinitionBlockTerm
469 %type <n> IntegerData
470 %type <n> NamedObject
471 %type <n> NameSpaceModifier
472 %type <n> Object
473 %type <n> ObjectList
474 %type <n> PackageData
475 %type <n> ParameterTypePackage
476 %type <n> ParameterTypePackageList
477 %type <n> ParameterTypesPackage
478 %type <n> ParameterTypesPackageList
479 %type <n> RequiredTarget
480 %type <n> SimpleTarget
481 %type <n> StringData
482 %type <n> Target
483 %type <n> Term
484 %type <n> TermArg
485 %type <n> TermList
486 %type <n> UserTerm
487
488 /* Type4Opcode is obsolete */
489
490 %type <n> Type1Opcode
491 %type <n> Type2BufferOpcode
492 %type <n> Type2BufferOrStringOpcode
493 %type <n> Type2IntegerOpcode
494 %type <n> Type2Opcode
495 %type <n> Type2StringOpcode
496 %type <n> Type3Opcode
497 %type <n> Type5Opcode
498 %type <n> Type6Opcode
499
500 %type <n> AccessAsTerm
501 %type <n> ExternalTerm
502 %type <n> FieldUnit
503 %type <n> FieldUnitEntry
504 %type <n> FieldUnitList
505 %type <n> IncludeTerm
506 %type <n> OffsetTerm
507 %type <n> OptionalAccessAttribTerm
508
509 /* Named Objects */
510
511 %type <n> BankFieldTerm
512 %type <n> CreateBitFieldTerm
513 %type <n> CreateByteFieldTerm
514 %type <n> CreateDWordFieldTerm
515 %type <n> CreateFieldTerm
516 %type <n> CreateQWordFieldTerm
517 %type <n> CreateWordFieldTerm
518 %type <n> DataRegionTerm
519 %type <n> DeviceTerm
520 %type <n> EventTerm
521 %type <n> FieldTerm
522 %type <n> FunctionTerm
523 %type <n> IndexFieldTerm
524 %type <n> MethodTerm
525 %type <n> MutexTerm
526 %type <n> OpRegionTerm
527 %type <n> OpRegionSpaceIdTerm
528 %type <n> PowerResTerm
529 %type <n> ProcessorTerm
530 %type <n> ThermalZoneTerm
531
532 /* Namespace modifiers */
533
534 %type <n> AliasTerm
535 %type <n> NameTerm
536 %type <n> ScopeTerm
537
538 /* Type 1 opcodes */
539
540 %type <n> BreakPointTerm
541 %type <n> BreakTerm
542 %type <n> CaseDefaultTermList
543 %type <n> CaseTerm
544 %type <n> ContinueTerm
545 %type <n> DefaultTerm
546 %type <n> ElseTerm
547 %type <n> FatalTerm
548 %type <n> IfElseTerm
549 %type <n> IfTerm
550 %type <n> LoadTerm
551 %type <n> NoOpTerm
552 %type <n> NotifyTerm
553 %type <n> ReleaseTerm
554 %type <n> ResetTerm
555 %type <n> ReturnTerm
556 %type <n> SignalTerm
557 %type <n> SleepTerm
558 %type <n> StallTerm
559 %type <n> SwitchTerm
560 %type <n> UnloadTerm
561 %type <n> WhileTerm
562 //%type <n> CaseTermList
563
564 /* Type 2 opcodes */
565
566 %type <n> AcquireTerm
567 %type <n> AddTerm
568 %type <n> AndTerm
569 %type <n> ConcatResTerm
570 %type <n> ConcatTerm
571 %type <n> CondRefOfTerm
572 %type <n> CopyObjectTerm
573 %type <n> DecTerm
574 %type <n> DerefOfTerm
575 %type <n> DivideTerm
576 %type <n> FindSetLeftBitTerm
577 %type <n> FindSetRightBitTerm
578 %type <n> FromBCDTerm
579 %type <n> IncTerm
580 %type <n> IndexTerm
581 %type <n> LAndTerm
582 %type <n> LEqualTerm
583 %type <n> LGreaterEqualTerm
584 %type <n> LGreaterTerm
585 %type <n> LLessEqualTerm
586 %type <n> LLessTerm
587 %type <n> LNotEqualTerm
588 %type <n> LNotTerm
589 %type <n> LoadTableTerm
590 %type <n> LOrTerm
591 %type <n> MatchTerm
592 %type <n> MidTerm
593 %type <n> ModTerm
594 %type <n> MultiplyTerm
595 %type <n> NAndTerm
596 %type <n> NOrTerm
597 %type <n> NotTerm
598 %type <n> ObjectTypeTerm
599 %type <n> OrTerm
600 %type <n> RefOfTerm
601 %type <n> ShiftLeftTerm
602 %type <n> ShiftRightTerm
603 %type <n> SizeOfTerm
604 %type <n> StoreTerm
605 %type <n> SubtractTerm
606 %type <n> TimerTerm
607 %type <n> ToBCDTerm
608 %type <n> ToBufferTerm
609 %type <n> ToDecimalStringTerm
610 %type <n> ToHexStringTerm
611 %type <n> ToIntegerTerm
612 %type <n> ToStringTerm
613 %type <n> WaitTerm
614 %type <n> XOrTerm
615
616 /* Keywords */
617
618 %type <n> AccessAttribKeyword
619 %type <n> AccessTypeKeyword
620 %type <n> AddressingModeKeyword
621 %type <n> AddressKeyword
622 %type <n> AddressSpaceKeyword
623 %type <n> BitsPerByteKeyword
624 %type <n> ClockPhaseKeyword
625 %type <n> ClockPolarityKeyword
626 %type <n> DecodeKeyword
627 %type <n> DevicePolarityKeyword
628 %type <n> DMATypeKeyword
629 %type <n> EndianKeyword
630 %type <n> FlowControlKeyword
631 %type <n> InterruptLevel
632 %type <n> InterruptTypeKeyword
633 %type <n> IODecodeKeyword
634 %type <n> IoRestrictionKeyword
635 %type <n> LockRuleKeyword
636 %type <n> MatchOpKeyword
637 %type <n> MaxKeyword
638 %type <n> MemTypeKeyword
639 %type <n> MinKeyword
640 %type <n> ObjectTypeKeyword
641 %type <n> OptionalBusMasterKeyword
642 %type <n> OptionalReadWriteKeyword
643 %type <n> ParityTypeKeyword
644 %type <n> PinConfigByte
645 %type <n> PinConfigKeyword
646 %type <n> RangeTypeKeyword
647 %type <n> RegionSpaceKeyword
648 %type <n> ResourceTypeKeyword
649 %type <n> SerializeRuleKeyword
650 %type <n> ShareTypeKeyword
651 %type <n> SlaveModeKeyword
652 %type <n> StopBitsKeyword
653 %type <n> TranslationKeyword
654 %type <n> TypeKeyword
655 %type <n> UpdateRuleKeyword
656 %type <n> WireModeKeyword
657 %type <n> XferSizeKeyword
658 %type <n> XferTypeKeyword
659
660 /* Types */
661
662 %type <n> SuperName
663 %type <n> ArgTerm
664 %type <n> LocalTerm
665 %type <n> DebugTerm
666
667 %type <n> Integer
668 %type <n> ByteConst
669 %type <n> WordConst
670 %type <n> DWordConst
671 %type <n> QWordConst
672 %type <n> String
673
674 %type <n> ConstTerm
675 %type <n> ConstExprTerm
676 %type <n> ByteConstExpr
677 %type <n> WordConstExpr
678 %type <n> DWordConstExpr
679 %type <n> QWordConstExpr
680
681 %type <n> DWordList
682 %type <n> BufferTerm
683 %type <n> ByteList
684
685 %type <n> PackageElement
686 %type <n> PackageList
687 %type <n> PackageTerm
688 %type <n> VarPackageLengthTerm
689
690 /* Macros */
691
692 %type <n> EISAIDTerm
693 %type <n> ResourceMacroList
694 %type <n> ResourceMacroTerm
695 %type <n> ResourceTemplateTerm
696 %type <n> ToUUIDTerm
697 %type <n> UnicodeTerm
698
699 /* Resource Descriptors */
700
701 %type <n> ConnectionTerm
702 %type <n> DataBufferTerm
703 %type <n> DMATerm
704 %type <n> DWordIOTerm
705 %type <n> DWordMemoryTerm
706 %type <n> DWordSpaceTerm
707 %type <n> EndDependentFnTerm
708 %type <n> ExtendedIOTerm
709 %type <n> ExtendedMemoryTerm
710 %type <n> ExtendedSpaceTerm
711 %type <n> FixedDmaTerm
712 %type <n> FixedIOTerm
713 %type <n> GpioIntTerm
714 %type <n> GpioIoTerm
715 %type <n> I2cSerialBusTerm
716 %type <n> InterruptTerm
717 %type <n> IOTerm
718 %type <n> IRQNoFlagsTerm
719 %type <n> IRQTerm
720 %type <n> Memory24Term
721 %type <n> Memory32FixedTerm
722 %type <n> Memory32Term
723 %type <n> NameSeg
724 %type <n> NameString
725 %type <n> QWordIOTerm
726 %type <n> QWordMemoryTerm
727 %type <n> QWordSpaceTerm
728 %type <n> RegisterTerm
729 %type <n> SpiSerialBusTerm
730 %type <n> StartDependentFnNoPriTerm
731 %type <n> StartDependentFnTerm
732 %type <n> UartSerialBusTerm
733 %type <n> VendorLongTerm
734 %type <n> VendorShortTerm
735 %type <n> WordBusNumberTerm
736 %type <n> WordIOTerm
737 %type <n> WordSpaceTerm
738
739 /* Local types that help construct the AML, not in ACPI spec */
740
741 %type <n> AmlPackageLengthTerm
742 %type <n> IncludeEndTerm
743 %type <n> NameStringItem
744 %type <n> TermArgItem
745
746 %type <n> OptionalAccessSize
747 %type <n> OptionalAddressingMode
748 %type <n> OptionalAddressRange
749 %type <n> OptionalBitsPerByte
750 %type <n> OptionalBuffer_Last
751 %type <n> OptionalByteConstExpr
752 %type <n> OptionalCount
753 %type <n> OptionalDecodeType
754 %type <n> OptionalDevicePolarity
755 %type <n> OptionalDWordConstExpr
756 %type <n> OptionalEndian
757 %type <n> OptionalFlowControl
758 %type <n> OptionalIoRestriction
759 %type <n> OptionalListString
760 %type <n> OptionalMaxType
761 %type <n> OptionalMemType
762 %type <n> OptionalMinType
763 %type <n> OptionalNameString
764 %type <n> OptionalNameString_First
765 %type <n> OptionalNameString_Last
766 %type <n> OptionalObjectTypeKeyword
767 %type <n> OptionalParameterTypePackage
768 %type <n> OptionalParameterTypesPackage
769 %type <n> OptionalParityType
770 %type <n> OptionalQWordConstExpr
771 %type <n> OptionalRangeType
772 %type <n> OptionalReference
773 %type <n> OptionalResourceType
774 %type <n> OptionalResourceType_First
775 %type <n> OptionalReturnArg
776 %type <n> OptionalSerializeRuleKeyword
777 %type <n> OptionalShareType
778 %type <n> OptionalShareType_First
779 %type <n> OptionalSlaveMode
780 %type <n> OptionalStopBits
781 %type <n> OptionalStringData
782 %type <n> OptionalTermArg
783 %type <n> OptionalTranslationType_Last
784 %type <n> OptionalType
785 %type <n> OptionalType_Last
786 %type <n> OptionalWireMode
787 %type <n> OptionalWordConst
788 %type <n> OptionalWordConstExpr
789 %type <n> OptionalXferSize
790
791 %%
792 /*******************************************************************************
793  *
794  * Production rules start here
795  *
796  ******************************************************************************/
797
798 /*
799  * ASL Names
800  */
801
802
803 /*
804  * Root rule. Allow multiple #line directives before the definition block
805  * to handle output from preprocessors
806  */
807 ASLCode
808     : DefinitionBlockTerm
809     | error                         {YYABORT; $$ = NULL;}
810     ;
811
812 /*
813  * Blocks, Data, and Opcodes
814  */
815
816 /*
817  * Note concerning support for "module-level code".
818  *
819  * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
820  * methods (the so-called module-level code.) This support was explicitly
821  * removed in ACPI 2.0, but this type of code continues to be created by
822  * BIOS vendors. In order to support the disassembly and recompilation of
823  * such code (and the porting of ASL code to iASL), iASL supports this
824  * code in violation of the current ACPI specification.
825  *
826  * The grammar change to support module-level code is to revert the
827  * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
828  * original use of {TermList} instead (see below.) This allows the use
829  * of Type1 and Type2 opcodes at module level.
830  */
831 DefinitionBlockTerm
832     : PARSEOP_DEFINITIONBLOCK '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITIONBLOCK);}
833         String ','
834         String ','
835         ByteConst ','
836         String ','
837         String ','
838         DWordConst
839         ')'                         {TrSetEndLineNumber ($<n>3);}
840             '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
841     ;
842
843 /* ACPI 3.0 -- allow semicolons between terms */
844
845 TermList
846     :                               {$$ = NULL;}
847     | TermList Term                 {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
848     | TermList Term ';'             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
849     | TermList ';' Term             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
850     | TermList ';' Term ';'         {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
851     ;
852
853 Term
854     : Object                        {}
855     | Type1Opcode                   {}
856     | Type2Opcode                   {}
857     | Type2IntegerOpcode            {}
858     | Type2StringOpcode             {}
859     | Type2BufferOpcode             {}
860     | Type2BufferOrStringOpcode     {}
861     | error                         {$$ = AslDoError(); yyclearin;}
862     ;
863
864 CompilerDirective
865     : IncludeTerm                   {}
866     | ExternalTerm                  {}
867     ;
868
869 ObjectList
870     :                               {$$ = NULL;}
871     | ObjectList Object             {$$ = TrLinkPeerNode ($1,$2);}
872     | error                         {$$ = AslDoError(); yyclearin;}
873     ;
874
875 Object
876     : CompilerDirective             {}
877     | NamedObject                   {}
878     | NameSpaceModifier             {}
879     ;
880
881 DataObject
882     : BufferData                    {}
883     | PackageData                   {}
884     | IntegerData                   {}
885     | StringData                    {}
886     ;
887
888 BufferData
889     : Type5Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
890     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
891     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
892     | BufferTerm                    {}
893     ;
894
895 PackageData
896     : PackageTerm                   {}
897     ;
898
899 IntegerData
900     : Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
901     | Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
902     | Integer                       {}
903     | ConstTerm                     {}
904     ;
905
906 StringData
907     : Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
908     | String                        {}
909     ;
910
911 NamedObject
912     : BankFieldTerm                 {}
913     | CreateBitFieldTerm            {}
914     | CreateByteFieldTerm           {}
915     | CreateDWordFieldTerm          {}
916     | CreateFieldTerm               {}
917     | CreateQWordFieldTerm          {}
918     | CreateWordFieldTerm           {}
919     | DataRegionTerm                {}
920     | DeviceTerm                    {}
921     | EventTerm                     {}
922     | FieldTerm                     {}
923     | FunctionTerm                  {}
924     | IndexFieldTerm                {}
925     | MethodTerm                    {}
926     | MutexTerm                     {}
927     | OpRegionTerm                  {}
928     | PowerResTerm                  {}
929     | ProcessorTerm                 {}
930     | ThermalZoneTerm               {}
931     ;
932
933 NameSpaceModifier
934     : AliasTerm                     {}
935     | NameTerm                      {}
936     | ScopeTerm                     {}
937     ;
938
939 UserTerm
940     : NameString '('                {TrUpdateNode (PARSEOP_METHODCALL, $1);}
941         ArgList ')'                 {$$ = TrLinkChildNode ($1,$4);}
942     ;
943
944 ArgList
945     :                               {$$ = NULL;}
946     | TermArg
947     | ArgList ','                   /* Allows a trailing comma at list end */
948     | ArgList ','
949         TermArg                     {$$ = TrLinkPeerNode ($1,$3);}
950     ;
951
952 /*
953 Removed from TermArg due to reduce/reduce conflicts
954     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
955     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
956     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
957     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
958
959 */
960
961 TermArg
962     : Type2Opcode                   {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
963     | DataObject                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
964     | NameString                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
965     | ArgTerm                       {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
966     | LocalTerm                     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
967     ;
968
969 Target
970     :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_TARGET | NODE_COMPILE_TIME_CONST);} /* Placeholder is a ZeroOp object */
971     | ','                           {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_TARGET | NODE_COMPILE_TIME_CONST);} /* Placeholder is a ZeroOp object */
972     | ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
973     ;
974
975 RequiredTarget
976     : ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
977     ;
978
979 SimpleTarget
980     : NameString                    {}
981     | LocalTerm                     {}
982     | ArgTerm                       {}
983     ;
984
985 /* Rules for specifying the type of one method argument or return value */
986
987 ParameterTypePackage
988     :                               {$$ = NULL;}
989     | ObjectTypeKeyword             {$$ = $1;}
990     | ParameterTypePackage ','
991         ObjectTypeKeyword           {$$ = TrLinkPeerNodes (2,$1,$3);}
992     ;
993
994 ParameterTypePackageList
995     :                               {$$ = NULL;}
996     | ObjectTypeKeyword             {$$ = $1;}
997     | '{' ParameterTypePackage '}'  {$$ = $2;}
998     ;
999
1000 OptionalParameterTypePackage
1001     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
1002     | ',' ParameterTypePackageList  {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
1003     ;
1004
1005 /* Rules for specifying the types for method arguments */
1006
1007 ParameterTypesPackage
1008     : ParameterTypePackageList      {$$ = $1;}
1009     | ParameterTypesPackage ','
1010         ParameterTypePackageList    {$$ = TrLinkPeerNodes (2,$1,$3);}
1011     ;
1012
1013 ParameterTypesPackageList
1014     :                               {$$ = NULL;}
1015     | ObjectTypeKeyword             {$$ = $1;}
1016     | '{' ParameterTypesPackage '}' {$$ = $2;}
1017     ;
1018
1019 OptionalParameterTypesPackage
1020     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
1021     | ',' ParameterTypesPackageList {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
1022     ;
1023
1024
1025 /* Opcode types */
1026
1027 Type1Opcode
1028     : BreakTerm                     {}
1029     | BreakPointTerm                {}
1030     | ContinueTerm                  {}
1031     | FatalTerm                     {}
1032     | IfElseTerm                    {}
1033     | LoadTerm                      {}
1034     | NoOpTerm                      {}
1035     | NotifyTerm                    {}
1036     | ReleaseTerm                   {}
1037     | ResetTerm                     {}
1038     | ReturnTerm                    {}
1039     | SignalTerm                    {}
1040     | SleepTerm                     {}
1041     | StallTerm                     {}
1042     | SwitchTerm                    {}
1043     | UnloadTerm                    {}
1044     | WhileTerm                     {}
1045     ;
1046
1047 Type2Opcode
1048     : AcquireTerm                   {}
1049     | CondRefOfTerm                 {}
1050     | CopyObjectTerm                {}
1051     | DerefOfTerm                   {}
1052     | ObjectTypeTerm                {}
1053     | RefOfTerm                     {}
1054     | SizeOfTerm                    {}
1055     | StoreTerm                     {}
1056     | TimerTerm                     {}
1057     | WaitTerm                      {}
1058     | UserTerm                      {}
1059     ;
1060
1061 /*
1062  * Type 3/4/5 opcodes
1063  */
1064
1065 Type2IntegerOpcode                  /* "Type3" opcodes */
1066     : AddTerm                       {}
1067     | AndTerm                       {}
1068     | DecTerm                       {}
1069     | DivideTerm                    {}
1070     | FindSetLeftBitTerm            {}
1071     | FindSetRightBitTerm           {}
1072     | FromBCDTerm                   {}
1073     | IncTerm                       {}
1074     | IndexTerm                     {}
1075     | LAndTerm                      {}
1076     | LEqualTerm                    {}
1077     | LGreaterTerm                  {}
1078     | LGreaterEqualTerm             {}
1079     | LLessTerm                     {}
1080     | LLessEqualTerm                {}
1081     | LNotTerm                      {}
1082     | LNotEqualTerm                 {}
1083     | LoadTableTerm                 {}
1084     | LOrTerm                       {}
1085     | MatchTerm                     {}
1086     | ModTerm                       {}
1087     | MultiplyTerm                  {}
1088     | NAndTerm                      {}
1089     | NOrTerm                       {}
1090     | NotTerm                       {}
1091     | OrTerm                        {}
1092     | ShiftLeftTerm                 {}
1093     | ShiftRightTerm                {}
1094     | SubtractTerm                  {}
1095     | ToBCDTerm                     {}
1096     | ToIntegerTerm                 {}
1097     | XOrTerm                       {}
1098     ;
1099
1100 Type2StringOpcode                   /* "Type4" Opcodes */
1101     : ToDecimalStringTerm           {}
1102     | ToHexStringTerm               {}
1103     | ToStringTerm                  {}
1104     ;
1105
1106 Type2BufferOpcode                   /* "Type5" Opcodes */
1107     : ToBufferTerm                  {}
1108     | ConcatResTerm                 {}
1109     ;
1110
1111 Type2BufferOrStringOpcode
1112     : ConcatTerm                    {}
1113     | MidTerm                       {}
1114     ;
1115
1116 /*
1117  * A type 3 opcode evaluates to an Integer and cannot have a destination operand
1118  */
1119
1120 Type3Opcode
1121     : EISAIDTerm                    {}
1122     ;
1123
1124 /* Obsolete
1125 Type4Opcode
1126     : ConcatTerm                    {}
1127     | ToDecimalStringTerm           {}
1128     | ToHexStringTerm               {}
1129     | MidTerm                       {}
1130     | ToStringTerm                  {}
1131     ;
1132 */
1133
1134
1135 Type5Opcode
1136     : ResourceTemplateTerm          {}
1137     | UnicodeTerm                   {}
1138     | ToUUIDTerm                    {}
1139     ;
1140
1141 Type6Opcode
1142     : RefOfTerm                     {}
1143     | DerefOfTerm                   {}
1144     | IndexTerm                     {}
1145     | UserTerm                      {}
1146     ;
1147
1148 IncludeTerm
1149     : PARSEOP_INCLUDE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE);}
1150         String  ')'                 {TrLinkChildren ($<n>3,1,$4);FlOpenIncludeFile ($4);}
1151         TermList
1152         IncludeEndTerm              {$$ = TrLinkPeerNodes (3,$<n>3,$7,$8);}
1153     ;
1154
1155 IncludeEndTerm
1156     : PARSEOP_INCLUDE_END           {$$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);}
1157     ;
1158
1159 ExternalTerm
1160     : PARSEOP_EXTERNAL '('
1161         NameString
1162         OptionalObjectTypeKeyword
1163         OptionalParameterTypePackage
1164         OptionalParameterTypesPackage
1165         ')'                         {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
1166     | PARSEOP_EXTERNAL '('
1167         error ')'                   {$$ = AslDoError(); yyclearin;}
1168     ;
1169
1170
1171 /******* Named Objects *******************************************************/
1172
1173
1174 BankFieldTerm
1175     : PARSEOP_BANKFIELD '('         {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
1176         NameString
1177         NameStringItem
1178         TermArgItem
1179         ',' AccessTypeKeyword
1180         ',' LockRuleKeyword
1181         ',' UpdateRuleKeyword
1182         ')' '{'
1183             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,7,$4,$5,$6,$8,$10,$12,$15);}
1184     | PARSEOP_BANKFIELD '('
1185         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
1186     ;
1187
1188 FieldUnitList
1189     :                               {$$ = NULL;}
1190     | FieldUnit
1191     | FieldUnitList ','             /* Allows a trailing comma at list end */
1192     | FieldUnitList ','
1193         FieldUnit                   {$$ = TrLinkPeerNode ($1,$3);}
1194     ;
1195
1196 FieldUnit
1197     : FieldUnitEntry                {}
1198     | OffsetTerm                    {}
1199     | AccessAsTerm                  {}
1200     | ConnectionTerm                {}
1201     ;
1202
1203 FieldUnitEntry
1204     : ',' AmlPackageLengthTerm      {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
1205     | NameSeg ','
1206         AmlPackageLengthTerm        {$$ = TrLinkChildNode ($1,$3);}
1207     ;
1208
1209 OffsetTerm
1210     : PARSEOP_OFFSET '('
1211         AmlPackageLengthTerm
1212         ')'                         {$$ = TrCreateNode (PARSEOP_OFFSET,1,$3);}
1213     | PARSEOP_OFFSET '('
1214         error ')'                   {$$ = AslDoError(); yyclearin;}
1215     ;
1216
1217 AccessAsTerm
1218     : PARSEOP_ACCESSAS '('
1219         AccessTypeKeyword
1220         OptionalAccessAttribTerm
1221         ')'                         {$$ = TrCreateNode (PARSEOP_ACCESSAS,2,$3,$4);}
1222     | PARSEOP_ACCESSAS '('
1223         error ')'                   {$$ = AslDoError(); yyclearin;}
1224     ;
1225
1226 ConnectionTerm
1227     : PARSEOP_CONNECTION '('
1228         NameString
1229         ')'                         {$$ = TrCreateNode (PARSEOP_CONNECTION,1,$3);}
1230     | PARSEOP_CONNECTION '('        {$<n>$ = TrCreateLeafNode (PARSEOP_CONNECTION);}
1231         ResourceMacroTerm
1232         ')'                         {$$ = TrLinkChildren ($<n>3, 1,
1233                                             TrLinkChildren (TrCreateLeafNode (PARSEOP_RESOURCETEMPLATE), 3,
1234                                                 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
1235                                                 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
1236                                                 $4));}
1237     | PARSEOP_CONNECTION '('
1238         error ')'                   {$$ = AslDoError(); yyclearin;}
1239     ;
1240
1241 CreateBitFieldTerm
1242     : PARSEOP_CREATEBITFIELD '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
1243         TermArg
1244         TermArgItem
1245         NameStringItem
1246         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
1247     | PARSEOP_CREATEBITFIELD '('
1248         error ')'                   {$$ = AslDoError(); yyclearin;}
1249     ;
1250
1251 CreateByteFieldTerm
1252     : PARSEOP_CREATEBYTEFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
1253         TermArg
1254         TermArgItem
1255         NameStringItem
1256         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
1257     | PARSEOP_CREATEBYTEFIELD '('
1258         error ')'                   {$$ = AslDoError(); yyclearin;}
1259     ;
1260
1261 CreateDWordFieldTerm
1262     : PARSEOP_CREATEDWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
1263         TermArg
1264         TermArgItem
1265         NameStringItem
1266         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
1267     | PARSEOP_CREATEDWORDFIELD '('
1268         error ')'                   {$$ = AslDoError(); yyclearin;}
1269     ;
1270
1271 CreateFieldTerm
1272     : PARSEOP_CREATEFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
1273         TermArg
1274         TermArgItem
1275         TermArgItem
1276         NameStringItem
1277         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,TrSetNodeFlags ($7, NODE_IS_NAME_DECLARATION));}
1278     | PARSEOP_CREATEFIELD '('
1279         error ')'                   {$$ = AslDoError(); yyclearin;}
1280     ;
1281
1282 CreateQWordFieldTerm
1283     : PARSEOP_CREATEQWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
1284         TermArg
1285         TermArgItem
1286         NameStringItem
1287         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
1288     | PARSEOP_CREATEQWORDFIELD '('
1289         error ')'                   {$$ = AslDoError(); yyclearin;}
1290     ;
1291
1292 CreateWordFieldTerm
1293     : PARSEOP_CREATEWORDFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
1294         TermArg
1295         TermArgItem
1296         NameStringItem
1297         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
1298     | PARSEOP_CREATEWORDFIELD '('
1299         error ')'                   {$$ = AslDoError(); yyclearin;}
1300     ;
1301
1302 DataRegionTerm
1303     : PARSEOP_DATATABLEREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
1304         NameString
1305         TermArgItem
1306         TermArgItem
1307         TermArgItem
1308         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$6,$7);}
1309     | PARSEOP_DATATABLEREGION '('
1310         error ')'                   {$$ = AslDoError(); yyclearin;}
1311     ;
1312
1313 DeviceTerm
1314     : PARSEOP_DEVICE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
1315         NameString
1316         ')' '{'
1317             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
1318     | PARSEOP_DEVICE '('
1319         error ')'                   {$$ = AslDoError(); yyclearin;}
1320     ;
1321
1322 EventTerm
1323     : PARSEOP_EVENT '('             {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
1324         NameString
1325         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
1326     | PARSEOP_EVENT '('
1327         error ')'                   {$$ = AslDoError(); yyclearin;}
1328     ;
1329
1330 FieldTerm
1331     : PARSEOP_FIELD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
1332         NameString
1333         ',' AccessTypeKeyword
1334         ',' LockRuleKeyword
1335         ',' UpdateRuleKeyword
1336         ')' '{'
1337             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
1338     | PARSEOP_FIELD '('
1339         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
1340     ;
1341
1342 FunctionTerm
1343     : PARSEOP_FUNCTION '('          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
1344         NameString
1345         OptionalParameterTypePackage
1346         OptionalParameterTypesPackage
1347         ')' '{'
1348             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
1349                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
1350                                         TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
1351                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
1352     | PARSEOP_FUNCTION '('
1353         error ')'                   {$$ = AslDoError(); yyclearin;}
1354     ;
1355
1356 IndexFieldTerm
1357     : PARSEOP_INDEXFIELD '('        {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
1358         NameString
1359         NameStringItem
1360         ',' AccessTypeKeyword
1361         ',' LockRuleKeyword
1362         ',' UpdateRuleKeyword
1363         ')' '{'
1364             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
1365     | PARSEOP_INDEXFIELD '('
1366         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
1367     ;
1368
1369 MethodTerm
1370     : PARSEOP_METHOD  '('           {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
1371         NameString
1372         OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
1373         OptionalSerializeRuleKeyword
1374         OptionalByteConstExpr
1375         OptionalParameterTypePackage
1376         OptionalParameterTypesPackage
1377         ')' '{'
1378             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$9,$10,$13);}
1379     | PARSEOP_METHOD '('
1380         error ')'                   {$$ = AslDoError(); yyclearin;}
1381     ;
1382
1383 MutexTerm
1384     : PARSEOP_MUTEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
1385         NameString
1386         ',' ByteConstExpr
1387         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
1388     | PARSEOP_MUTEX '('
1389         error ')'                   {$$ = AslDoError(); yyclearin;}
1390     ;
1391
1392 OpRegionTerm
1393     : PARSEOP_OPERATIONREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
1394         NameString
1395         ',' OpRegionSpaceIdTerm
1396         TermArgItem
1397         TermArgItem
1398         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8);}
1399     | PARSEOP_OPERATIONREGION '('
1400         error ')'                   {$$ = AslDoError(); yyclearin;}
1401     ;
1402
1403 OpRegionSpaceIdTerm
1404     : RegionSpaceKeyword            {}
1405     | ByteConst                     {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
1406     ;
1407
1408 PowerResTerm
1409     : PARSEOP_POWERRESOURCE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
1410         NameString
1411         ',' ByteConstExpr
1412         ',' WordConstExpr
1413         ')' '{'
1414             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
1415     | PARSEOP_POWERRESOURCE '('
1416         error ')'                   {$$ = AslDoError(); yyclearin;}
1417     ;
1418
1419 ProcessorTerm
1420     : PARSEOP_PROCESSOR '('         {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
1421         NameString
1422         ',' ByteConstExpr
1423         OptionalDWordConstExpr
1424         OptionalByteConstExpr
1425         ')' '{'
1426             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
1427     | PARSEOP_PROCESSOR '('
1428         error ')'                   {$$ = AslDoError(); yyclearin;}
1429     ;
1430
1431 ThermalZoneTerm
1432     : PARSEOP_THERMALZONE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
1433         NameString
1434         ')' '{'
1435             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
1436     | PARSEOP_THERMALZONE '('
1437         error ')'                   {$$ = AslDoError(); yyclearin;}
1438     ;
1439
1440
1441 /******* Namespace modifiers *************************************************/
1442
1443
1444 AliasTerm
1445     : PARSEOP_ALIAS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
1446         NameString
1447         NameStringItem
1448         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
1449     | PARSEOP_ALIAS '('
1450         error ')'                   {$$ = AslDoError(); yyclearin;}
1451     ;
1452
1453 NameTerm
1454     : PARSEOP_NAME '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
1455         NameString
1456         ',' DataObject
1457         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
1458     | PARSEOP_NAME '('
1459         error ')'                   {$$ = AslDoError(); yyclearin;}
1460     ;
1461
1462 ScopeTerm
1463     : PARSEOP_SCOPE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
1464         NameString
1465         ')' '{'
1466             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
1467     | PARSEOP_SCOPE '('
1468         error ')'                   {$$ = AslDoError(); yyclearin;}
1469     ;
1470
1471
1472 /******* Type 1 opcodes *******************************************************/
1473
1474
1475 BreakTerm
1476     : PARSEOP_BREAK                 {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
1477     ;
1478
1479 BreakPointTerm
1480     : PARSEOP_BREAKPOINT            {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
1481     ;
1482
1483 ContinueTerm
1484     : PARSEOP_CONTINUE              {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
1485     ;
1486
1487 FatalTerm
1488     : PARSEOP_FATAL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
1489         ByteConstExpr
1490         ',' DWordConstExpr
1491         TermArgItem
1492         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
1493     | PARSEOP_FATAL '('
1494         error ')'                   {$$ = AslDoError(); yyclearin;}
1495     ;
1496
1497 IfElseTerm
1498     : IfTerm ElseTerm               {$$ = TrLinkPeerNode ($1,$2);}
1499     ;
1500
1501 IfTerm
1502     : PARSEOP_IF '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
1503         TermArg
1504         ')' '{'
1505             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1506
1507     | PARSEOP_IF '('
1508         error ')'                   {$$ = AslDoError(); yyclearin;}
1509     ;
1510
1511 ElseTerm
1512     :                               {$$ = NULL;}
1513     | PARSEOP_ELSE '{'              {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
1514         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
1515
1516     | PARSEOP_ELSE '{'
1517         error '}'                   {$$ = AslDoError(); yyclearin;}
1518
1519     | PARSEOP_ELSE
1520         error                       {$$ = AslDoError(); yyclearin;}
1521
1522     | PARSEOP_ELSEIF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
1523         TermArg                     {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
1524         ')' '{'
1525             TermList '}'            {TrLinkChildren ($<n>5,2,$4,$8);}
1526         ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
1527                                     {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
1528
1529     | PARSEOP_ELSEIF '('
1530         error ')'                   {$$ = AslDoError(); yyclearin;}
1531
1532     | PARSEOP_ELSEIF
1533         error                       {$$ = AslDoError(); yyclearin;}
1534     ;
1535
1536 LoadTerm
1537     : PARSEOP_LOAD '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
1538         NameString
1539         RequiredTarget
1540         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1541     | PARSEOP_LOAD '('
1542         error ')'                   {$$ = AslDoError(); yyclearin;}
1543     ;
1544
1545 NoOpTerm
1546     : PARSEOP_NOOP                  {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
1547     ;
1548
1549 NotifyTerm
1550     : PARSEOP_NOTIFY '('            {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
1551         SuperName
1552         TermArgItem
1553         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1554     | PARSEOP_NOTIFY '('
1555         error ')'                   {$$ = AslDoError(); yyclearin;}
1556     ;
1557
1558 ReleaseTerm
1559     : PARSEOP_RELEASE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
1560         SuperName
1561         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1562     | PARSEOP_RELEASE '('
1563         error ')'                   {$$ = AslDoError(); yyclearin;}
1564     ;
1565
1566 ResetTerm
1567     : PARSEOP_RESET '('             {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
1568         SuperName
1569         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1570     | PARSEOP_RESET '('
1571         error ')'                   {$$ = AslDoError(); yyclearin;}
1572     ;
1573
1574 ReturnTerm
1575     : PARSEOP_RETURN '('            {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
1576         OptionalReturnArg
1577         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1578     | PARSEOP_RETURN                {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
1579     | PARSEOP_RETURN '('
1580         error ')'                   {$$ = AslDoError(); yyclearin;}
1581     ;
1582
1583 SignalTerm
1584     : PARSEOP_SIGNAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
1585         SuperName
1586         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1587     | PARSEOP_SIGNAL '('
1588         error ')'                   {$$ = AslDoError(); yyclearin;}
1589     ;
1590
1591 SleepTerm
1592     : PARSEOP_SLEEP '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
1593         TermArg
1594         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1595     | PARSEOP_SLEEP '('
1596         error ')'                   {$$ = AslDoError(); yyclearin;}
1597     ;
1598
1599 StallTerm
1600     : PARSEOP_STALL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
1601         TermArg
1602         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1603     | PARSEOP_STALL '('
1604         error ')'                   {$$ = AslDoError(); yyclearin;}
1605     ;
1606
1607 SwitchTerm
1608     : PARSEOP_SWITCH '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
1609         TermArg
1610         ')' '{'
1611             CaseDefaultTermList '}'
1612                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1613     | PARSEOP_SWITCH '('
1614         error ')'                   {$$ = AslDoError(); yyclearin;}
1615     ;
1616
1617 /*
1618  * Case-Default list; allow only one Default term and unlimited Case terms
1619  */
1620
1621 CaseDefaultTermList
1622     :                               {$$ = NULL;}
1623     | CaseTerm  {}
1624     | DefaultTerm   {}
1625     | CaseDefaultTermList
1626         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
1627     | CaseDefaultTermList
1628         DefaultTerm                 {$$ = TrLinkPeerNode ($1,$2);}
1629
1630 /* Original - attempts to force zero or one default term within the switch */
1631
1632 /*
1633 CaseDefaultTermList
1634     :                               {$$ = NULL;}
1635     | CaseTermList
1636         DefaultTerm
1637         CaseTermList                {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
1638     | CaseTermList
1639         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
1640     ;
1641
1642 CaseTermList
1643     :                               {$$ = NULL;}
1644     | CaseTerm                      {}
1645     | CaseTermList
1646         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
1647     ;
1648 */
1649
1650 CaseTerm
1651     : PARSEOP_CASE '('              {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
1652         DataObject
1653         ')' '{'
1654             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1655     | PARSEOP_CASE '('
1656         error ')'                   {$$ = AslDoError(); yyclearin;}
1657     ;
1658
1659 DefaultTerm
1660     : PARSEOP_DEFAULT '{'           {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
1661         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
1662     | PARSEOP_DEFAULT '{'
1663         error '}'                   {$$ = AslDoError(); yyclearin;}
1664     ;
1665
1666 UnloadTerm
1667     : PARSEOP_UNLOAD '('            {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
1668         SuperName
1669         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1670     | PARSEOP_UNLOAD '('
1671         error ')'                   {$$ = AslDoError(); yyclearin;}
1672     ;
1673
1674 WhileTerm
1675     : PARSEOP_WHILE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
1676         TermArg
1677         ')' '{' TermList '}'
1678                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1679     | PARSEOP_WHILE '('
1680         error ')'                   {$$ = AslDoError(); yyclearin;}
1681     ;
1682
1683
1684 /******* Type 2 opcodes *******************************************************/
1685
1686 AcquireTerm
1687     : PARSEOP_ACQUIRE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
1688         SuperName
1689         ',' WordConstExpr
1690         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
1691     | PARSEOP_ACQUIRE '('
1692         error ')'                   {$$ = AslDoError(); yyclearin;}
1693     ;
1694
1695 AddTerm
1696     : PARSEOP_ADD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
1697         TermArg
1698         TermArgItem
1699         Target
1700         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1701     | PARSEOP_ADD '('
1702         error ')'                   {$$ = AslDoError(); yyclearin;}
1703     ;
1704
1705 AndTerm
1706     : PARSEOP_AND '('               {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
1707         TermArg
1708         TermArgItem
1709         Target
1710         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1711     | PARSEOP_AND '('
1712         error ')'                   {$$ = AslDoError(); yyclearin;}
1713     ;
1714
1715 ConcatTerm
1716     : PARSEOP_CONCATENATE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
1717         TermArg
1718         TermArgItem
1719         Target
1720         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1721     | PARSEOP_CONCATENATE '('
1722         error ')'                   {$$ = AslDoError(); yyclearin;}
1723     ;
1724
1725 ConcatResTerm
1726     : PARSEOP_CONCATENATERESTEMPLATE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATERESTEMPLATE);}
1727         TermArg
1728         TermArgItem
1729         Target
1730         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1731     | PARSEOP_CONCATENATERESTEMPLATE '('
1732         error ')'                   {$$ = AslDoError(); yyclearin;}
1733     ;
1734
1735 CondRefOfTerm
1736     : PARSEOP_CONDREFOF '('         {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
1737         SuperName
1738         Target
1739         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1740     | PARSEOP_CONDREFOF '('
1741         error ')'                   {$$ = AslDoError(); yyclearin;}
1742     ;
1743
1744 CopyObjectTerm
1745     : PARSEOP_COPYOBJECT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
1746         TermArg
1747         ',' SimpleTarget
1748         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
1749     | PARSEOP_COPYOBJECT '('
1750         error ')'                   {$$ = AslDoError(); yyclearin;}
1751     ;
1752
1753 DecTerm
1754     : PARSEOP_DECREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
1755         SuperName
1756         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1757     | PARSEOP_DECREMENT '('
1758         error ')'                   {$$ = AslDoError(); yyclearin;}
1759     ;
1760
1761 DerefOfTerm
1762     : PARSEOP_DEREFOF '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
1763         TermArg
1764         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1765     | PARSEOP_DEREFOF '('
1766         error ')'                   {$$ = AslDoError(); yyclearin;}
1767     ;
1768
1769 DivideTerm
1770     : PARSEOP_DIVIDE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
1771         TermArg
1772         TermArgItem
1773         Target
1774         Target
1775         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
1776     | PARSEOP_DIVIDE '('
1777         error ')'                   {$$ = AslDoError(); yyclearin;}
1778     ;
1779
1780 FindSetLeftBitTerm
1781     : PARSEOP_FINDSETLEFTBIT '('    {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
1782         TermArg
1783         Target
1784         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1785     | PARSEOP_FINDSETLEFTBIT '('
1786         error ')'                   {$$ = AslDoError(); yyclearin;}
1787     ;
1788
1789 FindSetRightBitTerm
1790     : PARSEOP_FINDSETRIGHTBIT '('   {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
1791         TermArg
1792         Target
1793         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1794     | PARSEOP_FINDSETRIGHTBIT '('
1795         error ')'                   {$$ = AslDoError(); yyclearin;}
1796     ;
1797
1798 FromBCDTerm
1799     : PARSEOP_FROMBCD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
1800         TermArg
1801         Target
1802         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1803     | PARSEOP_FROMBCD '('
1804         error ')'                   {$$ = AslDoError(); yyclearin;}
1805     ;
1806
1807 IncTerm
1808     : PARSEOP_INCREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
1809         SuperName
1810         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1811     | PARSEOP_INCREMENT '('
1812         error ')'                   {$$ = AslDoError(); yyclearin;}
1813     ;
1814
1815 IndexTerm
1816     : PARSEOP_INDEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
1817         TermArg
1818         TermArgItem
1819         Target
1820         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1821     | PARSEOP_INDEX '('
1822         error ')'                   {$$ = AslDoError(); yyclearin;}
1823     ;
1824
1825 LAndTerm
1826     : PARSEOP_LAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
1827         TermArg
1828         TermArgItem
1829         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1830     | PARSEOP_LAND '('
1831         error ')'                   {$$ = AslDoError(); yyclearin;}
1832     ;
1833
1834 LEqualTerm
1835     : PARSEOP_LEQUAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1836         TermArg
1837         TermArgItem
1838         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1839     | PARSEOP_LEQUAL '('
1840         error ')'                   {$$ = AslDoError(); yyclearin;}
1841     ;
1842
1843 LGreaterTerm
1844     : PARSEOP_LGREATER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1845         TermArg
1846         TermArgItem
1847         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1848     | PARSEOP_LGREATER '('
1849         error ')'                   {$$ = AslDoError(); yyclearin;}
1850     ;
1851
1852 LGreaterEqualTerm
1853     : PARSEOP_LGREATEREQUAL '('     {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1854         TermArg
1855         TermArgItem
1856         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1857     | PARSEOP_LGREATEREQUAL '('
1858         error ')'                   {$$ = AslDoError(); yyclearin;}
1859     ;
1860
1861 LLessTerm
1862     : PARSEOP_LLESS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1863         TermArg
1864         TermArgItem
1865         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1866     | PARSEOP_LLESS '('
1867         error ')'                   {$$ = AslDoError(); yyclearin;}
1868     ;
1869
1870 LLessEqualTerm
1871     : PARSEOP_LLESSEQUAL '('        {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1872         TermArg
1873         TermArgItem
1874         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1875     | PARSEOP_LLESSEQUAL '('
1876         error ')'                   {$$ = AslDoError(); yyclearin;}
1877     ;
1878
1879 LNotTerm
1880     : PARSEOP_LNOT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
1881         TermArg
1882         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1883     | PARSEOP_LNOT '('
1884         error ')'                   {$$ = AslDoError(); yyclearin;}
1885     ;
1886
1887 LNotEqualTerm
1888     : PARSEOP_LNOTEQUAL '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1889         TermArg
1890         TermArgItem
1891         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1892     | PARSEOP_LNOTEQUAL '('
1893         error ')'                   {$$ = AslDoError(); yyclearin;}
1894     ;
1895
1896 LoadTableTerm
1897     : PARSEOP_LOADTABLE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
1898         TermArg
1899         TermArgItem
1900         TermArgItem
1901         OptionalListString
1902         OptionalListString
1903         OptionalReference
1904         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$5,$6,$7,$8,$9);}
1905     | PARSEOP_LOADTABLE '('
1906         error ')'                   {$$ = AslDoError(); yyclearin;}
1907     ;
1908
1909 LOrTerm
1910     : PARSEOP_LOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
1911         TermArg
1912         TermArgItem
1913         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1914     | PARSEOP_LOR '('
1915         error ')'                   {$$ = AslDoError(); yyclearin;}
1916     ;
1917
1918 MatchTerm
1919     : PARSEOP_MATCH '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
1920         TermArg
1921         ',' MatchOpKeyword
1922         TermArgItem
1923         ',' MatchOpKeyword
1924         TermArgItem
1925         TermArgItem
1926         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$7,$9,$10,$11);}
1927     | PARSEOP_MATCH '('
1928         error ')'                   {$$ = AslDoError(); yyclearin;}
1929     ;
1930
1931 MidTerm
1932     : PARSEOP_MID '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
1933         TermArg
1934         TermArgItem
1935         TermArgItem
1936         Target
1937         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
1938     | PARSEOP_MID '('
1939         error ')'                   {$$ = AslDoError(); yyclearin;}
1940     ;
1941
1942 ModTerm
1943     : PARSEOP_MOD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
1944         TermArg
1945         TermArgItem
1946         Target
1947         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1948     | PARSEOP_MOD '('
1949         error ')'                   {$$ = AslDoError(); yyclearin;}
1950     ;
1951
1952 MultiplyTerm
1953     : PARSEOP_MULTIPLY '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
1954         TermArg
1955         TermArgItem
1956         Target
1957         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1958     | PARSEOP_MULTIPLY '('
1959         error ')'                   {$$ = AslDoError(); yyclearin;}
1960     ;
1961
1962 NAndTerm
1963     : PARSEOP_NAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
1964         TermArg
1965         TermArgItem
1966         Target
1967         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1968     | PARSEOP_NAND '('
1969         error ')'                   {$$ = AslDoError(); yyclearin;}
1970     ;
1971
1972 NOrTerm
1973     : PARSEOP_NOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
1974         TermArg
1975         TermArgItem
1976         Target
1977         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1978     | PARSEOP_NOR '('
1979         error ')'                   {$$ = AslDoError(); yyclearin;}
1980     ;
1981
1982 NotTerm
1983     : PARSEOP_NOT '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
1984         TermArg
1985         Target
1986         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1987     | PARSEOP_NOT '('
1988         error ')'                   {$$ = AslDoError(); yyclearin;}
1989     ;
1990
1991 ObjectTypeTerm
1992     : PARSEOP_OBJECTTYPE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
1993         SuperName
1994         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1995     | PARSEOP_OBJECTTYPE '('
1996         error ')'                   {$$ = AslDoError(); yyclearin;}
1997     ;
1998
1999 OrTerm
2000     : PARSEOP_OR '('                {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
2001         TermArg
2002         TermArgItem
2003         Target
2004         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
2005     | PARSEOP_OR '('
2006         error ')'                   {$$ = AslDoError(); yyclearin;}
2007     ;
2008
2009 /*
2010  * In RefOf, the node isn't really a target, but we can't keep track of it after
2011  * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
2012  */
2013 RefOfTerm
2014     : PARSEOP_REFOF '('             {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
2015         SuperName
2016         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_TARGET));}
2017     | PARSEOP_REFOF '('
2018         error ')'                   {$$ = AslDoError(); yyclearin;}
2019     ;
2020
2021 ShiftLeftTerm
2022     : PARSEOP_SHIFTLEFT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
2023         TermArg
2024         TermArgItem
2025         Target
2026         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
2027     | PARSEOP_SHIFTLEFT '('
2028         error ')'                   {$$ = AslDoError(); yyclearin;}
2029     ;
2030
2031 ShiftRightTerm
2032     : PARSEOP_SHIFTRIGHT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
2033         TermArg
2034         TermArgItem
2035         Target
2036         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
2037     | PARSEOP_SHIFTRIGHT '('
2038         error ')'                   {$$ = AslDoError(); yyclearin;}
2039     ;
2040
2041 SizeOfTerm
2042     : PARSEOP_SIZEOF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
2043         SuperName
2044         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
2045     | PARSEOP_SIZEOF '('
2046         error ')'                   {$$ = AslDoError(); yyclearin;}
2047     ;
2048
2049 StoreTerm
2050     : PARSEOP_STORE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
2051         TermArg
2052         ',' SuperName
2053         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
2054     | PARSEOP_STORE '('
2055         error ')'                   {$$ = AslDoError(); yyclearin;}
2056     ;
2057
2058 SubtractTerm
2059     : PARSEOP_SUBTRACT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
2060         TermArg
2061         TermArgItem
2062         Target
2063         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
2064     | PARSEOP_SUBTRACT '('
2065         error ')'                   {$$ = AslDoError(); yyclearin;}
2066     ;
2067
2068 TimerTerm
2069     : PARSEOP_TIMER '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
2070         ')'                         {$$ = TrLinkChildren ($<n>3,0);}
2071     | PARSEOP_TIMER                 {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
2072     | PARSEOP_TIMER '('
2073         error ')'                   {$$ = AslDoError(); yyclearin;}
2074     ;
2075
2076 ToBCDTerm
2077     : PARSEOP_TOBCD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
2078         TermArg
2079         Target
2080         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
2081     | PARSEOP_TOBCD '('
2082         error ')'                   {$$ = AslDoError(); yyclearin;}
2083     ;
2084
2085 ToBufferTerm
2086     : PARSEOP_TOBUFFER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
2087         TermArg
2088         Target
2089         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
2090     | PARSEOP_TOBUFFER '('
2091         error ')'                   {$$ = AslDoError(); yyclearin;}
2092     ;
2093
2094 ToDecimalStringTerm
2095     : PARSEOP_TODECIMALSTRING '('   {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
2096         TermArg
2097         Target
2098         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
2099     | PARSEOP_TODECIMALSTRING '('
2100         error ')'                   {$$ = AslDoError(); yyclearin;}
2101     ;
2102
2103 ToHexStringTerm
2104     : PARSEOP_TOHEXSTRING '('       {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
2105         TermArg
2106         Target
2107         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
2108     | PARSEOP_TOHEXSTRING '('
2109         error ')'                   {$$ = AslDoError(); yyclearin;}
2110     ;
2111
2112 ToIntegerTerm
2113     : PARSEOP_TOINTEGER '('         {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
2114         TermArg
2115         Target
2116         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
2117     | PARSEOP_TOINTEGER '('
2118         error ')'                   {$$ = AslDoError(); yyclearin;}
2119     ;
2120
2121 ToStringTerm
2122     : PARSEOP_TOSTRING '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
2123         TermArg
2124         OptionalCount
2125         Target
2126         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
2127     | PARSEOP_TOSTRING '('
2128         error ')'                   {$$ = AslDoError(); yyclearin;}
2129     ;
2130
2131 ToUUIDTerm
2132     : PARSEOP_TOUUID '('
2133         StringData ')'              {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
2134     | PARSEOP_TOUUID '('
2135         error ')'                   {$$ = AslDoError(); yyclearin;}
2136     ;
2137
2138 WaitTerm
2139     : PARSEOP_WAIT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
2140         SuperName
2141         TermArgItem
2142         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
2143     | PARSEOP_WAIT '('
2144         error ')'                   {$$ = AslDoError(); yyclearin;}
2145     ;
2146
2147 XOrTerm
2148     : PARSEOP_XOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
2149         TermArg
2150         TermArgItem
2151         Target
2152         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
2153     | PARSEOP_XOR '('
2154         error ')'                   {$$ = AslDoError(); yyclearin;}
2155     ;
2156
2157
2158 /******* Keywords *************************************************************/
2159
2160
2161 AccessAttribKeyword
2162     : PARSEOP_ACCESSATTRIB_BLOCK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK);}
2163     | PARSEOP_ACCESSATTRIB_BLOCK_CALL       {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK_CALL);}
2164     | PARSEOP_ACCESSATTRIB_BYTE             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BYTE);}
2165     | PARSEOP_ACCESSATTRIB_QUICK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_QUICK );}
2166     | PARSEOP_ACCESSATTRIB_SND_RCV          {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_SND_RCV);}
2167     | PARSEOP_ACCESSATTRIB_WORD             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD);}
2168     | PARSEOP_ACCESSATTRIB_WORD_CALL        {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD_CALL);}
2169     | PARSEOP_ACCESSATTRIB_MULTIBYTE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_MULTIBYTE);}
2170         ByteConst
2171         ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
2172     | PARSEOP_ACCESSATTRIB_RAW_BYTES '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_BYTES);}
2173         ByteConst
2174         ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
2175     | PARSEOP_ACCESSATTRIB_RAW_PROCESS '('  {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_PROCESS);}
2176         ByteConst
2177         ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
2178     ;
2179
2180 AccessTypeKeyword
2181     : PARSEOP_ACCESSTYPE_ANY                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_ANY);}
2182     | PARSEOP_ACCESSTYPE_BYTE               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BYTE);}
2183     | PARSEOP_ACCESSTYPE_WORD               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_WORD);}
2184     | PARSEOP_ACCESSTYPE_DWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_DWORD);}
2185     | PARSEOP_ACCESSTYPE_QWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_QWORD);}
2186     | PARSEOP_ACCESSTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BUF);}
2187     ;
2188
2189 AddressingModeKeyword
2190     : PARSEOP_ADDRESSINGMODE_7BIT           {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_7BIT);}
2191     | PARSEOP_ADDRESSINGMODE_10BIT          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_10BIT);}
2192     ;
2193
2194 AddressKeyword
2195     : PARSEOP_ADDRESSTYPE_MEMORY            {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_MEMORY);}
2196     | PARSEOP_ADDRESSTYPE_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_RESERVED);}
2197     | PARSEOP_ADDRESSTYPE_NVS               {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_NVS);}
2198     | PARSEOP_ADDRESSTYPE_ACPI              {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_ACPI);}
2199     ;
2200
2201 AddressSpaceKeyword
2202     : ByteConst                             {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);}
2203     | RegionSpaceKeyword                    {}
2204     ;
2205
2206 BitsPerByteKeyword
2207     : PARSEOP_BITSPERBYTE_FIVE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_FIVE);}
2208     | PARSEOP_BITSPERBYTE_SIX               {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SIX);}
2209     | PARSEOP_BITSPERBYTE_SEVEN             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SEVEN);}
2210     | PARSEOP_BITSPERBYTE_EIGHT             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_EIGHT);}
2211     | PARSEOP_BITSPERBYTE_NINE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_NINE);}
2212     ;
2213
2214 ClockPhaseKeyword
2215     : PARSEOP_CLOCKPHASE_FIRST              {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_FIRST);}
2216     | PARSEOP_CLOCKPHASE_SECOND             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_SECOND);}
2217     ;
2218
2219 ClockPolarityKeyword
2220     : PARSEOP_CLOCKPOLARITY_LOW             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_LOW);}
2221     | PARSEOP_CLOCKPOLARITY_HIGH            {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_HIGH);}
2222     ;
2223
2224 DecodeKeyword
2225     : PARSEOP_DECODETYPE_POS                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_POS);}
2226     | PARSEOP_DECODETYPE_SUB                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_SUB);}
2227     ;
2228
2229 DevicePolarityKeyword
2230     : PARSEOP_DEVICEPOLARITY_LOW            {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_LOW);}
2231     | PARSEOP_DEVICEPOLARITY_HIGH           {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_HIGH);}
2232     ;
2233
2234 DMATypeKeyword
2235     : PARSEOP_DMATYPE_A                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_A);}
2236     | PARSEOP_DMATYPE_COMPATIBILITY         {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_COMPATIBILITY);}
2237     | PARSEOP_DMATYPE_B                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_B);}
2238     | PARSEOP_DMATYPE_F                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_F);}
2239     ;
2240
2241 EndianKeyword
2242     : PARSEOP_ENDIAN_LITTLE                 {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_LITTLE);}
2243     | PARSEOP_ENDIAN_BIG                    {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_BIG);}
2244     ;
2245
2246 FlowControlKeyword
2247     : PARSEOP_FLOWCONTROL_HW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_HW);}
2248     | PARSEOP_FLOWCONTROL_NONE              {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_NONE);}
2249     | PARSEOP_FLOWCONTROL_SW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_SW);}
2250     ;
2251
2252 InterruptLevel
2253     : PARSEOP_INTLEVEL_ACTIVEBOTH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEBOTH);}
2254     | PARSEOP_INTLEVEL_ACTIVEHIGH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEHIGH);}
2255     | PARSEOP_INTLEVEL_ACTIVELOW            {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVELOW);}
2256     ;
2257
2258 InterruptTypeKeyword
2259     : PARSEOP_INTTYPE_EDGE                  {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_EDGE);}
2260     | PARSEOP_INTTYPE_LEVEL                 {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_LEVEL);}
2261     ;
2262
2263 IODecodeKeyword
2264     : PARSEOP_IODECODETYPE_16               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_16);}
2265     | PARSEOP_IODECODETYPE_10               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_10);}
2266     ;
2267
2268 IoRestrictionKeyword
2269     : PARSEOP_IORESTRICT_IN                 {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_IN);}
2270     | PARSEOP_IORESTRICT_OUT                {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_OUT);}
2271     | PARSEOP_IORESTRICT_NONE               {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_NONE);}
2272     | PARSEOP_IORESTRICT_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_PRESERVE);}
2273     ;
2274
2275 LockRuleKeyword
2276     : PARSEOP_LOCKRULE_LOCK                 {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_LOCK);}
2277     | PARSEOP_LOCKRULE_NOLOCK               {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_NOLOCK);}
2278     ;
2279
2280 MatchOpKeyword
2281     : PARSEOP_MATCHTYPE_MTR                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MTR);}
2282     | PARSEOP_MATCHTYPE_MEQ                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MEQ);}
2283     | PARSEOP_MATCHTYPE_MLE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLE);}
2284     | PARSEOP_MATCHTYPE_MLT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLT);}
2285     | PARSEOP_MATCHTYPE_MGE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGE);}
2286     | PARSEOP_MATCHTYPE_MGT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGT);}
2287     ;
2288
2289 MaxKeyword
2290     : PARSEOP_MAXTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_FIXED);}
2291     | PARSEOP_MAXTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_NOTFIXED);}
2292     ;
2293
2294 MemTypeKeyword
2295     : PARSEOP_MEMTYPE_CACHEABLE             {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_CACHEABLE);}
2296     | PARSEOP_MEMTYPE_WRITECOMBINING        {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_WRITECOMBINING);}
2297     | PARSEOP_MEMTYPE_PREFETCHABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_PREFETCHABLE);}
2298     | PARSEOP_MEMTYPE_NONCACHEABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_NONCACHEABLE);}
2299     ;
2300
2301 MinKeyword
2302     : PARSEOP_MINTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_FIXED);}
2303     | PARSEOP_MINTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_NOTFIXED);}
2304     ;
2305
2306 ObjectTypeKeyword
2307     : PARSEOP_OBJECTTYPE_UNK                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
2308     | PARSEOP_OBJECTTYPE_INT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_INT);}
2309     | PARSEOP_OBJECTTYPE_STR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_STR);}
2310     | PARSEOP_OBJECTTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BUF);}
2311     | PARSEOP_OBJECTTYPE_PKG                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PKG);}
2312     | PARSEOP_OBJECTTYPE_FLD                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_FLD);}
2313     | PARSEOP_OBJECTTYPE_DEV                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DEV);}
2314     | PARSEOP_OBJECTTYPE_EVT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_EVT);}
2315     | PARSEOP_OBJECTTYPE_MTH                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTH);}
2316     | PARSEOP_OBJECTTYPE_MTX                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTX);}
2317     | PARSEOP_OBJECTTYPE_OPR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_OPR);}
2318     | PARSEOP_OBJECTTYPE_POW                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_POW);}
2319     | PARSEOP_OBJECTTYPE_PRO                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PRO);}
2320     | PARSEOP_OBJECTTYPE_THZ                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_THZ);}
2321     | PARSEOP_OBJECTTYPE_BFF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BFF);}
2322     | PARSEOP_OBJECTTYPE_DDB                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DDB);}
2323     ;
2324
2325 ParityTypeKeyword
2326     : PARSEOP_PARITYTYPE_SPACE              {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_SPACE);}
2327     | PARSEOP_PARITYTYPE_MARK               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_MARK);}
2328     | PARSEOP_PARITYTYPE_ODD                {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_ODD);}
2329     | PARSEOP_PARITYTYPE_EVEN               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_EVEN);}
2330     | PARSEOP_PARITYTYPE_NONE               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_NONE);}
2331     ;
2332
2333 PinConfigByte
2334     : PinConfigKeyword                      {$$ = $1;}
2335     | ByteConstExpr                         {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
2336     ;
2337
2338 PinConfigKeyword
2339     : PARSEOP_PIN_NOPULL                    {$$ = TrCreateLeafNode (PARSEOP_PIN_NOPULL);}
2340     | PARSEOP_PIN_PULLDOWN                  {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDOWN);}
2341     | PARSEOP_PIN_PULLUP                    {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLUP);}
2342     | PARSEOP_PIN_PULLDEFAULT               {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDEFAULT);}
2343     ;
2344
2345 RangeTypeKeyword
2346     : PARSEOP_RANGETYPE_ISAONLY             {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ISAONLY);}
2347     | PARSEOP_RANGETYPE_NONISAONLY          {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_NONISAONLY);}
2348     | PARSEOP_RANGETYPE_ENTIRE              {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ENTIRE);}
2349     ;
2350
2351 RegionSpaceKeyword
2352     : PARSEOP_REGIONSPACE_IO                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IO);}
2353     | PARSEOP_REGIONSPACE_MEM               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_MEM);}
2354     | PARSEOP_REGIONSPACE_PCI               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCI);}
2355     | PARSEOP_REGIONSPACE_EC                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_EC);}
2356     | PARSEOP_REGIONSPACE_SMBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_SMBUS);}
2357     | PARSEOP_REGIONSPACE_CMOS              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_CMOS);}
2358     | PARSEOP_REGIONSPACE_PCIBAR            {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCIBAR);}
2359     | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
2360     | PARSEOP_REGIONSPACE_GPIO              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GPIO);}
2361     | PARSEOP_REGIONSPACE_GSBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GSBUS);}
2362     | PARSEOP_REGIONSPACE_FFIXEDHW          {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_FFIXEDHW);}
2363     ;
2364
2365 ResourceTypeKeyword
2366     : PARSEOP_RESOURCETYPE_CONSUMER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
2367     | PARSEOP_RESOURCETYPE_PRODUCER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_PRODUCER);}
2368     ;
2369
2370 SerializeRuleKeyword
2371     : PARSEOP_SERIALIZERULE_SERIAL          {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_SERIAL);}
2372     | PARSEOP_SERIALIZERULE_NOTSERIAL       {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL);}
2373     ;
2374
2375 ShareTypeKeyword
2376     : PARSEOP_SHARETYPE_SHARED              {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHARED);}
2377     | PARSEOP_SHARETYPE_EXCLUSIVE           {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVE);}
2378     | PARSEOP_SHARETYPE_SHAREDWAKE          {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHAREDWAKE);}
2379     | PARSEOP_SHARETYPE_EXCLUSIVEWAKE       {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVEWAKE);}
2380    ;
2381
2382 SlaveModeKeyword
2383     : PARSEOP_SLAVEMODE_CONTROLLERINIT      {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_CONTROLLERINIT);}
2384     | PARSEOP_SLAVEMODE_DEVICEINIT          {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_DEVICEINIT);}
2385     ;
2386
2387 StopBitsKeyword
2388     : PARSEOP_STOPBITS_TWO                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_TWO);}
2389     | PARSEOP_STOPBITS_ONEPLUSHALF          {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONEPLUSHALF);}
2390     | PARSEOP_STOPBITS_ONE                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONE);}
2391     | PARSEOP_STOPBITS_ZERO                 {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ZERO);}
2392     ;
2393
2394 TranslationKeyword
2395     : PARSEOP_TRANSLATIONTYPE_SPARSE        {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_SPARSE);}
2396     | PARSEOP_TRANSLATIONTYPE_DENSE         {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_DENSE);}
2397     ;
2398
2399 TypeKeyword
2400     : PARSEOP_TYPE_TRANSLATION              {$$ = TrCreateLeafNode (PARSEOP_TYPE_TRANSLATION);}
2401     | PARSEOP_TYPE_STATIC                   {$$ = TrCreateLeafNode (PARSEOP_TYPE_STATIC);}
2402     ;
2403
2404 UpdateRuleKeyword
2405     : PARSEOP_UPDATERULE_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_PRESERVE);}
2406     | PARSEOP_UPDATERULE_ONES               {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ONES);}
2407     | PARSEOP_UPDATERULE_ZEROS              {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ZEROS);}
2408     ;
2409
2410 WireModeKeyword
2411     : PARSEOP_WIREMODE_FOUR                 {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_FOUR);}
2412     | PARSEOP_WIREMODE_THREE                {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_THREE);}
2413     ;
2414
2415 XferSizeKeyword
2416     : PARSEOP_XFERSIZE_8                    {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_8,   0);}
2417     | PARSEOP_XFERSIZE_16                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_16,  1);}
2418     | PARSEOP_XFERSIZE_32                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32,  2);}
2419     | PARSEOP_XFERSIZE_64                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_64,  3);}
2420     | PARSEOP_XFERSIZE_128                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_128, 4);}
2421     | PARSEOP_XFERSIZE_256                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_256, 5);}
2422     ;
2423
2424 XferTypeKeyword
2425     : PARSEOP_XFERTYPE_8                    {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8);}
2426     | PARSEOP_XFERTYPE_8_16                 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8_16);}
2427     | PARSEOP_XFERTYPE_16                   {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_16);}
2428     ;
2429
2430
2431 /******* Miscellaneous Types **************************************************/
2432
2433
2434 SuperName
2435     : NameString                    {}
2436     | ArgTerm                       {}
2437     | LocalTerm                     {}
2438     | DebugTerm                     {}
2439     | Type6Opcode                   {}
2440 /*    | UserTerm                      {} */  /* Caused reduce/reduce with Type6Opcode->UserTerm */
2441     ;
2442
2443 ArgTerm
2444     : PARSEOP_ARG0                  {$$ = TrCreateLeafNode (PARSEOP_ARG0);}
2445     | PARSEOP_ARG1                  {$$ = TrCreateLeafNode (PARSEOP_ARG1);}
2446     | PARSEOP_ARG2                  {$$ = TrCreateLeafNode (PARSEOP_ARG2);}
2447     | PARSEOP_ARG3                  {$$ = TrCreateLeafNode (PARSEOP_ARG3);}
2448     | PARSEOP_ARG4                  {$$ = TrCreateLeafNode (PARSEOP_ARG4);}
2449     | PARSEOP_ARG5                  {$$ = TrCreateLeafNode (PARSEOP_ARG5);}
2450     | PARSEOP_ARG6                  {$$ = TrCreateLeafNode (PARSEOP_ARG6);}
2451     ;
2452
2453 LocalTerm
2454     : PARSEOP_LOCAL0                {$$ = TrCreateLeafNode (PARSEOP_LOCAL0);}
2455     | PARSEOP_LOCAL1                {$$ = TrCreateLeafNode (PARSEOP_LOCAL1);}
2456     | PARSEOP_LOCAL2                {$$ = TrCreateLeafNode (PARSEOP_LOCAL2);}
2457     | PARSEOP_LOCAL3                {$$ = TrCreateLeafNode (PARSEOP_LOCAL3);}
2458     | PARSEOP_LOCAL4                {$$ = TrCreateLeafNode (PARSEOP_LOCAL4);}
2459     | PARSEOP_LOCAL5                {$$ = TrCreateLeafNode (PARSEOP_LOCAL5);}
2460     | PARSEOP_LOCAL6                {$$ = TrCreateLeafNode (PARSEOP_LOCAL6);}
2461     | PARSEOP_LOCAL7                {$$ = TrCreateLeafNode (PARSEOP_LOCAL7);}
2462     ;
2463
2464 DebugTerm
2465     : PARSEOP_DEBUG                 {$$ = TrCreateLeafNode (PARSEOP_DEBUG);}
2466     ;
2467
2468
2469 ByteConst
2470     : Integer                       {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
2471     ;
2472
2473 WordConst
2474     : Integer                       {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
2475     ;
2476
2477 DWordConst
2478     : Integer                       {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
2479     ;
2480
2481 QWordConst
2482     : Integer                       {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
2483     ;
2484
2485 Integer
2486     : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, AslCompilerlval.i);}
2487     ;
2488
2489 String
2490     : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, (ACPI_NATIVE_INT) AslCompilerlval.s);}
2491     ;
2492
2493 ConstTerm
2494     : ConstExprTerm                 {}
2495     | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
2496     ;
2497
2498 ConstExprTerm
2499     : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
2500     | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
2501     | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
2502     | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
2503     | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
2504     | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
2505     | PARSEOP___PATH__              {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
2506     ;
2507
2508 ByteConstExpr
2509     : Type3Opcode                   {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
2510     | Type2IntegerOpcode            {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
2511     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
2512     | ByteConst                     {}
2513     ;
2514
2515 WordConstExpr
2516     : Type3Opcode                   {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
2517     | Type2IntegerOpcode            {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
2518     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
2519     | WordConst                     {}
2520     ;
2521
2522 DWordConstExpr
2523     : Type3Opcode                   {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
2524     | Type2IntegerOpcode            {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
2525     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
2526     | DWordConst                    {}
2527     ;
2528
2529 QWordConstExpr
2530     : Type3Opcode                   {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
2531     | Type2IntegerOpcode            {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
2532     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
2533     | QWordConst                    {}
2534     ;
2535
2536 /* OptionalCount must appear before ByteList or an incorrect reduction will result */
2537
2538 OptionalCount
2539     :                               {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
2540     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
2541     | ',' TermArg                   {$$ = $2;}
2542     ;
2543
2544 BufferTerm
2545     : PARSEOP_BUFFER '('            {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
2546         OptionalTermArg
2547         ')' '{'
2548             BufferTermData '}'      {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2549     | PARSEOP_BUFFER '('
2550         error ')'                   {$$ = AslDoError(); yyclearin;}
2551     ;
2552
2553 BufferTermData
2554     : ByteList                      {}
2555     | StringData                    {}
2556     ;
2557
2558 ByteList
2559     :                               {$$ = NULL;}
2560     | ByteConstExpr
2561     | ByteList ','                  /* Allows a trailing comma at list end */
2562     | ByteList ','
2563         ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
2564     ;
2565
2566 DataBufferTerm
2567     : PARSEOP_DATABUFFER  '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DATABUFFER);}
2568         OptionalWordConst
2569         ')' '{'
2570             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2571     | PARSEOP_DATABUFFER '('
2572         error ')'                   {$$ = AslDoError(); yyclearin;}
2573     ;
2574
2575 DWordList
2576     :                               {$$ = NULL;}
2577     | DWordConstExpr
2578     | DWordList ','                 /* Allows a trailing comma at list end */
2579     | DWordList ','
2580         DWordConstExpr              {$$ = TrLinkPeerNode ($1,$3);}
2581     ;
2582
2583 PackageTerm
2584     : PARSEOP_PACKAGE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
2585         VarPackageLengthTerm
2586         ')' '{'
2587             PackageList '}'         {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2588     | PARSEOP_PACKAGE '('
2589         error ')'                   {$$ = AslDoError(); yyclearin;}
2590     ;
2591
2592 PackageList
2593     :                               {$$ = NULL;}
2594     | PackageElement
2595     | PackageList ','               /* Allows a trailing comma at list end */
2596     | PackageList ','
2597         PackageElement              {$$ = TrLinkPeerNode ($1,$3);}
2598     ;
2599
2600 PackageElement
2601     : DataObject                    {}
2602     | NameString                    {}
2603     ;
2604
2605 VarPackageLengthTerm
2606     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
2607     | TermArg                       {$$ = $1;}
2608     ;
2609
2610
2611 /******* Macros ***********************************************/
2612
2613
2614 EISAIDTerm
2615     : PARSEOP_EISAID '('
2616         StringData ')'              {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
2617     | PARSEOP_EISAID '('
2618         error ')'                   {$$ = AslDoError(); yyclearin;}
2619     ;
2620
2621 UnicodeTerm
2622     : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
2623         StringData
2624         ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
2625     | PARSEOP_UNICODE '('
2626         error ')'                   {$$ = AslDoError(); yyclearin;}
2627     ;
2628
2629
2630 /******* Resources and Memory ***********************************************/
2631
2632
2633 /*
2634  * Note: Create two default nodes to allow conversion to a Buffer AML opcode
2635  * Also, insert the EndTag at the end of the template.
2636  */
2637 ResourceTemplateTerm
2638     : PARSEOP_RESOURCETEMPLATE '(' ')'
2639         '{'
2640         ResourceMacroList '}'       {$$ = TrCreateNode (PARSEOP_RESOURCETEMPLATE,4,
2641                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
2642                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
2643                                           $5,
2644                                           TrCreateLeafNode (PARSEOP_ENDTAG));}
2645     ;
2646
2647 ResourceMacroList
2648     :                               {$$ = NULL;}
2649     | ResourceMacroList
2650         ResourceMacroTerm           {$$ = TrLinkPeerNode ($1,$2);}
2651     ;
2652
2653 ResourceMacroTerm
2654     : DMATerm                       {}
2655     | DWordIOTerm                   {}
2656     | DWordMemoryTerm               {}
2657     | DWordSpaceTerm                {}
2658     | EndDependentFnTerm            {}
2659     | ExtendedIOTerm                {}
2660     | ExtendedMemoryTerm            {}
2661     | ExtendedSpaceTerm             {}
2662     | FixedDmaTerm                  {}
2663     | FixedIOTerm                   {}
2664     | GpioIntTerm                   {}
2665     | GpioIoTerm                    {}
2666     | I2cSerialBusTerm              {}
2667     | InterruptTerm                 {}
2668     | IOTerm                        {}
2669     | IRQNoFlagsTerm                {}
2670     | IRQTerm                       {}
2671     | Memory24Term                  {}
2672     | Memory32FixedTerm             {}
2673     | Memory32Term                  {}
2674     | QWordIOTerm                   {}
2675     | QWordMemoryTerm               {}
2676     | QWordSpaceTerm                {}
2677     | RegisterTerm                  {}
2678     | SpiSerialBusTerm              {}
2679     | StartDependentFnNoPriTerm     {}
2680     | StartDependentFnTerm          {}
2681     | UartSerialBusTerm             {}
2682     | VendorLongTerm                {}
2683     | VendorShortTerm               {}
2684     | WordBusNumberTerm             {}
2685     | WordIOTerm                    {}
2686     | WordSpaceTerm                 {}
2687     ;
2688
2689 DMATerm
2690     : PARSEOP_DMA '('               {$<n>$ = TrCreateLeafNode (PARSEOP_DMA);}
2691         DMATypeKeyword
2692         OptionalBusMasterKeyword
2693         ',' XferTypeKeyword
2694         OptionalNameString_Last
2695         ')' '{'
2696             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
2697     | PARSEOP_DMA '('
2698         error ')'                   {$$ = AslDoError(); yyclearin;}
2699     ;
2700
2701 DWordIOTerm
2702     : PARSEOP_DWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDIO);}
2703         OptionalResourceType_First
2704         OptionalMinType
2705         OptionalMaxType
2706         OptionalDecodeType
2707         OptionalRangeType
2708         ',' DWordConstExpr
2709         ',' DWordConstExpr
2710         ',' DWordConstExpr
2711         ',' DWordConstExpr
2712         ',' DWordConstExpr
2713         OptionalByteConstExpr
2714         OptionalStringData
2715         OptionalNameString
2716         OptionalType
2717         OptionalTranslationType_Last
2718         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
2719     | PARSEOP_DWORDIO '('
2720         error ')'                   {$$ = AslDoError(); yyclearin;}
2721     ;
2722
2723 DWordMemoryTerm
2724     : PARSEOP_DWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDMEMORY);}
2725         OptionalResourceType_First
2726         OptionalDecodeType
2727         OptionalMinType
2728         OptionalMaxType
2729         OptionalMemType
2730         ',' OptionalReadWriteKeyword
2731         ',' DWordConstExpr
2732         ',' DWordConstExpr
2733         ',' DWordConstExpr
2734         ',' DWordConstExpr
2735         ',' DWordConstExpr
2736         OptionalByteConstExpr
2737         OptionalStringData
2738         OptionalNameString
2739         OptionalAddressRange
2740         OptionalType_Last
2741         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
2742     | PARSEOP_DWORDMEMORY '('
2743         error ')'                   {$$ = AslDoError(); yyclearin;}
2744     ;
2745
2746 DWordSpaceTerm
2747     : PARSEOP_DWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
2748         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2749         OptionalResourceType
2750         OptionalDecodeType
2751         OptionalMinType
2752         OptionalMaxType
2753         ',' ByteConstExpr
2754         ',' DWordConstExpr
2755         ',' DWordConstExpr
2756         ',' DWordConstExpr
2757         ',' DWordConstExpr
2758         ',' DWordConstExpr
2759         OptionalByteConstExpr
2760         OptionalStringData
2761         OptionalNameString_Last
2762         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
2763     | PARSEOP_DWORDSPACE '('
2764         error ')'                   {$$ = AslDoError(); yyclearin;}
2765     ;
2766
2767
2768 EndDependentFnTerm
2769     : PARSEOP_ENDDEPENDENTFN '('
2770         ')'                         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
2771     | PARSEOP_ENDDEPENDENTFN '('
2772         error ')'                   {$$ = AslDoError(); yyclearin;}
2773     ;
2774
2775 ExtendedIOTerm
2776     : PARSEOP_EXTENDEDIO '('        {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
2777         OptionalResourceType_First
2778         OptionalMinType
2779         OptionalMaxType
2780         OptionalDecodeType
2781         OptionalRangeType
2782         ',' QWordConstExpr
2783         ',' QWordConstExpr
2784         ',' QWordConstExpr
2785         ',' QWordConstExpr
2786         ',' QWordConstExpr
2787         OptionalQWordConstExpr
2788         OptionalNameString
2789         OptionalType
2790         OptionalTranslationType_Last
2791         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
2792     | PARSEOP_EXTENDEDIO '('
2793         error ')'                   {$$ = AslDoError(); yyclearin;}
2794     ;
2795
2796 ExtendedMemoryTerm
2797     : PARSEOP_EXTENDEDMEMORY '('    {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
2798         OptionalResourceType_First
2799         OptionalDecodeType
2800         OptionalMinType
2801         OptionalMaxType
2802         OptionalMemType
2803         ',' OptionalReadWriteKeyword
2804         ',' QWordConstExpr
2805         ',' QWordConstExpr
2806         ',' QWordConstExpr
2807         ',' QWordConstExpr
2808         ',' QWordConstExpr
2809         OptionalQWordConstExpr
2810         OptionalNameString
2811         OptionalAddressRange
2812         OptionalType_Last
2813         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
2814     | PARSEOP_EXTENDEDMEMORY '('
2815         error ')'                   {$$ = AslDoError(); yyclearin;}
2816     ;
2817
2818 ExtendedSpaceTerm
2819     : PARSEOP_EXTENDEDSPACE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
2820         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2821         OptionalResourceType
2822         OptionalDecodeType
2823         OptionalMinType
2824         OptionalMaxType
2825         ',' ByteConstExpr
2826         ',' QWordConstExpr
2827         ',' QWordConstExpr
2828         ',' QWordConstExpr
2829         ',' QWordConstExpr
2830         ',' QWordConstExpr
2831         OptionalQWordConstExpr
2832         OptionalNameString_Last
2833         ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
2834     | PARSEOP_EXTENDEDSPACE '('
2835         error ')'                   {$$ = AslDoError(); yyclearin;}
2836     ;
2837
2838 FixedDmaTerm
2839     : PARSEOP_FIXEDDMA '('          {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);}
2840         WordConstExpr               // 04: DMA RequestLines
2841         ',' WordConstExpr           // 06: DMA Channels
2842         OptionalXferSize            // 07: DMA TransferSize
2843         OptionalNameString          // 08: DescriptorName
2844         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$7,$8);}
2845     | PARSEOP_FIXEDDMA '('
2846         error ')'                   {$$ = AslDoError(); yyclearin;}
2847     ;
2848
2849 FixedIOTerm
2850     : PARSEOP_FIXEDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
2851         WordConstExpr
2852         ',' ByteConstExpr
2853         OptionalNameString_Last
2854         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
2855     | PARSEOP_FIXEDIO '('
2856         error ')'                   {$$ = AslDoError(); yyclearin;}
2857     ;
2858
2859 GpioIntTerm
2860     : PARSEOP_GPIO_INT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_INT);}
2861         InterruptTypeKeyword        // 04: InterruptType
2862         ',' InterruptLevel          // 06: InterruptLevel
2863         OptionalShareType           // 07: SharedType
2864         ',' PinConfigByte           // 09: PinConfig
2865         OptionalWordConstExpr       // 10: DebounceTimeout
2866         ',' StringData              // 12: ResourceSource
2867         OptionalByteConstExpr       // 13: ResourceSourceIndex
2868         OptionalResourceType        // 14: ResourceType
2869         OptionalNameString          // 15: DescriptorName
2870         OptionalBuffer_Last         // 16: VendorData
2871         ')' '{'
2872             DWordConstExpr '}'      {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);}
2873     | PARSEOP_GPIO_INT '('
2874         error ')'                   {$$ = AslDoError(); yyclearin;}
2875     ;
2876
2877 GpioIoTerm
2878     : PARSEOP_GPIO_IO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_IO);}
2879         OptionalShareType_First     // 04: SharedType
2880         ',' PinConfigByte           // 06: PinConfig
2881         OptionalWordConstExpr       // 07: DebounceTimeout
2882         OptionalWordConstExpr       // 08: DriveStrength
2883         OptionalIoRestriction       // 09: IoRestriction
2884         ',' StringData              // 11: ResourceSource
2885         OptionalByteConstExpr       // 12: ResourceSourceIndex
2886         OptionalResourceType        // 13: ResourceType
2887         OptionalNameString          // 14: DescriptorName
2888         OptionalBuffer_Last         // 15: VendorData
2889         ')' '{'
2890             DWordList '}'           {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);}
2891     | PARSEOP_GPIO_IO '('
2892         error ')'                   {$$ = AslDoError(); yyclearin;}
2893     ;
2894
2895 I2cSerialBusTerm
2896     : PARSEOP_I2C_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);}
2897         WordConstExpr               // 04: SlaveAddress
2898         OptionalSlaveMode           // 05: SlaveMode
2899         ',' DWordConstExpr          // 07: ConnectionSpeed
2900         OptionalAddressingMode      // 08: AddressingMode
2901         ',' StringData              // 10: ResourceSource
2902         OptionalByteConstExpr       // 11: ResourceSourceIndex
2903         OptionalResourceType        // 12: ResourceType
2904         OptionalNameString          // 13: DescriptorName
2905         OptionalBuffer_Last         // 14: VendorData
2906         ')'                         {$$ = TrLinkChildren ($<n>3,9,$4,$5,$7,$8,$10,$11,$12,$13,$14);}
2907     | PARSEOP_I2C_SERIALBUS '('
2908         error ')'                   {$$ = AslDoError(); yyclearin;}
2909     ;
2910
2911 InterruptTerm
2912     : PARSEOP_INTERRUPT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
2913         OptionalResourceType_First
2914         ',' InterruptTypeKeyword
2915         ',' InterruptLevel
2916         OptionalShareType
2917         OptionalByteConstExpr
2918         OptionalStringData
2919         OptionalNameString_Last
2920         ')' '{'
2921             DWordList '}'           {$$ = TrLinkChildren ($<n>3,8,$4,$6,$8,$9,$10,$11,$12,$15);}
2922     | PARSEOP_INTERRUPT '('
2923         error ')'                   {$$ = AslDoError(); yyclearin;}
2924     ;
2925
2926 IOTerm
2927     : PARSEOP_IO '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IO);}
2928         IODecodeKeyword
2929         ',' WordConstExpr
2930         ',' WordConstExpr
2931         ',' ByteConstExpr
2932         ',' ByteConstExpr
2933         OptionalNameString_Last
2934         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
2935     | PARSEOP_IO '('
2936         error ')'                   {$$ = AslDoError(); yyclearin;}
2937     ;
2938
2939 IRQNoFlagsTerm
2940     : PARSEOP_IRQNOFLAGS '('        {$<n>$ = TrCreateLeafNode (PARSEOP_IRQNOFLAGS);}
2941         OptionalNameString_First
2942         ')' '{'
2943             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2944     | PARSEOP_IRQNOFLAGS '('
2945         error ')'                   {$$ = AslDoError(); yyclearin;}
2946     ;
2947
2948 IRQTerm
2949     : PARSEOP_IRQ '('               {$<n>$ = TrCreateLeafNode (PARSEOP_IRQ);}
2950         InterruptTypeKeyword
2951         ',' InterruptLevel
2952         OptionalShareType
2953         OptionalNameString_Last
2954         ')' '{'
2955             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$6,$7,$8,$11);}
2956     | PARSEOP_IRQ '('
2957         error ')'                   {$$ = AslDoError(); yyclearin;}
2958     ;
2959
2960 Memory24Term
2961     : PARSEOP_MEMORY24 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
2962         OptionalReadWriteKeyword
2963         ',' WordConstExpr
2964         ',' WordConstExpr
2965         ',' WordConstExpr
2966         ',' WordConstExpr
2967         OptionalNameString_Last
2968         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
2969     | PARSEOP_MEMORY24 '('
2970         error ')'                   {$$ = AslDoError(); yyclearin;}
2971     ;
2972
2973 Memory32FixedTerm
2974     : PARSEOP_MEMORY32FIXED '('     {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
2975         OptionalReadWriteKeyword
2976         ',' DWordConstExpr
2977         ',' DWordConstExpr
2978         OptionalNameString_Last
2979         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$9);}
2980     | PARSEOP_MEMORY32FIXED '('
2981         error ')'                   {$$ = AslDoError(); yyclearin;}
2982     ;
2983
2984 Memory32Term
2985     : PARSEOP_MEMORY32 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
2986         OptionalReadWriteKeyword
2987         ',' DWordConstExpr
2988         ',' DWordConstExpr
2989         ',' DWordConstExpr
2990         ',' DWordConstExpr
2991         OptionalNameString_Last
2992         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
2993     | PARSEOP_MEMORY32 '('
2994         error ')'                   {$$ = AslDoError(); yyclearin;}
2995     ;
2996
2997 QWordIOTerm
2998     : PARSEOP_QWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
2999         OptionalResourceType_First
3000         OptionalMinType
3001         OptionalMaxType
3002         OptionalDecodeType
3003         OptionalRangeType
3004         ',' QWordConstExpr
3005         ',' QWordConstExpr
3006         ',' QWordConstExpr
3007         ',' QWordConstExpr
3008         ',' QWordConstExpr
3009         OptionalByteConstExpr
3010         OptionalStringData
3011         OptionalNameString
3012         OptionalType
3013         OptionalTranslationType_Last
3014         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
3015     | PARSEOP_QWORDIO '('
3016         error ')'                   {$$ = AslDoError(); yyclearin;}
3017     ;
3018
3019 QWordMemoryTerm
3020     : PARSEOP_QWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDMEMORY);}
3021         OptionalResourceType_First
3022         OptionalDecodeType
3023         OptionalMinType
3024         OptionalMaxType
3025         OptionalMemType
3026         ',' OptionalReadWriteKeyword
3027         ',' QWordConstExpr
3028         ',' QWordConstExpr
3029         ',' QWordConstExpr
3030         ',' QWordConstExpr
3031         ',' QWordConstExpr
3032         OptionalByteConstExpr
3033         OptionalStringData
3034         OptionalNameString
3035         OptionalAddressRange
3036         OptionalType_Last
3037         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
3038     | PARSEOP_QWORDMEMORY '('
3039         error ')'                   {$$ = AslDoError(); yyclearin;}
3040     ;
3041
3042 QWordSpaceTerm
3043     : PARSEOP_QWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
3044         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
3045         OptionalResourceType
3046         OptionalDecodeType
3047         OptionalMinType
3048         OptionalMaxType
3049         ',' ByteConstExpr
3050         ',' QWordConstExpr
3051         ',' QWordConstExpr
3052         ',' QWordConstExpr
3053         ',' QWordConstExpr
3054         ',' QWordConstExpr
3055         OptionalByteConstExpr
3056         OptionalStringData
3057         OptionalNameString_Last
3058         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
3059     | PARSEOP_QWORDSPACE '('
3060         error ')'                   {$$ = AslDoError(); yyclearin;}
3061     ;
3062
3063 RegisterTerm
3064     : PARSEOP_REGISTER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_REGISTER);}
3065         AddressSpaceKeyword
3066         ',' ByteConstExpr
3067         ',' ByteConstExpr
3068         ',' QWordConstExpr
3069         OptionalAccessSize
3070         OptionalNameString_Last
3071         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$11,$12);}
3072     | PARSEOP_REGISTER '('
3073         error ')'                   {$$ = AslDoError(); yyclearin;}
3074     ;
3075
3076 SpiSerialBusTerm
3077     : PARSEOP_SPI_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);}
3078         WordConstExpr               // 04: DeviceSelection
3079         OptionalDevicePolarity      // 05: DevicePolarity
3080         OptionalWireMode            // 06: WireMode
3081         ',' ByteConstExpr           // 08: DataBitLength
3082         OptionalSlaveMode           // 09: SlaveMode
3083         ',' DWordConstExpr          // 11: ConnectionSpeed
3084         ',' ClockPolarityKeyword    // 13: ClockPolarity
3085         ',' ClockPhaseKeyword       // 15: ClockPhase
3086         ',' StringData              // 17: ResourceSource
3087         OptionalByteConstExpr       // 18: ResourceSourceIndex
3088         OptionalResourceType        // 19: ResourceType
3089         OptionalNameString          // 20: DescriptorName
3090         OptionalBuffer_Last         // 21: VendorData
3091         ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21);}
3092     | PARSEOP_SPI_SERIALBUS '('
3093         error ')'                   {$$ = AslDoError(); yyclearin;}
3094     ;
3095
3096 StartDependentFnNoPriTerm
3097     : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
3098         ')' '{'
3099         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
3100     | PARSEOP_STARTDEPENDENTFN_NOPRI '('
3101         error ')'                   {$$ = AslDoError(); yyclearin;}
3102     ;
3103
3104 StartDependentFnTerm
3105     : PARSEOP_STARTDEPENDENTFN '('  {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
3106         ByteConstExpr
3107         ',' ByteConstExpr
3108         ')' '{'
3109         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,3,$4,$6,$9);}
3110     | PARSEOP_STARTDEPENDENTFN '('
3111         error ')'                   {$$ = AslDoError(); yyclearin;}
3112     ;
3113
3114 UartSerialBusTerm
3115     : PARSEOP_UART_SERIALBUS '('    {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);}
3116         DWordConstExpr              // 04: ConnectionSpeed
3117         OptionalBitsPerByte         // 05: BitsPerByte
3118         OptionalStopBits            // 06: StopBits
3119         ',' ByteConstExpr           // 08: LinesInUse
3120         OptionalEndian              // 09: Endianess
3121         OptionalParityType          // 10: Parity
3122         OptionalFlowControl         // 11: FlowControl
3123         ',' WordConstExpr           // 13: Rx BufferSize
3124         ',' WordConstExpr           // 15: Tx BufferSize
3125         ',' StringData              // 17: ResourceSource
3126         OptionalByteConstExpr       // 18: ResourceSourceIndex
3127         OptionalResourceType        // 19: ResourceType
3128         OptionalNameString          // 20: DescriptorName
3129         OptionalBuffer_Last         // 21: VendorData
3130         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21);}
3131     | PARSEOP_UART_SERIALBUS '('
3132         error ')'                   {$$ = AslDoError(); yyclearin;}
3133     ;
3134
3135 VendorLongTerm
3136     : PARSEOP_VENDORLONG '('        {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
3137         OptionalNameString_First
3138         ')' '{'
3139             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
3140     | PARSEOP_VENDORLONG '('
3141         error ')'                   {$$ = AslDoError(); yyclearin;}
3142     ;
3143
3144 VendorShortTerm
3145     : PARSEOP_VENDORSHORT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORSHORT);}
3146         OptionalNameString_First
3147         ')' '{'
3148             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
3149     | PARSEOP_VENDORSHORT '('
3150         error ')'                   {$$ = AslDoError(); yyclearin;}
3151     ;
3152
3153 WordBusNumberTerm
3154     : PARSEOP_WORDBUSNUMBER '('     {$<n>$ = TrCreateLeafNode (PARSEOP_WORDBUSNUMBER);}
3155         OptionalResourceType_First
3156         OptionalMinType
3157         OptionalMaxType
3158         OptionalDecodeType
3159         ',' WordConstExpr
3160         ',' WordConstExpr
3161         ',' WordConstExpr
3162         ',' WordConstExpr
3163         ',' WordConstExpr
3164         OptionalByteConstExpr
3165         OptionalStringData
3166         OptionalNameString_Last
3167         ')'                         {$$ = TrLinkChildren ($<n>3,12,$4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);}
3168     | PARSEOP_WORDBUSNUMBER '('
3169         error ')'                   {$$ = AslDoError(); yyclearin;}
3170     ;
3171
3172 WordIOTerm
3173     : PARSEOP_WORDIO '('            {$<n>$ = TrCreateLeafNode (PARSEOP_WORDIO);}
3174         OptionalResourceType_First
3175         OptionalMinType
3176         OptionalMaxType
3177         OptionalDecodeType
3178         OptionalRangeType
3179         ',' WordConstExpr
3180         ',' WordConstExpr
3181         ',' WordConstExpr
3182         ',' WordConstExpr
3183         ',' WordConstExpr
3184         OptionalByteConstExpr
3185         OptionalStringData
3186         OptionalNameString
3187         OptionalType
3188         OptionalTranslationType_Last
3189         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
3190     | PARSEOP_WORDIO '('
3191         error ')'                   {$$ = AslDoError(); yyclearin;}
3192     ;
3193
3194 WordSpaceTerm
3195     : PARSEOP_WORDSPACE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
3196         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
3197         OptionalResourceType
3198         OptionalDecodeType
3199         OptionalMinType
3200         OptionalMaxType
3201         ',' ByteConstExpr
3202         ',' WordConstExpr
3203         ',' WordConstExpr
3204         ',' WordConstExpr
3205         ',' WordConstExpr
3206         ',' WordConstExpr
3207         OptionalByteConstExpr
3208         OptionalStringData
3209         OptionalNameString_Last
3210         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
3211     | PARSEOP_WORDSPACE '('
3212         error ')'                   {$$ = AslDoError(); yyclearin;}
3213     ;
3214
3215
3216 /******* Object References ***********************************************/
3217
3218 /* Allow IO, DMA, IRQ Resource macro names to also be used as identifiers */
3219
3220 NameString
3221     : NameSeg                       {}
3222     | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) AslCompilerlval.s);}
3223     | PARSEOP_IO                    {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
3224     | PARSEOP_DMA                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
3225     | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
3226     ;
3227
3228 NameSeg
3229     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) AslCompilerlval.s);}
3230     ;
3231
3232
3233 /******* Helper rules ****************************************************/
3234
3235
3236 AmlPackageLengthTerm
3237     : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
3238     ;
3239
3240 NameStringItem
3241     : ',' NameString                {$$ = $2;}
3242     | ',' error                     {$$ = AslDoError (); yyclearin;}
3243     ;
3244
3245 TermArgItem
3246     : ',' TermArg                   {$$ = $2;}
3247     | ',' error                     {$$ = AslDoError (); yyclearin;}
3248     ;
3249
3250 OptionalBusMasterKeyword
3251     : ','                                       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
3252     | ',' PARSEOP_BUSMASTERTYPE_MASTER          {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
3253     | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
3254     ;
3255
3256 OptionalAccessAttribTerm
3257     :                               {$$ = NULL;}
3258     | ','                           {$$ = NULL;}
3259     | ',' ByteConstExpr             {$$ = $2;}
3260     | ',' AccessAttribKeyword       {$$ = $2;}
3261     ;
3262
3263 OptionalAccessSize
3264     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
3265     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
3266     | ',' ByteConstExpr             {$$ = $2;}
3267     ;
3268
3269 OptionalAddressingMode
3270     : ','                           {$$ = NULL;}
3271     | ',' AddressingModeKeyword     {$$ = $2;}
3272     ;
3273
3274 OptionalAddressRange
3275     :                               {$$ = NULL;}
3276     | ','                           {$$ = NULL;}
3277     | ',' AddressKeyword            {$$ = $2;}
3278     ;
3279
3280 OptionalBitsPerByte
3281     : ','                           {$$ = NULL;}
3282     | ',' BitsPerByteKeyword        {$$ = $2;}
3283     ;
3284
3285 OptionalBuffer_Last
3286     :                               {$$ = NULL;}
3287     | ','                           {$$ = NULL;}
3288     | ',' DataBufferTerm            {$$ = $2;}
3289     ;
3290
3291 OptionalByteConstExpr
3292     :                               {$$ = NULL;}
3293     | ','                           {$$ = NULL;}
3294     | ',' ByteConstExpr             {$$ = $2;}
3295     ;
3296
3297 OptionalDecodeType
3298     : ','                           {$$ = NULL;}
3299     | ',' DecodeKeyword             {$$ = $2;}
3300     ;
3301
3302 OptionalDevicePolarity
3303     : ','                           {$$ = NULL;}
3304     | ',' DevicePolarityKeyword     {$$ = $2;}
3305     ;
3306
3307 OptionalDWordConstExpr
3308     :                               {$$ = NULL;}
3309     | ','                           {$$ = NULL;}
3310     | ',' DWordConstExpr            {$$ = $2;}
3311     ;
3312
3313 OptionalEndian
3314     : ','                           {$$ = NULL;}
3315     | ',' EndianKeyword             {$$ = $2;}
3316     ;
3317
3318 OptionalFlowControl
3319     : ','                           {$$ = NULL;}
3320     | ',' FlowControlKeyword        {$$ = $2;}
3321     ;
3322
3323 OptionalIoRestriction
3324     : ','                           {$$ = NULL;}
3325     | ',' IoRestrictionKeyword      {$$ = $2;}
3326     ;
3327
3328 OptionalListString
3329     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
3330     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
3331     | ',' TermArg                   {$$ = $2;}
3332     ;
3333
3334 OptionalMaxType
3335     : ','                           {$$ = NULL;}
3336     | ',' MaxKeyword                {$$ = $2;}
3337     ;
3338
3339 OptionalMemType
3340     : ','                           {$$ = NULL;}
3341     | ',' MemTypeKeyword            {$$ = $2;}
3342     ;
3343
3344 OptionalMinType
3345     : ','                           {$$ = NULL;}
3346     | ',' MinKeyword                {$$ = $2;}
3347     ;
3348
3349 OptionalNameString
3350     :                               {$$ = NULL;}
3351     | ','                           {$$ = NULL;}
3352     | ',' NameString                {$$ = $2;}
3353     ;
3354
3355 OptionalNameString_Last
3356     :                               {$$ = NULL;}
3357     | ','                           {$$ = NULL;}
3358     | ',' NameString                {$$ = $2;}
3359     ;
3360
3361 OptionalNameString_First
3362     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}
3363     | NameString                    {$$ = $1;}
3364     ;
3365
3366 OptionalObjectTypeKeyword
3367     :                               {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
3368     | ',' ObjectTypeKeyword         {$$ = $2;}
3369     ;
3370
3371 OptionalParityType
3372     : ','                           {$$ = NULL;}
3373     | ',' ParityTypeKeyword         {$$ = $2;}
3374     ;
3375
3376 OptionalQWordConstExpr
3377     :                               {$$ = NULL;}
3378     | ','                           {$$ = NULL;}
3379     | ',' QWordConstExpr            {$$ = $2;}
3380     ;
3381
3382 OptionalRangeType
3383     : ','                           {$$ = NULL;}
3384     | ',' RangeTypeKeyword          {$$ = $2;}
3385     ;
3386
3387 OptionalReadWriteKeyword
3388     :                                   {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
3389     | PARSEOP_READWRITETYPE_BOTH        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
3390     | PARSEOP_READWRITETYPE_READONLY    {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
3391     ;
3392
3393 OptionalReference
3394     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
3395     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
3396     | ',' TermArg                   {$$ = $2;}
3397     ;
3398
3399 OptionalResourceType_First
3400     :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
3401     | ResourceTypeKeyword           {$$ = $1;}
3402     ;
3403
3404 OptionalResourceType
3405     :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
3406     | ','                           {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
3407     | ',' ResourceTypeKeyword       {$$ = $2;}
3408     ;
3409
3410 OptionalReturnArg
3411     :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
3412     | TermArg                       {$$ = $1;}
3413     ;
3414
3415 OptionalSerializeRuleKeyword
3416     :                               {$$ = NULL;}
3417     | ','                           {$$ = NULL;}
3418     | ',' SerializeRuleKeyword      {$$ = $2;}
3419     ;
3420
3421 OptionalSlaveMode
3422     : ','                           {$$ = NULL;}
3423     | ',' SlaveModeKeyword          {$$ = $2;}
3424     ;
3425
3426 OptionalShareType
3427     :                               {$$ = NULL;}
3428     | ','                           {$$ = NULL;}
3429     | ',' ShareTypeKeyword          {$$ = $2;}
3430     ;
3431
3432 OptionalShareType_First
3433     :                               {$$ = NULL;}
3434     | ShareTypeKeyword              {$$ = $1;}
3435     ;
3436
3437 OptionalStopBits
3438     : ','                           {$$ = NULL;}
3439     | ',' StopBitsKeyword           {$$ = $2;}
3440     ;
3441
3442 OptionalStringData
3443     :                               {$$ = NULL;}
3444     | ','                           {$$ = NULL;}
3445     | ',' StringData                {$$ = $2;}
3446     ;
3447
3448 OptionalTermArg
3449     :                               {$$ = NULL;}
3450     | TermArg                       {$$ = $1;}
3451     ;
3452
3453 OptionalType
3454     :                               {$$ = NULL;}
3455     | ','                           {$$ = NULL;}
3456     | ',' TypeKeyword               {$$ = $2;}
3457     ;
3458
3459 OptionalType_Last
3460     :                               {$$ = NULL;}
3461     | ','                           {$$ = NULL;}
3462     | ',' TypeKeyword               {$$ = $2;}
3463     ;
3464
3465 OptionalTranslationType_Last
3466     :                               {$$ = NULL;}
3467     | ','                           {$$ = NULL;}
3468     | ',' TranslationKeyword        {$$ = $2;}
3469     ;
3470
3471 OptionalWireMode
3472     : ','                           {$$ = NULL;}
3473     | ',' WireModeKeyword           {$$ = $2;}
3474     ;
3475
3476 OptionalWordConst
3477     :                               {$$ = NULL;}
3478     | WordConst                     {$$ = $1;}
3479     ;
3480
3481 OptionalWordConstExpr
3482     : ','                           {$$ = NULL;}
3483     | ',' WordConstExpr             {$$ = $2;}
3484     ;
3485
3486 OptionalXferSize
3487     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
3488     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
3489     | ',' XferSizeKeyword           {$$ = $2;}
3490     ;
3491
3492 %%
3493 /******************************************************************************
3494  *
3495  * Local support functions
3496  *
3497  *****************************************************************************/
3498
3499 int
3500 AslCompilerwrap(void)
3501 {
3502   return 1;
3503 }
3504
3505 /*! [End] no source code translation !*/
3506
3507 void *
3508 AslLocalAllocate (unsigned int Size)
3509 {
3510     void                *Mem;
3511
3512
3513     DbgPrint (ASL_PARSE_OUTPUT, "\nAslLocalAllocate: Expanding Stack to %u\n\n", Size);
3514
3515     Mem = ACPI_ALLOCATE_ZEROED (Size);
3516     if (!Mem)
3517     {
3518         AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION,
3519                         Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
3520                         Gbl_InputByteCount, Gbl_CurrentColumn,
3521                         Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
3522         exit (1);
3523     }
3524
3525     return (Mem);
3526 }
3527
3528 ACPI_PARSE_OBJECT *
3529 AslDoError (void)
3530 {
3531
3532
3533     return (TrCreateLeafNode (PARSEOP_ERRORNODE));
3534
3535 }
3536
3537
3538 /*******************************************************************************
3539  *
3540  * FUNCTION:    UtGetOpName
3541  *
3542  * PARAMETERS:  ParseOpcode         - Parser keyword ID
3543  *
3544  * RETURN:      Pointer to the opcode name
3545  *
3546  * DESCRIPTION: Get the ascii name of the parse opcode
3547  *
3548  ******************************************************************************/
3549
3550 char *
3551 UtGetOpName (
3552     UINT32                  ParseOpcode)
3553 {
3554 #ifdef ASL_YYTNAME_START
3555     /*
3556      * First entries (ASL_YYTNAME_START) in yytname are special reserved names.
3557      * Ignore first 8 characters of the name
3558      */
3559     return ((char *) yytname
3560         [(ParseOpcode - ASL_FIRST_PARSE_OPCODE) + ASL_YYTNAME_START] + 8);
3561 #else
3562     return ("[Unknown parser generator]");
3563 #endif
3564 }