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