1 NoEcho('
2 /******************************************************************************
3  *
4  * Module Name: aslrules.y - Main Bison/Yacc production rules
5  *
6  *****************************************************************************/
7 
8 /*
9  * Copyright (C) 2000 - 2016, 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 ')
46 
47 /*******************************************************************************
48  *
49  * ASL Root and Secondary Terms
50  *
51  ******************************************************************************/
52 
53 /*
54  * Root term. Allow multiple #line directives before the definition block
55  * to handle output from preprocessors
56  */
57 AslCode
58     : DefinitionBlockList           {$<n>$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_ASL_CODE),1, $1);}
59     | error                         {YYABORT; $$ = NULL;}
60     ;
61 
62 
63 /*
64  * Note concerning support for "module-level code".
65  *
66  * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
67  * methods (the so-called module-level code.) This support was explicitly
68  * removed in ACPI 2.0, but this type of code continues to be created by
69  * BIOS vendors. In order to support the disassembly and recompilation of
70  * such code (and the porting of ASL code to iASL), iASL supports this
71  * code in violation of the current ACPI specification.
72  *
73  * The grammar change to support module-level code is to revert the
74  * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
75  * original use of {TermList} instead (see below.) This allows the use
76  * of Type1 and Type2 opcodes at module level.
77  */
78 DefinitionBlockTerm
79     : PARSEOP_DEFINITION_BLOCK '('  {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK);}
80         String ','
81         String ','
82         ByteConst ','
83         String ','
84         String ','
85         DWordConst
86         ')'                         {TrSetEndLineNumber ($<n>3);}
87             '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
88     ;
89 
90 DefinitionBlockList
91     : DefinitionBlockTerm
92     | DefinitionBlockTerm
93         DefinitionBlockList         {$$ = TrLinkPeerNodes (2, $1,$2);}
94     ;
95 
96 SuperName
97     : NameString                    {}
98     | ArgTerm                       {}
99     | LocalTerm                     {}
100     | DebugTerm                     {}
101     | Type6Opcode                   {}
102 
103 Target
104     :                               {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
105     | ','                           {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
106     | ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
107     ;
108 
109 TermArg
110     : Type2Opcode                   {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
111     | DataObject                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
112     | NameString                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
113     | ArgTerm                       {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
114     | LocalTerm                     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
115     ;
116 
117 /*
118  NOTE: Removed from TermArg due to reduce/reduce conflicts:
119     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
120     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
121     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
122     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
123 
124 */
125 
126 MethodInvocationTerm
127     : NameString '('                {TrUpdateNode (PARSEOP_METHODCALL, $1);}
128         ArgList ')'                 {$$ = TrLinkChildNode ($1,$4);}
129     ;
130 
131 /* OptionalCount must appear before ByteList or an incorrect reduction will result */
132 
133 OptionalCount
134     :                               {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
135     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
136     | ',' TermArg                   {$$ = $2;}
137     ;
138 
139 VarPackageLengthTerm
140     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
141     | TermArg                       {$$ = $1;}
142     ;
143 
144 
145 /******* List Terms **************************************************/
146 
147 ArgList
148     :                               {$$ = NULL;}
149     | TermArg
150     | ArgList ','                   /* Allows a trailing comma at list end */
151     | ArgList ','
152         TermArg                     {$$ = TrLinkPeerNode ($1,$3);}
153     ;
154 
155 ByteList
156     :                               {$$ = NULL;}
157     | ByteConstExpr
158     | ByteList ','                  /* Allows a trailing comma at list end */
159     | ByteList ','
160         ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
161     ;
162 
163 DWordList
164     :                               {$$ = NULL;}
165     | DWordConstExpr
166     | DWordList ','                 /* Allows a trailing comma at list end */
167     | DWordList ','
168         DWordConstExpr              {$$ = TrLinkPeerNode ($1,$3);}
169     ;
170 
171 FieldUnitList
172     :                               {$$ = NULL;}
173     | FieldUnit
174     | FieldUnitList ','             /* Allows a trailing comma at list end */
175     | FieldUnitList ','
176         FieldUnit                   {$$ = TrLinkPeerNode ($1,$3);}
177     ;
178 
179 FieldUnit
180     : FieldUnitEntry                {}
181     | OffsetTerm                    {}
182     | AccessAsTerm                  {}
183     | ConnectionTerm                {}
184     ;
185 
186 FieldUnitEntry
187     : ',' AmlPackageLengthTerm      {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
188     | NameSeg ','
189         AmlPackageLengthTerm        {$$ = TrLinkChildNode ($1,$3);}
190     ;
191 
192 ObjectList
193     :                               {$$ = NULL;}
194     | ObjectList Object             {$$ = TrLinkPeerNode ($1,$2);}
195     | error                         {$$ = AslDoError(); yyclearin;}
196     ;
197 
198 Object
199     : CompilerDirective             {}
200     | NamedObject                   {}
201     | NameSpaceModifier             {}
202     ;
203 
204 PackageList
205     :                               {$$ = NULL;}
206     | PackageElement
207     | PackageList ','               /* Allows a trailing comma at list end */
208     | PackageList ','
209         PackageElement              {$$ = TrLinkPeerNode ($1,$3);}
210     ;
211 
212 PackageElement
213     : DataObject                    {}
214     | NameString                    {}
215     ;
216 
217     /* Rules for specifying the type of one method argument or return value */
218 
219 ParameterTypePackage
220     :                               {$$ = NULL;}
221     | ObjectTypeKeyword             {$$ = $1;}
222     | ParameterTypePackage ','
223         ObjectTypeKeyword           {$$ = TrLinkPeerNodes (2,$1,$3);}
224     ;
225 
226 ParameterTypePackageList
227     :                               {$$ = NULL;}
228     | ObjectTypeKeyword             {$$ = $1;}
229     | '{' ParameterTypePackage '}'  {$$ = $2;}
230     ;
231 
232 OptionalParameterTypePackage
233     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
234     | ',' ParameterTypePackageList  {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
235     ;
236 
237     /* Rules for specifying the types for method arguments */
238 
239 ParameterTypesPackage
240     : ParameterTypePackageList      {$$ = $1;}
241     | ParameterTypesPackage ','
242         ParameterTypePackageList    {$$ = TrLinkPeerNodes (2,$1,$3);}
243     ;
244 
245 ParameterTypesPackageList
246     :                               {$$ = NULL;}
247     | ObjectTypeKeyword             {$$ = $1;}
248     | '{' ParameterTypesPackage '}' {$$ = $2;}
249     ;
250 
251 OptionalParameterTypesPackage
252     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
253     | ',' ParameterTypesPackageList {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
254     ;
255 
256     /* ACPI 3.0 -- allow semicolons between terms */
257 
258 TermList
259     :                               {$$ = NULL;}
260     | TermList Term                 {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
261     | TermList Term ';'             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
262     | TermList ';' Term             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
263     | TermList ';' Term ';'         {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
264     ;
265 
266 Term
267     : Object                        {}
268     | Type1Opcode                   {}
269     | Type2Opcode                   {}
270     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
271     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
272     | Type2BufferOpcode             {}
273     | Type2BufferOrStringOpcode     {}
274     | error                         {$$ = AslDoError(); yyclearin;}
275     ;
276 
277 /*
278  * Case-Default list; allow only one Default term and unlimited Case terms
279  */
280 CaseDefaultTermList
281     :                               {$$ = NULL;}
282     | CaseTerm  {}
283     | DefaultTerm   {}
284     | CaseDefaultTermList
285         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
286     | CaseDefaultTermList
287         DefaultTerm                 {$$ = TrLinkPeerNode ($1,$2);}
288 
289 /* Original - attempts to force zero or one default term within the switch */
290 
291 /*
292 CaseDefaultTermList
293     :                               {$$ = NULL;}
294     | CaseTermList
295         DefaultTerm
296         CaseTermList                {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
297     | CaseTermList
298         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
299     ;
300 
301 CaseTermList
302     :                               {$$ = NULL;}
303     | CaseTerm                      {}
304     | CaseTermList
305         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
306     ;
307 */
308 
309 
310 /*******************************************************************************
311  *
312  * ASL Data and Constant Terms
313  *
314  ******************************************************************************/
315 
316 DataObject
317     : BufferData                    {}
318     | PackageData                   {}
319     | IntegerData                   {}
320     | StringData                    {}
321     ;
322 
323 BufferData
324     : Type5Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
325     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
326     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
327     | BufferTerm                    {}
328     ;
329 
330 PackageData
331     : PackageTerm                   {}
332     ;
333 
334 IntegerData
335     : Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
336     | Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
337     | Integer                       {}
338     | ConstTerm                     {}
339     ;
340 
341 StringData
342     : Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
343     | String                        {}
344     ;
345 
346 ByteConst
347     : Integer                       {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
348     ;
349 
350 WordConst
351     : Integer                       {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
352     ;
353 
354 DWordConst
355     : Integer                       {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
356     ;
357 
358 QWordConst
359     : Integer                       {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
360     ;
361 
362 /*
363  * The NODE_COMPILE_TIME_CONST flag in the following constant expressions
364  * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
365  * to simple integers. It is an error if these types of expressions cannot be
366  * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
367  * Note: The required byte length of the constant is passed through to the
368  * constant folding code in the node AmlLength field.
369  */
370 ByteConstExpr
371     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
372     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
373     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
374     | ByteConst                     {}
375     ;
376 
377 WordConstExpr
378     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
379     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
380     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
381     | WordConst                     {}
382     ;
383 
384 DWordConstExpr
385     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
386     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
387     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
388     | DWordConst                    {}
389     ;
390 
391 QWordConstExpr
392     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
393     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
394     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
395     | QWordConst                    {}
396     ;
397 
398 ConstTerm
399     : ConstExprTerm                 {}
400     | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
401     ;
402 
403 ConstExprTerm
404     : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
405     | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
406     | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
407     | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
408     | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
409     | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
410     | PARSEOP___PATH__              {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
411     ;
412 
413 Integer
414     : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, AslCompilerlval.i);}
415     ;
416 
417 String
418     : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, (ACPI_NATIVE_INT) AslCompilerlval.s);}
419     ;
420 
421 
422 /*******************************************************************************
423  *
424  * ASL Opcode Terms
425  *
426  ******************************************************************************/
427 
428 CompilerDirective
429     : IncludeTerm                   {}
430     | IncludeEndTerm                {}
431     | ExternalTerm                  {}
432     ;
433 
434 NamedObject
435     : BankFieldTerm                 {}
436     | CreateBitFieldTerm            {}
437     | CreateByteFieldTerm           {}
438     | CreateDWordFieldTerm          {}
439     | CreateFieldTerm               {}
440     | CreateQWordFieldTerm          {}
441     | CreateWordFieldTerm           {}
442     | DataRegionTerm                {}
443     | DeviceTerm                    {}
444     | EventTerm                     {}
445     | FieldTerm                     {}
446     | FunctionTerm                  {}
447     | IndexFieldTerm                {}
448     | MethodTerm                    {}
449     | MutexTerm                     {}
450     | OpRegionTerm                  {}
451     | PowerResTerm                  {}
452     | ProcessorTerm                 {}
453     | ThermalZoneTerm               {}
454     ;
455 
456 NameSpaceModifier
457     : AliasTerm                     {}
458     | NameTerm                      {}
459     | ScopeTerm                     {}
460     ;
461 
462 /* For ObjectType: SuperName except for MethodInvocationTerm */
463 
464 ObjectTypeName
465     : NameString                    {}
466     | ArgTerm                       {}
467     | LocalTerm                     {}
468     | DebugTerm                     {}
469     | RefOfTerm                     {}
470     | DerefOfTerm                   {}
471     | IndexTerm                     {}
472 
473 /*    | MethodInvocationTerm          {} */  /* Caused reduce/reduce with Type6Opcode->MethodInvocationTerm */
474     ;
475 
476 RequiredTarget
477     : ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
478     ;
479 
480 SimpleTarget
481     : NameString                    {}
482     | LocalTerm                     {}
483     | ArgTerm                       {}
484     ;
485 
486 /* Opcode types */
487 
488 Type1Opcode
489     : BreakTerm                     {}
490     | BreakPointTerm                {}
491     | ContinueTerm                  {}
492     | FatalTerm                     {}
493     | ElseIfTerm                    {}
494     | LoadTerm                      {}
495     | NoOpTerm                      {}
496     | NotifyTerm                    {}
497     | ReleaseTerm                   {}
498     | ResetTerm                     {}
499     | ReturnTerm                    {}
500     | SignalTerm                    {}
501     | SleepTerm                     {}
502     | StallTerm                     {}
503     | SwitchTerm                    {}
504     | UnloadTerm                    {}
505     | WhileTerm                     {}
506     ;
507 
508 Type2Opcode
509     : AcquireTerm                   {}
510     | CondRefOfTerm                 {}
511     | CopyObjectTerm                {}
512     | DerefOfTerm                   {}
513     | ObjectTypeTerm                {}
514     | RefOfTerm                     {}
515     | SizeOfTerm                    {}
516     | StoreTerm                     {}
517     | EqualsTerm                    {}
518     | TimerTerm                     {}
519     | WaitTerm                      {}
520     | MethodInvocationTerm          {}
521     ;
522 
523 /*
524  * Type 3/4/5 opcodes
525  */
526 Type2IntegerOpcode                  /* "Type3" opcodes */
527     : Expression                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
528     | AddTerm                       {}
529     | AndTerm                       {}
530     | DecTerm                       {}
531     | DivideTerm                    {}
532     | FindSetLeftBitTerm            {}
533     | FindSetRightBitTerm           {}
534     | FromBCDTerm                   {}
535     | IncTerm                       {}
536     | IndexTerm                     {}
537     | LAndTerm                      {}
538     | LEqualTerm                    {}
539     | LGreaterTerm                  {}
540     | LGreaterEqualTerm             {}
541     | LLessTerm                     {}
542     | LLessEqualTerm                {}
543     | LNotTerm                      {}
544     | LNotEqualTerm                 {}
545     | LoadTableTerm                 {}
546     | LOrTerm                       {}
547     | MatchTerm                     {}
548     | ModTerm                       {}
549     | MultiplyTerm                  {}
550     | NAndTerm                      {}
551     | NOrTerm                       {}
552     | NotTerm                       {}
553     | OrTerm                        {}
554     | ShiftLeftTerm                 {}
555     | ShiftRightTerm                {}
556     | SubtractTerm                  {}
557     | ToBCDTerm                     {}
558     | ToIntegerTerm                 {}
559     | XOrTerm                       {}
560     ;
561 
562 Type2StringOpcode                   /* "Type4" Opcodes */
563     : ToDecimalStringTerm           {}
564     | ToHexStringTerm               {}
565     | ToStringTerm                  {}
566     ;
567 
568 Type2BufferOpcode                   /* "Type5" Opcodes */
569     : ToBufferTerm                  {}
570     | ConcatResTerm                 {}
571     ;
572 
573 Type2BufferOrStringOpcode
574     : ConcatTerm                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
575     | PrintfTerm                    {}
576     | FprintfTerm                   {}
577     | MidTerm                       {}
578     ;
579 
580 /*
581  * A type 3 opcode evaluates to an Integer and cannot have a destination operand
582  */
583 Type3Opcode
584     : EISAIDTerm                    {}
585     ;
586 
587 /* Obsolete
588 Type4Opcode
589     : ConcatTerm                    {}
590     | ToDecimalStringTerm           {}
591     | ToHexStringTerm               {}
592     | MidTerm                       {}
593     | ToStringTerm                  {}
594     ;
595 */
596 
597 Type5Opcode
598     : ResourceTemplateTerm          {}
599     | UnicodeTerm                   {}
600     | ToPLDTerm                     {}
601     | ToUUIDTerm                    {}
602     ;
603 
604 Type6Opcode
605     : RefOfTerm                     {}
606     | DerefOfTerm                   {}
607     | IndexTerm                     {}
608     | IndexExpTerm                  {}
609     | MethodInvocationTerm          {}
610     ;
611 
612 
613 /*******************************************************************************
614  *
615  * ASL Primary Terms
616  *
617  ******************************************************************************/
618 
619 AccessAsTerm
620     : PARSEOP_ACCESSAS '('
621         AccessTypeKeyword
622         OptionalAccessAttribTerm
623         ')'                         {$$ = TrCreateNode (PARSEOP_ACCESSAS,2,$3,$4);}
624     | PARSEOP_ACCESSAS '('
625         error ')'                   {$$ = AslDoError(); yyclearin;}
626     ;
627 
628 AcquireTerm
629     : PARSEOP_ACQUIRE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
630         SuperName
631         ',' WordConstExpr
632         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
633     | PARSEOP_ACQUIRE '('
634         error ')'                   {$$ = AslDoError(); yyclearin;}
635     ;
636 
637 AddTerm
638     : PARSEOP_ADD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
639         TermArg
640         TermArgItem
641         Target
642         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
643     | PARSEOP_ADD '('
644         error ')'                   {$$ = AslDoError(); yyclearin;}
645     ;
646 
647 AliasTerm
648     : PARSEOP_ALIAS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
649         NameString
650         NameStringItem
651         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,
652                                         TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
653     | PARSEOP_ALIAS '('
654         error ')'                   {$$ = AslDoError(); yyclearin;}
655     ;
656 
657 AndTerm
658     : PARSEOP_AND '('               {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
659         TermArg
660         TermArgItem
661         Target
662         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
663     | PARSEOP_AND '('
664         error ')'                   {$$ = AslDoError(); yyclearin;}
665     ;
666 
667 ArgTerm
668     : PARSEOP_ARG0                  {$$ = TrCreateLeafNode (PARSEOP_ARG0);}
669     | PARSEOP_ARG1                  {$$ = TrCreateLeafNode (PARSEOP_ARG1);}
670     | PARSEOP_ARG2                  {$$ = TrCreateLeafNode (PARSEOP_ARG2);}
671     | PARSEOP_ARG3                  {$$ = TrCreateLeafNode (PARSEOP_ARG3);}
672     | PARSEOP_ARG4                  {$$ = TrCreateLeafNode (PARSEOP_ARG4);}
673     | PARSEOP_ARG5                  {$$ = TrCreateLeafNode (PARSEOP_ARG5);}
674     | PARSEOP_ARG6                  {$$ = TrCreateLeafNode (PARSEOP_ARG6);}
675     ;
676 
677 BankFieldTerm
678     : PARSEOP_BANKFIELD '('         {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
679         NameString
680         NameStringItem
681         TermArgItem
682         ',' AccessTypeKeyword
683         ',' LockRuleKeyword
684         ',' UpdateRuleKeyword
685         ')' '{'
686             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,7,$4,$5,$6,$8,$10,$12,$15);}
687     | PARSEOP_BANKFIELD '('
688         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
689     ;
690 
691 BreakTerm
692     : PARSEOP_BREAK                 {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
693     ;
694 
695 BreakPointTerm
696     : PARSEOP_BREAKPOINT            {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
697     ;
698 
699 BufferTerm
700     : PARSEOP_BUFFER '('            {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
701         OptionalTermArg
702         ')' '{'
703             BufferTermData '}'      {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
704     | PARSEOP_BUFFER '('
705         error ')'                   {$$ = AslDoError(); yyclearin;}
706     ;
707 
708 BufferTermData
709     : ByteList                      {}
710     | StringData                    {}
711     ;
712 
713 CaseTerm
714     : PARSEOP_CASE '('              {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
715         DataObject
716         ')' '{'
717             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
718     | PARSEOP_CASE '('
719         error ')'                   {$$ = AslDoError(); yyclearin;}
720     ;
721 
722 ConcatTerm
723     : PARSEOP_CONCATENATE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
724         TermArg
725         TermArgItem
726         Target
727         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
728     | PARSEOP_CONCATENATE '('
729         error ')'                   {$$ = AslDoError(); yyclearin;}
730     ;
731 
732 ConcatResTerm
733     : PARSEOP_CONCATENATERESTEMPLATE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATERESTEMPLATE);}
734         TermArg
735         TermArgItem
736         Target
737         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
738     | PARSEOP_CONCATENATERESTEMPLATE '('
739         error ')'                   {$$ = AslDoError(); yyclearin;}
740     ;
741 
742 ConnectionTerm
743     : PARSEOP_CONNECTION '('
744         NameString
745         ')'                         {$$ = TrCreateNode (PARSEOP_CONNECTION,1,$3);}
746     | PARSEOP_CONNECTION '('        {$<n>$ = TrCreateLeafNode (PARSEOP_CONNECTION);}
747         ResourceMacroTerm
748         ')'                         {$$ = TrLinkChildren ($<n>3, 1,
749                                             TrLinkChildren (TrCreateLeafNode (PARSEOP_RESOURCETEMPLATE), 3,
750                                                 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
751                                                 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
752                                                 $4));}
753     | PARSEOP_CONNECTION '('
754         error ')'                   {$$ = AslDoError(); yyclearin;}
755     ;
756 
757 CondRefOfTerm
758     : PARSEOP_CONDREFOF '('         {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
759         SuperName
760         Target
761         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
762     | PARSEOP_CONDREFOF '('
763         error ')'                   {$$ = AslDoError(); yyclearin;}
764     ;
765 
766 ContinueTerm
767     : PARSEOP_CONTINUE              {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
768     ;
769 
770 CopyObjectTerm
771     : PARSEOP_COPYOBJECT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
772         TermArg
773         ',' SimpleTarget
774         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
775     | PARSEOP_COPYOBJECT '('
776         error ')'                   {$$ = AslDoError(); yyclearin;}
777     ;
778 
779 CreateBitFieldTerm
780     : PARSEOP_CREATEBITFIELD '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
781         TermArg
782         TermArgItem
783         NameStringItem
784         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
785     | PARSEOP_CREATEBITFIELD '('
786         error ')'                   {$$ = AslDoError(); yyclearin;}
787     ;
788 
789 CreateByteFieldTerm
790     : PARSEOP_CREATEBYTEFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
791         TermArg
792         TermArgItem
793         NameStringItem
794         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
795     | PARSEOP_CREATEBYTEFIELD '('
796         error ')'                   {$$ = AslDoError(); yyclearin;}
797     ;
798 
799 CreateDWordFieldTerm
800     : PARSEOP_CREATEDWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
801         TermArg
802         TermArgItem
803         NameStringItem
804         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
805     | PARSEOP_CREATEDWORDFIELD '('
806         error ')'                   {$$ = AslDoError(); yyclearin;}
807     ;
808 
809 CreateFieldTerm
810     : PARSEOP_CREATEFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
811         TermArg
812         TermArgItem
813         TermArgItem
814         NameStringItem
815         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,TrSetNodeFlags ($7, NODE_IS_NAME_DECLARATION));}
816     | PARSEOP_CREATEFIELD '('
817         error ')'                   {$$ = AslDoError(); yyclearin;}
818     ;
819 
820 CreateQWordFieldTerm
821     : PARSEOP_CREATEQWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
822         TermArg
823         TermArgItem
824         NameStringItem
825         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
826     | PARSEOP_CREATEQWORDFIELD '('
827         error ')'                   {$$ = AslDoError(); yyclearin;}
828     ;
829 
830 CreateWordFieldTerm
831     : PARSEOP_CREATEWORDFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
832         TermArg
833         TermArgItem
834         NameStringItem
835         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
836     | PARSEOP_CREATEWORDFIELD '('
837         error ')'                   {$$ = AslDoError(); yyclearin;}
838     ;
839 
840 DataRegionTerm
841     : PARSEOP_DATATABLEREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
842         NameString
843         TermArgItem
844         TermArgItem
845         TermArgItem
846         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$6,$7);}
847     | PARSEOP_DATATABLEREGION '('
848         error ')'                   {$$ = AslDoError(); yyclearin;}
849     ;
850 
851 DebugTerm
852     : PARSEOP_DEBUG                 {$$ = TrCreateLeafNode (PARSEOP_DEBUG);}
853     ;
854 
855 DecTerm
856     : PARSEOP_DECREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
857         SuperName
858         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
859     | PARSEOP_DECREMENT '('
860         error ')'                   {$$ = AslDoError(); yyclearin;}
861     ;
862 
863 DefaultTerm
864     : PARSEOP_DEFAULT '{'           {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
865         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
866     | PARSEOP_DEFAULT '{'
867         error '}'                   {$$ = AslDoError(); yyclearin;}
868     ;
869 
870 DerefOfTerm
871     : PARSEOP_DEREFOF '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
872         TermArg
873         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
874     | PARSEOP_DEREFOF '('
875         error ')'                   {$$ = AslDoError(); yyclearin;}
876     ;
877 
878 DeviceTerm
879     : PARSEOP_DEVICE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
880         NameString
881         ')' '{'
882             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
883     | PARSEOP_DEVICE '('
884         error ')'                   {$$ = AslDoError(); yyclearin;}
885     ;
886 
887 DivideTerm
888     : PARSEOP_DIVIDE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
889         TermArg
890         TermArgItem
891         Target
892         Target
893         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
894     | PARSEOP_DIVIDE '('
895         error ')'                   {$$ = AslDoError(); yyclearin;}
896     ;
897 
898 EISAIDTerm
899     : PARSEOP_EISAID '('
900         StringData ')'              {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
901     | PARSEOP_EISAID '('
902         error ')'                   {$$ = AslDoError(); yyclearin;}
903     ;
904 
905 ElseIfTerm
906     : IfTerm ElseTerm               {$$ = TrLinkPeerNode ($1,$2);}
907     ;
908 
909 ElseTerm
910     :                               {$$ = NULL;}
911     | PARSEOP_ELSE '{'              {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
912         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
913 
914     | PARSEOP_ELSE '{'
915         error '}'                   {$$ = AslDoError(); yyclearin;}
916 
917     | PARSEOP_ELSE
918         error                       {$$ = AslDoError(); yyclearin;}
919 
920     | PARSEOP_ELSEIF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
921         TermArg                     {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
922         ')' '{'
923             TermList '}'            {TrLinkChildren ($<n>5,2,$4,$8);}
924         ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
925                                     {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
926 
927     | PARSEOP_ELSEIF '('
928         error ')'                   {$$ = AslDoError(); yyclearin;}
929 
930     | PARSEOP_ELSEIF
931         error                       {$$ = AslDoError(); yyclearin;}
932     ;
933 
934 EventTerm
935     : PARSEOP_EVENT '('             {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
936         NameString
937         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
938     | PARSEOP_EVENT '('
939         error ')'                   {$$ = AslDoError(); yyclearin;}
940     ;
941 
942 ExternalTerm
943     : PARSEOP_EXTERNAL '('
944         NameString
945         OptionalObjectTypeKeyword
946         OptionalParameterTypePackage
947         OptionalParameterTypesPackage
948         ')'                         {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
949     | PARSEOP_EXTERNAL '('
950         error ')'                   {$$ = AslDoError(); yyclearin;}
951     ;
952 
953 FatalTerm
954     : PARSEOP_FATAL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
955         ByteConstExpr
956         ',' DWordConstExpr
957         TermArgItem
958         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
959     | PARSEOP_FATAL '('
960         error ')'                   {$$ = AslDoError(); yyclearin;}
961     ;
962 
963 FieldTerm
964     : PARSEOP_FIELD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
965         NameString
966         ',' AccessTypeKeyword
967         ',' LockRuleKeyword
968         ',' UpdateRuleKeyword
969         ')' '{'
970             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
971     | PARSEOP_FIELD '('
972         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
973     ;
974 
975 FindSetLeftBitTerm
976     : PARSEOP_FINDSETLEFTBIT '('    {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
977         TermArg
978         Target
979         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
980     | PARSEOP_FINDSETLEFTBIT '('
981         error ')'                   {$$ = AslDoError(); yyclearin;}
982     ;
983 
984 FindSetRightBitTerm
985     : PARSEOP_FINDSETRIGHTBIT '('   {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
986         TermArg
987         Target
988         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
989     | PARSEOP_FINDSETRIGHTBIT '('
990         error ')'                   {$$ = AslDoError(); yyclearin;}
991     ;
992 
993 FprintfTerm
994     : PARSEOP_FPRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_FPRINTF);}
995         TermArg ','
996         StringData
997         PrintfArgList
998         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
999     | PARSEOP_FPRINTF '('
1000         error ')'                   {$$ = AslDoError(); yyclearin;}
1001     ;
1002 
1003 FromBCDTerm
1004     : PARSEOP_FROMBCD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
1005         TermArg
1006         Target
1007         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1008     | PARSEOP_FROMBCD '('
1009         error ')'                   {$$ = AslDoError(); yyclearin;}
1010     ;
1011 
1012 FunctionTerm
1013     : PARSEOP_FUNCTION '('          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
1014         NameString
1015         OptionalParameterTypePackage
1016         OptionalParameterTypesPackage
1017         ')' '{'
1018             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
1019                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
1020                                         TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
1021                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
1022     | PARSEOP_FUNCTION '('
1023         error ')'                   {$$ = AslDoError(); yyclearin;}
1024     ;
1025 
1026 IfTerm
1027     : PARSEOP_IF '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
1028         TermArg
1029         ')' '{'
1030             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1031 
1032     | PARSEOP_IF '('
1033         error ')'                   {$$ = AslDoError(); yyclearin;}
1034     ;
1035 
1036 IncludeTerm
1037     : PARSEOP_INCLUDE '('
1038         String  ')'                 {$$ = TrUpdateNode (PARSEOP_INCLUDE, $3);
1039                                         FlOpenIncludeFile ($3);}
1040     ;
1041 
1042 IncludeEndTerm
1043     : PARSEOP_INCLUDE_END           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE_END); TrSetCurrentFilename ($$);}
1044     ;
1045 
1046 IncTerm
1047     : PARSEOP_INCREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
1048         SuperName
1049         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1050     | PARSEOP_INCREMENT '('
1051         error ')'                   {$$ = AslDoError(); yyclearin;}
1052     ;
1053 
1054 IndexFieldTerm
1055     : PARSEOP_INDEXFIELD '('        {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
1056         NameString
1057         NameStringItem
1058         ',' AccessTypeKeyword
1059         ',' LockRuleKeyword
1060         ',' UpdateRuleKeyword
1061         ')' '{'
1062             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
1063     | PARSEOP_INDEXFIELD '('
1064         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
1065     ;
1066 
1067 IndexTerm
1068     : PARSEOP_INDEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
1069         TermArg
1070         TermArgItem
1071         Target
1072         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1073     | PARSEOP_INDEX '('
1074         error ')'                   {$$ = AslDoError(); yyclearin;}
1075     ;
1076 
1077 LAndTerm
1078     : PARSEOP_LAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
1079         TermArg
1080         TermArgItem
1081         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1082     | PARSEOP_LAND '('
1083         error ')'                   {$$ = AslDoError(); yyclearin;}
1084     ;
1085 
1086 LEqualTerm
1087     : PARSEOP_LEQUAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1088         TermArg
1089         TermArgItem
1090         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1091     | PARSEOP_LEQUAL '('
1092         error ')'                   {$$ = AslDoError(); yyclearin;}
1093     ;
1094 
1095 LGreaterEqualTerm
1096     : PARSEOP_LGREATEREQUAL '('     {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1097         TermArg
1098         TermArgItem
1099         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1100     | PARSEOP_LGREATEREQUAL '('
1101         error ')'                   {$$ = AslDoError(); yyclearin;}
1102     ;
1103 
1104 LGreaterTerm
1105     : PARSEOP_LGREATER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1106         TermArg
1107         TermArgItem
1108         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1109     | PARSEOP_LGREATER '('
1110         error ')'                   {$$ = AslDoError(); yyclearin;}
1111     ;
1112 
1113 LLessEqualTerm
1114     : PARSEOP_LLESSEQUAL '('        {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1115         TermArg
1116         TermArgItem
1117         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1118     | PARSEOP_LLESSEQUAL '('
1119         error ')'                   {$$ = AslDoError(); yyclearin;}
1120     ;
1121 
1122 LLessTerm
1123     : PARSEOP_LLESS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1124         TermArg
1125         TermArgItem
1126         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1127     | PARSEOP_LLESS '('
1128         error ')'                   {$$ = AslDoError(); yyclearin;}
1129     ;
1130 
1131 LNotEqualTerm
1132     : PARSEOP_LNOTEQUAL '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1133         TermArg
1134         TermArgItem
1135         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1136     | PARSEOP_LNOTEQUAL '('
1137         error ')'                   {$$ = AslDoError(); yyclearin;}
1138     ;
1139 
1140 LNotTerm
1141     : PARSEOP_LNOT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
1142         TermArg
1143         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1144     | PARSEOP_LNOT '('
1145         error ')'                   {$$ = AslDoError(); yyclearin;}
1146     ;
1147 
1148 LoadTableTerm
1149     : PARSEOP_LOADTABLE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
1150         TermArg
1151         TermArgItem
1152         TermArgItem
1153         OptionalListString
1154         OptionalListString
1155         OptionalReference
1156         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$5,$6,$7,$8,$9);}
1157     | PARSEOP_LOADTABLE '('
1158         error ')'                   {$$ = AslDoError(); yyclearin;}
1159     ;
1160 
1161 LoadTerm
1162     : PARSEOP_LOAD '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
1163         NameString
1164         RequiredTarget
1165         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1166     | PARSEOP_LOAD '('
1167         error ')'                   {$$ = AslDoError(); yyclearin;}
1168     ;
1169 
1170 LocalTerm
1171     : PARSEOP_LOCAL0                {$$ = TrCreateLeafNode (PARSEOP_LOCAL0);}
1172     | PARSEOP_LOCAL1                {$$ = TrCreateLeafNode (PARSEOP_LOCAL1);}
1173     | PARSEOP_LOCAL2                {$$ = TrCreateLeafNode (PARSEOP_LOCAL2);}
1174     | PARSEOP_LOCAL3                {$$ = TrCreateLeafNode (PARSEOP_LOCAL3);}
1175     | PARSEOP_LOCAL4                {$$ = TrCreateLeafNode (PARSEOP_LOCAL4);}
1176     | PARSEOP_LOCAL5                {$$ = TrCreateLeafNode (PARSEOP_LOCAL5);}
1177     | PARSEOP_LOCAL6                {$$ = TrCreateLeafNode (PARSEOP_LOCAL6);}
1178     | PARSEOP_LOCAL7                {$$ = TrCreateLeafNode (PARSEOP_LOCAL7);}
1179     ;
1180 
1181 LOrTerm
1182     : PARSEOP_LOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
1183         TermArg
1184         TermArgItem
1185         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1186     | PARSEOP_LOR '('
1187         error ')'                   {$$ = AslDoError(); yyclearin;}
1188     ;
1189 
1190 MatchTerm
1191     : PARSEOP_MATCH '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
1192         TermArg
1193         ',' MatchOpKeyword
1194         TermArgItem
1195         ',' MatchOpKeyword
1196         TermArgItem
1197         TermArgItem
1198         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$7,$9,$10,$11);}
1199     | PARSEOP_MATCH '('
1200         error ')'                   {$$ = AslDoError(); yyclearin;}
1201     ;
1202 
1203 MethodTerm
1204     : PARSEOP_METHOD  '('           {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
1205         NameString
1206         OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
1207         OptionalSerializeRuleKeyword
1208         OptionalByteConstExpr
1209         OptionalParameterTypePackage
1210         OptionalParameterTypesPackage
1211         ')' '{'
1212             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$9,$10,$13);}
1213     | PARSEOP_METHOD '('
1214         error ')'                   {$$ = AslDoError(); yyclearin;}
1215     ;
1216 
1217 MidTerm
1218     : PARSEOP_MID '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
1219         TermArg
1220         TermArgItem
1221         TermArgItem
1222         Target
1223         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
1224     | PARSEOP_MID '('
1225         error ')'                   {$$ = AslDoError(); yyclearin;}
1226     ;
1227 
1228 ModTerm
1229     : PARSEOP_MOD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
1230         TermArg
1231         TermArgItem
1232         Target
1233         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1234     | PARSEOP_MOD '('
1235         error ')'                   {$$ = AslDoError(); yyclearin;}
1236     ;
1237 
1238 MultiplyTerm
1239     : PARSEOP_MULTIPLY '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
1240         TermArg
1241         TermArgItem
1242         Target
1243         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1244     | PARSEOP_MULTIPLY '('
1245         error ')'                   {$$ = AslDoError(); yyclearin;}
1246     ;
1247 
1248 MutexTerm
1249     : PARSEOP_MUTEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
1250         NameString
1251         ',' ByteConstExpr
1252         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
1253     | PARSEOP_MUTEX '('
1254         error ')'                   {$$ = AslDoError(); yyclearin;}
1255     ;
1256 
1257 NameTerm
1258     : PARSEOP_NAME '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
1259         NameString
1260         ',' DataObject
1261         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
1262     | PARSEOP_NAME '('
1263         error ')'                   {$$ = AslDoError(); yyclearin;}
1264     ;
1265 
1266 NAndTerm
1267     : PARSEOP_NAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
1268         TermArg
1269         TermArgItem
1270         Target
1271         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1272     | PARSEOP_NAND '('
1273         error ')'                   {$$ = AslDoError(); yyclearin;}
1274     ;
1275 
1276 NoOpTerm
1277     : PARSEOP_NOOP                  {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
1278     ;
1279 
1280 NOrTerm
1281     : PARSEOP_NOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
1282         TermArg
1283         TermArgItem
1284         Target
1285         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1286     | PARSEOP_NOR '('
1287         error ')'                   {$$ = AslDoError(); yyclearin;}
1288     ;
1289 
1290 NotifyTerm
1291     : PARSEOP_NOTIFY '('            {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
1292         SuperName
1293         TermArgItem
1294         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1295     | PARSEOP_NOTIFY '('
1296         error ')'                   {$$ = AslDoError(); yyclearin;}
1297     ;
1298 
1299 NotTerm
1300     : PARSEOP_NOT '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
1301         TermArg
1302         Target
1303         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1304     | PARSEOP_NOT '('
1305         error ')'                   {$$ = AslDoError(); yyclearin;}
1306     ;
1307 
1308 ObjectTypeTerm
1309     : PARSEOP_OBJECTTYPE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
1310         ObjectTypeName
1311         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1312     | PARSEOP_OBJECTTYPE '('
1313         error ')'                   {$$ = AslDoError(); yyclearin;}
1314     ;
1315 
1316 OffsetTerm
1317     : PARSEOP_OFFSET '('
1318         AmlPackageLengthTerm
1319         ')'                         {$$ = TrCreateNode (PARSEOP_OFFSET,1,$3);}
1320     | PARSEOP_OFFSET '('
1321         error ')'                   {$$ = AslDoError(); yyclearin;}
1322     ;
1323 
1324 OpRegionTerm
1325     : PARSEOP_OPERATIONREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
1326         NameString
1327         ',' OpRegionSpaceIdTerm
1328         TermArgItem
1329         TermArgItem
1330         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8);}
1331     | PARSEOP_OPERATIONREGION '('
1332         error ')'                   {$$ = AslDoError(); yyclearin;}
1333     ;
1334 
1335 OpRegionSpaceIdTerm
1336     : RegionSpaceKeyword            {}
1337     | ByteConst                     {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
1338     ;
1339 
1340 OrTerm
1341     : PARSEOP_OR '('                {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
1342         TermArg
1343         TermArgItem
1344         Target
1345         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1346     | PARSEOP_OR '('
1347         error ')'                   {$$ = AslDoError(); yyclearin;}
1348     ;
1349 
1350 PackageTerm
1351     : PARSEOP_PACKAGE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
1352         VarPackageLengthTerm
1353         ')' '{'
1354             PackageList '}'         {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1355     | PARSEOP_PACKAGE '('
1356         error ')'                   {$$ = AslDoError(); yyclearin;}
1357     ;
1358 
1359 PowerResTerm
1360     : PARSEOP_POWERRESOURCE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
1361         NameString
1362         ',' ByteConstExpr
1363         ',' WordConstExpr
1364         ')' '{'
1365             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
1366     | PARSEOP_POWERRESOURCE '('
1367         error ')'                   {$$ = AslDoError(); yyclearin;}
1368     ;
1369 
1370 PrintfTerm
1371     : PARSEOP_PRINTF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_PRINTF);}
1372         StringData
1373         PrintfArgList
1374         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1375     | PARSEOP_PRINTF '('
1376         error ')'                   {$$ = AslDoError(); yyclearin;}
1377     ;
1378 
1379 PrintfArgList
1380     :                               {$$ = NULL;}
1381     | TermArg                       {$$ = $1;}
1382     | PrintfArgList ','
1383        TermArg                      {$$ = TrLinkPeerNode ($1, $3);}
1384     ;
1385 
1386 ProcessorTerm
1387     : PARSEOP_PROCESSOR '('         {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
1388         NameString
1389         ',' ByteConstExpr
1390         OptionalDWordConstExpr
1391         OptionalByteConstExpr
1392         ')' '{'
1393             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
1394     | PARSEOP_PROCESSOR '('
1395         error ')'                   {$$ = AslDoError(); yyclearin;}
1396     ;
1397 
1398 RawDataBufferTerm
1399     : PARSEOP_DATABUFFER  '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DATABUFFER);}
1400         OptionalWordConst
1401         ')' '{'
1402             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1403     | PARSEOP_DATABUFFER '('
1404         error ')'                   {$$ = AslDoError(); yyclearin;}
1405     ;
1406 
1407 /*
1408  * In RefOf, the node isn't really a target, but we can't keep track of it after
1409  * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
1410  */
1411 RefOfTerm
1412     : PARSEOP_REFOF '('             {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
1413         SuperName
1414         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_TARGET));}
1415     | PARSEOP_REFOF '('
1416         error ')'                   {$$ = AslDoError(); yyclearin;}
1417     ;
1418 
1419 ReleaseTerm
1420     : PARSEOP_RELEASE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
1421         SuperName
1422         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1423     | PARSEOP_RELEASE '('
1424         error ')'                   {$$ = AslDoError(); yyclearin;}
1425     ;
1426 
1427 ResetTerm
1428     : PARSEOP_RESET '('             {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
1429         SuperName
1430         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1431     | PARSEOP_RESET '('
1432         error ')'                   {$$ = AslDoError(); yyclearin;}
1433     ;
1434 
1435 ReturnTerm
1436     : PARSEOP_RETURN '('            {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
1437         OptionalReturnArg
1438         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1439     | PARSEOP_RETURN                {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
1440     | PARSEOP_RETURN '('
1441         error ')'                   {$$ = AslDoError(); yyclearin;}
1442     ;
1443 
1444 ScopeTerm
1445     : PARSEOP_SCOPE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
1446         NameString
1447         ')' '{'
1448             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
1449     | PARSEOP_SCOPE '('
1450         error ')'                   {$$ = AslDoError(); yyclearin;}
1451     ;
1452 
1453 ShiftLeftTerm
1454     : PARSEOP_SHIFTLEFT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
1455         TermArg
1456         TermArgItem
1457         Target
1458         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1459     | PARSEOP_SHIFTLEFT '('
1460         error ')'                   {$$ = AslDoError(); yyclearin;}
1461     ;
1462 
1463 ShiftRightTerm
1464     : PARSEOP_SHIFTRIGHT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
1465         TermArg
1466         TermArgItem
1467         Target
1468         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1469     | PARSEOP_SHIFTRIGHT '('
1470         error ')'                   {$$ = AslDoError(); yyclearin;}
1471     ;
1472 
1473 SignalTerm
1474     : PARSEOP_SIGNAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
1475         SuperName
1476         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1477     | PARSEOP_SIGNAL '('
1478         error ')'                   {$$ = AslDoError(); yyclearin;}
1479     ;
1480 
1481 SizeOfTerm
1482     : PARSEOP_SIZEOF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
1483         SuperName
1484         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1485     | PARSEOP_SIZEOF '('
1486         error ')'                   {$$ = AslDoError(); yyclearin;}
1487     ;
1488 
1489 SleepTerm
1490     : PARSEOP_SLEEP '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
1491         TermArg
1492         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1493     | PARSEOP_SLEEP '('
1494         error ')'                   {$$ = AslDoError(); yyclearin;}
1495     ;
1496 
1497 StallTerm
1498     : PARSEOP_STALL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
1499         TermArg
1500         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1501     | PARSEOP_STALL '('
1502         error ')'                   {$$ = AslDoError(); yyclearin;}
1503     ;
1504 
1505 StoreTerm
1506     : PARSEOP_STORE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
1507         TermArg
1508         ',' SuperName
1509         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
1510     | PARSEOP_STORE '('
1511         error ')'                   {$$ = AslDoError(); yyclearin;}
1512     ;
1513 
1514 SubtractTerm
1515     : PARSEOP_SUBTRACT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
1516         TermArg
1517         TermArgItem
1518         Target
1519         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1520     | PARSEOP_SUBTRACT '('
1521         error ')'                   {$$ = AslDoError(); yyclearin;}
1522     ;
1523 SwitchTerm
1524     : PARSEOP_SWITCH '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
1525         TermArg
1526         ')' '{'
1527             CaseDefaultTermList '}'
1528                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1529     | PARSEOP_SWITCH '('
1530         error ')'                   {$$ = AslDoError(); yyclearin;}
1531     ;
1532 
1533 ThermalZoneTerm
1534     : PARSEOP_THERMALZONE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
1535         NameString
1536         ')' '{'
1537             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
1538     | PARSEOP_THERMALZONE '('
1539         error ')'                   {$$ = AslDoError(); yyclearin;}
1540     ;
1541 
1542 TimerTerm
1543     : PARSEOP_TIMER '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
1544         ')'                         {$$ = TrLinkChildren ($<n>3,0);}
1545     | PARSEOP_TIMER                 {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
1546     | PARSEOP_TIMER '('
1547         error ')'                   {$$ = AslDoError(); yyclearin;}
1548     ;
1549 
1550 ToBCDTerm
1551     : PARSEOP_TOBCD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
1552         TermArg
1553         Target
1554         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1555     | PARSEOP_TOBCD '('
1556         error ')'                   {$$ = AslDoError(); yyclearin;}
1557     ;
1558 
1559 ToBufferTerm
1560     : PARSEOP_TOBUFFER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
1561         TermArg
1562         Target
1563         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1564     | PARSEOP_TOBUFFER '('
1565         error ')'                   {$$ = AslDoError(); yyclearin;}
1566     ;
1567 
1568 ToDecimalStringTerm
1569     : PARSEOP_TODECIMALSTRING '('   {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
1570         TermArg
1571         Target
1572         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1573     | PARSEOP_TODECIMALSTRING '('
1574         error ')'                   {$$ = AslDoError(); yyclearin;}
1575     ;
1576 
1577 ToHexStringTerm
1578     : PARSEOP_TOHEXSTRING '('       {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
1579         TermArg
1580         Target
1581         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1582     | PARSEOP_TOHEXSTRING '('
1583         error ')'                   {$$ = AslDoError(); yyclearin;}
1584     ;
1585 
1586 ToIntegerTerm
1587     : PARSEOP_TOINTEGER '('         {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
1588         TermArg
1589         Target
1590         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1591     | PARSEOP_TOINTEGER '('
1592         error ')'                   {$$ = AslDoError(); yyclearin;}
1593     ;
1594 
1595 ToPLDTerm
1596     : PARSEOP_TOPLD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOPLD);}
1597         PldKeywordList
1598         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1599     | PARSEOP_TOPLD '('
1600         error ')'                   {$$ = AslDoError(); yyclearin;}
1601     ;
1602 
1603 PldKeywordList
1604     :                               {$$ = NULL;}
1605     | PldKeyword
1606         PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkChildren ($1,1,$3);}
1607     | PldKeyword
1608         PARSEOP_EXP_EQUALS String   {$$ = TrLinkChildren ($1,1,$3);}
1609     | PldKeywordList ','            /* Allows a trailing comma at list end */
1610     | PldKeywordList ','
1611         PldKeyword
1612         PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
1613     | PldKeywordList ','
1614         PldKeyword
1615         PARSEOP_EXP_EQUALS String   {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
1616     ;
1617 
1618 
1619 ToStringTerm
1620     : PARSEOP_TOSTRING '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
1621         TermArg
1622         OptionalCount
1623         Target
1624         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1625     | PARSEOP_TOSTRING '('
1626         error ')'                   {$$ = AslDoError(); yyclearin;}
1627     ;
1628 
1629 ToUUIDTerm
1630     : PARSEOP_TOUUID '('
1631         StringData ')'              {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
1632     | PARSEOP_TOUUID '('
1633         error ')'                   {$$ = AslDoError(); yyclearin;}
1634     ;
1635 
1636 UnicodeTerm
1637     : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
1638         StringData
1639         ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
1640     | PARSEOP_UNICODE '('
1641         error ')'                   {$$ = AslDoError(); yyclearin;}
1642     ;
1643 
1644 UnloadTerm
1645     : PARSEOP_UNLOAD '('            {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
1646         SuperName
1647         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1648     | PARSEOP_UNLOAD '('
1649         error ')'                   {$$ = AslDoError(); yyclearin;}
1650     ;
1651 
1652 WaitTerm
1653     : PARSEOP_WAIT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
1654         SuperName
1655         TermArgItem
1656         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1657     | PARSEOP_WAIT '('
1658         error ')'                   {$$ = AslDoError(); yyclearin;}
1659     ;
1660 
1661 XOrTerm
1662     : PARSEOP_XOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
1663         TermArg
1664         TermArgItem
1665         Target
1666         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1667     | PARSEOP_XOR '('
1668         error ')'                   {$$ = AslDoError(); yyclearin;}
1669     ;
1670 
1671 WhileTerm
1672     : PARSEOP_WHILE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
1673         TermArg
1674         ')' '{' TermList '}'
1675                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1676     | PARSEOP_WHILE '('
1677         error ')'                   {$$ = AslDoError(); yyclearin;}
1678     ;
1679 
1680 
1681 /*******************************************************************************
1682  *
1683  * ASL Helper Terms
1684  *
1685  ******************************************************************************/
1686 
1687 AmlPackageLengthTerm
1688     : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
1689     ;
1690 
1691 NameStringItem
1692     : ',' NameString                {$$ = $2;}
1693     | ',' error                     {$$ = AslDoError (); yyclearin;}
1694     ;
1695 
1696 TermArgItem
1697     : ',' TermArg                   {$$ = $2;}
1698     | ',' error                     {$$ = AslDoError (); yyclearin;}
1699     ;
1700 
1701 OptionalReference
1702     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
1703     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
1704     | ',' TermArg                   {$$ = $2;}
1705     ;
1706 
1707 OptionalReturnArg
1708     :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
1709     | TermArg                       {$$ = $1;}
1710     ;
1711 
1712 OptionalSerializeRuleKeyword
1713     :                               {$$ = NULL;}
1714     | ','                           {$$ = NULL;}
1715     | ',' SerializeRuleKeyword      {$$ = $2;}
1716     ;
1717 
1718 OptionalTermArg
1719     :                               {$$ = NULL;}
1720     | TermArg                       {$$ = $1;}
1721     ;
1722 
1723 OptionalWordConst
1724     :                               {$$ = NULL;}
1725     | WordConst                     {$$ = $1;}
1726     ;
1727