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