Home | History | Annotate | Line # | Download | only in compiler
aslprimaries.y revision 1.1.1.2
      1 NoEcho('
      2 /******************************************************************************
      3  *
      4  * Module Name: aslprimaries.y - Rules for primary ASL operators
      5  *
      6  *****************************************************************************/
      7 
      8 /*
      9  * Copyright (C) 2000 - 2017, 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  *
     50  * ASL Primary Terms
     51  *
     52  ******************************************************************************/
     53 
     54 AccessAsTerm
     55     : PARSEOP_ACCESSAS
     56         PARSEOP_OPEN_PAREN
     57         AccessTypeKeyword
     58         OptionalAccessAttribTerm
     59         PARSEOP_CLOSE_PAREN         {$$ = TrCreateNode (PARSEOP_ACCESSAS,2,$3,$4);}
     60     | PARSEOP_ACCESSAS
     61         PARSEOP_OPEN_PAREN
     62         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
     63     ;
     64 
     65 AcquireTerm
     66     : PARSEOP_ACQUIRE
     67         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
     68         SuperName
     69         ',' WordConstExpr
     70         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
     71     | PARSEOP_ACQUIRE
     72         PARSEOP_OPEN_PAREN
     73         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
     74     ;
     75 
     76 AddTerm
     77     : PARSEOP_ADD
     78         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
     79         TermArg
     80         TermArgItem
     81         Target
     82         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
     83     | PARSEOP_ADD
     84         PARSEOP_OPEN_PAREN
     85         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
     86     ;
     87 
     88 AliasTerm
     89     : PARSEOP_ALIAS
     90         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
     91         NameString
     92         NameStringItem
     93         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,
     94                                         TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
     95     | PARSEOP_ALIAS
     96         PARSEOP_OPEN_PAREN
     97         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
     98     ;
     99 
    100 AndTerm
    101     : PARSEOP_AND
    102         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
    103         TermArg
    104         TermArgItem
    105         Target
    106         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    107     | PARSEOP_AND
    108         PARSEOP_OPEN_PAREN
    109         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    110     ;
    111 
    112 ArgTerm
    113     : PARSEOP_ARG0                  {$$ = TrCreateLeafNode (PARSEOP_ARG0);}
    114     | PARSEOP_ARG1                  {$$ = TrCreateLeafNode (PARSEOP_ARG1);}
    115     | PARSEOP_ARG2                  {$$ = TrCreateLeafNode (PARSEOP_ARG2);}
    116     | PARSEOP_ARG3                  {$$ = TrCreateLeafNode (PARSEOP_ARG3);}
    117     | PARSEOP_ARG4                  {$$ = TrCreateLeafNode (PARSEOP_ARG4);}
    118     | PARSEOP_ARG5                  {$$ = TrCreateLeafNode (PARSEOP_ARG5);}
    119     | PARSEOP_ARG6                  {$$ = TrCreateLeafNode (PARSEOP_ARG6);}
    120     ;
    121 
    122 BankFieldTerm
    123     : PARSEOP_BANKFIELD
    124         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
    125         NameString
    126         NameStringItem
    127         TermArgItem
    128         ',' AccessTypeKeyword
    129         ',' LockRuleKeyword
    130         ',' UpdateRuleKeyword
    131         PARSEOP_CLOSE_PAREN '{'
    132             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,7,
    133                                         $4,$5,$6,$8,$10,$12,$15);}
    134     | PARSEOP_BANKFIELD
    135         PARSEOP_OPEN_PAREN
    136         error PARSEOP_CLOSE_PAREN
    137         '{' error '}'               {$$ = AslDoError(); yyclearin;}
    138     ;
    139 
    140 BreakTerm
    141     : PARSEOP_BREAK                 {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
    142     ;
    143 
    144 BreakPointTerm
    145     : PARSEOP_BREAKPOINT            {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
    146     ;
    147 
    148 BufferTerm
    149     : PARSEOP_BUFFER                {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
    150         OptionalDataCount
    151         '{' BufferTermData '}'      {$$ = TrLinkChildren ($<n>2,2,$3,$5);}
    152     ;
    153 
    154 BufferTermData
    155     : ByteList                      {}
    156     | StringData                    {}
    157     ;
    158 
    159 CaseTerm
    160     : PARSEOP_CASE
    161         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
    162         DataObject
    163         PARSEOP_CLOSE_PAREN '{'
    164             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
    165     | PARSEOP_CASE
    166         PARSEOP_OPEN_PAREN
    167         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    168     ;
    169 
    170 ConcatTerm
    171     : PARSEOP_CONCATENATE
    172         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
    173         TermArg
    174         TermArgItem
    175         Target
    176         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    177     | PARSEOP_CONCATENATE
    178         PARSEOP_OPEN_PAREN
    179         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    180     ;
    181 
    182 ConcatResTerm
    183     : PARSEOP_CONCATENATERESTEMPLATE
    184         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (
    185                                         PARSEOP_CONCATENATERESTEMPLATE);}
    186         TermArg
    187         TermArgItem
    188         Target
    189         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    190     | PARSEOP_CONCATENATERESTEMPLATE
    191         PARSEOP_OPEN_PAREN
    192         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    193     ;
    194 
    195 CondRefOfTerm
    196     : PARSEOP_CONDREFOF
    197         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
    198         CondRefOfSource
    199         Target
    200         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    201     | PARSEOP_CONDREFOF
    202         PARSEOP_OPEN_PAREN
    203         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    204     ;
    205 
    206 ConnectionTerm
    207     : PARSEOP_CONNECTION
    208         PARSEOP_OPEN_PAREN
    209         NameString
    210         PARSEOP_CLOSE_PAREN         {$$ = TrCreateNode (PARSEOP_CONNECTION,1,$3);}
    211     | PARSEOP_CONNECTION
    212         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CONNECTION);}
    213         ResourceMacroTerm
    214         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3, 1,
    215                                         TrLinkChildren (
    216                                             TrCreateLeafNode (PARSEOP_RESOURCETEMPLATE), 3,
    217                                             TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
    218                                             TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
    219                                             $4));}
    220     | PARSEOP_CONNECTION
    221         PARSEOP_OPEN_PAREN
    222         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    223     ;
    224 
    225 ContinueTerm
    226     : PARSEOP_CONTINUE              {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
    227     ;
    228 
    229 CopyObjectTerm
    230     : PARSEOP_COPYOBJECT
    231         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
    232         TermArg
    233         ',' SimpleName
    234         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,
    235                                         TrSetNodeFlags ($6, NODE_IS_TARGET));}
    236     | PARSEOP_COPYOBJECT
    237         PARSEOP_OPEN_PAREN
    238         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    239     ;
    240 
    241 CreateBitFieldTerm
    242     : PARSEOP_CREATEBITFIELD
    243         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
    244         TermArg
    245         TermArgItem
    246         NameStringItem
    247         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,
    248                                         TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    249     | PARSEOP_CREATEBITFIELD
    250         PARSEOP_OPEN_PAREN
    251         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    252     ;
    253 
    254 CreateByteFieldTerm
    255     : PARSEOP_CREATEBYTEFIELD
    256         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
    257         TermArg
    258         TermArgItem
    259         NameStringItem
    260         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,
    261                                         TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    262     | PARSEOP_CREATEBYTEFIELD
    263         PARSEOP_OPEN_PAREN
    264         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    265     ;
    266 
    267 CreateDWordFieldTerm
    268     : PARSEOP_CREATEDWORDFIELD
    269         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
    270         TermArg
    271         TermArgItem
    272         NameStringItem
    273         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,
    274                                         TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    275     | PARSEOP_CREATEDWORDFIELD
    276         PARSEOP_OPEN_PAREN
    277         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    278     ;
    279 
    280 CreateFieldTerm
    281     : PARSEOP_CREATEFIELD
    282         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
    283         TermArg
    284         TermArgItem
    285         TermArgItem
    286         NameStringItem
    287         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,
    288                                         TrSetNodeFlags ($7, NODE_IS_NAME_DECLARATION));}
    289     | PARSEOP_CREATEFIELD
    290         PARSEOP_OPEN_PAREN
    291         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    292     ;
    293 
    294 CreateQWordFieldTerm
    295     : PARSEOP_CREATEQWORDFIELD
    296         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
    297         TermArg
    298         TermArgItem
    299         NameStringItem
    300         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,
    301                                         TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    302     | PARSEOP_CREATEQWORDFIELD
    303         PARSEOP_OPEN_PAREN
    304         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    305     ;
    306 
    307 CreateWordFieldTerm
    308     : PARSEOP_CREATEWORDFIELD
    309         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
    310         TermArg
    311         TermArgItem
    312         NameStringItem
    313         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,
    314                                         TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
    315     | PARSEOP_CREATEWORDFIELD
    316         PARSEOP_OPEN_PAREN
    317         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    318     ;
    319 
    320 DataRegionTerm
    321     : PARSEOP_DATATABLEREGION
    322         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
    323         NameString
    324         TermArgItem
    325         TermArgItem
    326         TermArgItem
    327         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,4,
    328                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$6,$7);}
    329     | PARSEOP_DATATABLEREGION
    330         PARSEOP_OPEN_PAREN
    331         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    332     ;
    333 
    334 DebugTerm
    335     : PARSEOP_DEBUG                 {$$ = TrCreateLeafNode (PARSEOP_DEBUG);}
    336     ;
    337 
    338 DecTerm
    339     : PARSEOP_DECREMENT
    340         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
    341         SuperName
    342         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
    343     | PARSEOP_DECREMENT
    344         PARSEOP_OPEN_PAREN
    345         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    346     ;
    347 
    348 DefaultTerm
    349     : PARSEOP_DEFAULT '{'           {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
    350         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
    351     | PARSEOP_DEFAULT '{'
    352         error '}'                   {$$ = AslDoError(); yyclearin;}
    353     ;
    354 
    355 DerefOfTerm
    356     : PARSEOP_DEREFOF
    357         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
    358         DerefOfSource
    359         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
    360     | PARSEOP_DEREFOF
    361         PARSEOP_OPEN_PAREN
    362         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    363     ;
    364 
    365 DeviceTerm
    366     : PARSEOP_DEVICE
    367         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
    368         NameString
    369         PARSEOP_CLOSE_PAREN '{'
    370             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,
    371                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
    372     | PARSEOP_DEVICE
    373         PARSEOP_OPEN_PAREN
    374         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    375     ;
    376 
    377 DivideTerm
    378     : PARSEOP_DIVIDE
    379         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
    380         TermArg
    381         TermArgItem
    382         Target
    383         Target
    384         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
    385     | PARSEOP_DIVIDE
    386         PARSEOP_OPEN_PAREN
    387         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    388     ;
    389 
    390 EISAIDTerm
    391     : PARSEOP_EISAID
    392         PARSEOP_OPEN_PAREN
    393         StringData
    394         PARSEOP_CLOSE_PAREN         {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
    395     | PARSEOP_EISAID
    396         PARSEOP_OPEN_PAREN
    397         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    398     ;
    399 
    400 ElseIfTerm
    401     : IfTerm ElseTerm               {$$ = TrLinkPeerNode ($1,$2);}
    402     ;
    403 
    404 ElseTerm
    405     :                               {$$ = NULL;}
    406     | PARSEOP_ELSE '{'              {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
    407         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
    408 
    409     | PARSEOP_ELSE '{'
    410         error '}'                   {$$ = AslDoError(); yyclearin;}
    411 
    412     | PARSEOP_ELSE
    413         error                       {$$ = AslDoError(); yyclearin;}
    414 
    415     | PARSEOP_ELSEIF
    416         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
    417         TermArg                     {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
    418         PARSEOP_CLOSE_PAREN '{'
    419             TermList '}'            {TrLinkChildren ($<n>5,2,$4,$8);}
    420         ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
    421                                     {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
    422 
    423     | PARSEOP_ELSEIF
    424         PARSEOP_OPEN_PAREN
    425         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    426 
    427     | PARSEOP_ELSEIF
    428         error                       {$$ = AslDoError(); yyclearin;}
    429     ;
    430 
    431 EventTerm
    432     : PARSEOP_EVENT
    433         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
    434         NameString
    435         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,
    436                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
    437     | PARSEOP_EVENT
    438         PARSEOP_OPEN_PAREN
    439         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    440     ;
    441 
    442 ExternalTerm
    443     : PARSEOP_EXTERNAL
    444         PARSEOP_OPEN_PAREN
    445         NameString
    446         OptionalObjectTypeKeyword
    447         OptionalParameterTypePackage
    448         OptionalParameterTypesPackage
    449         PARSEOP_CLOSE_PAREN         {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
    450     | PARSEOP_EXTERNAL
    451         PARSEOP_OPEN_PAREN
    452         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    453     ;
    454 
    455 FatalTerm
    456     : PARSEOP_FATAL
    457         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
    458         ByteConstExpr
    459         ',' DWordConstExpr
    460         TermArgItem
    461         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
    462     | PARSEOP_FATAL
    463         PARSEOP_OPEN_PAREN
    464         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    465     ;
    466 
    467 FieldTerm
    468     : PARSEOP_FIELD
    469         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
    470         NameString
    471         ',' AccessTypeKeyword
    472         ',' LockRuleKeyword
    473         ',' UpdateRuleKeyword
    474         PARSEOP_CLOSE_PAREN '{'
    475             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
    476     | PARSEOP_FIELD
    477         PARSEOP_OPEN_PAREN
    478         error PARSEOP_CLOSE_PAREN
    479         '{' error '}'               {$$ = AslDoError(); yyclearin;}
    480     ;
    481 
    482 FindSetLeftBitTerm
    483     : PARSEOP_FINDSETLEFTBIT
    484         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
    485         TermArg
    486         Target
    487         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    488     | PARSEOP_FINDSETLEFTBIT
    489         PARSEOP_OPEN_PAREN
    490         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    491     ;
    492 
    493 FindSetRightBitTerm
    494     : PARSEOP_FINDSETRIGHTBIT
    495         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
    496         TermArg
    497         Target
    498         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    499     | PARSEOP_FINDSETRIGHTBIT
    500         PARSEOP_OPEN_PAREN
    501         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    502     ;
    503 
    504     /* Convert a For() loop to a While() loop */
    505 ForTerm
    506     : PARSEOP_FOR
    507         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
    508         OptionalTermArg ','         {}
    509         OptionalPredicate ','
    510         OptionalTermArg             {$<n>$ = TrLinkPeerNode ($4,$<n>3);
    511                                             TrSetParent ($9,$<n>3);}                /* New parent is WHILE */
    512         PARSEOP_CLOSE_PAREN
    513         '{' TermList '}'            {$<n>$ = TrLinkChildren ($<n>3,2,$7,$13);}
    514                                     {$<n>$ = TrLinkPeerNode ($13,$9);
    515                                         $$ = $<n>10;}
    516     ;
    517 
    518 OptionalPredicate
    519     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, 1);}
    520     | TermArg                       {$$ = $1;}
    521     ;
    522 
    523 FprintfTerm
    524     : PARSEOP_FPRINTF
    525         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_FPRINTF);}
    526         TermArg ','
    527         StringData
    528         PrintfArgList
    529         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
    530     | PARSEOP_FPRINTF
    531         PARSEOP_OPEN_PAREN
    532         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    533     ;
    534 
    535 FromBCDTerm
    536     : PARSEOP_FROMBCD
    537         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
    538         TermArg
    539         Target
    540         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    541     | PARSEOP_FROMBCD
    542         PARSEOP_OPEN_PAREN
    543         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    544     ;
    545 
    546 FunctionTerm
    547     : PARSEOP_FUNCTION
    548         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
    549         NameString
    550         OptionalParameterTypePackage
    551         OptionalParameterTypesPackage
    552         PARSEOP_CLOSE_PAREN '{'
    553             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,
    554                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
    555                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
    556                                         TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
    557                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
    558     | PARSEOP_FUNCTION
    559         PARSEOP_OPEN_PAREN
    560         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    561     ;
    562 
    563 IfTerm
    564     : PARSEOP_IF
    565         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
    566         TermArg
    567         PARSEOP_CLOSE_PAREN '{'
    568             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
    569 
    570     | PARSEOP_IF
    571         PARSEOP_OPEN_PAREN
    572         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    573     ;
    574 
    575 IncludeTerm
    576     : PARSEOP_INCLUDE
    577         PARSEOP_OPEN_PAREN
    578         String
    579         PARSEOP_CLOSE_PAREN         {$$ = TrUpdateNode (PARSEOP_INCLUDE, $3);
    580                                         FlOpenIncludeFile ($3);}
    581     ;
    582 
    583 IncludeEndTerm
    584     : PARSEOP_INCLUDE_END           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);
    585                                         TrSetCurrentFilename ($$);}
    586     ;
    587 
    588 IncTerm
    589     : PARSEOP_INCREMENT
    590         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
    591         SuperName
    592         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
    593     | PARSEOP_INCREMENT
    594         PARSEOP_OPEN_PAREN
    595         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    596     ;
    597 
    598 IndexFieldTerm
    599     : PARSEOP_INDEXFIELD
    600         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
    601         NameString
    602         NameStringItem
    603         ',' AccessTypeKeyword
    604         ',' LockRuleKeyword
    605         ',' UpdateRuleKeyword
    606         PARSEOP_CLOSE_PAREN '{'
    607             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
    608     | PARSEOP_INDEXFIELD
    609         PARSEOP_OPEN_PAREN
    610         error PARSEOP_CLOSE_PAREN
    611         '{' error '}'               {$$ = AslDoError(); yyclearin;}
    612     ;
    613 
    614 IndexTerm
    615     : PARSEOP_INDEX
    616         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
    617         TermArg
    618         TermArgItem
    619         Target
    620         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    621     | PARSEOP_INDEX
    622         PARSEOP_OPEN_PAREN
    623         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    624     ;
    625 
    626 LAndTerm
    627     : PARSEOP_LAND
    628         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
    629         TermArg
    630         TermArgItem
    631         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    632     | PARSEOP_LAND
    633         PARSEOP_OPEN_PAREN
    634         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    635     ;
    636 
    637 LEqualTerm
    638     : PARSEOP_LEQUAL
    639         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
    640         TermArg
    641         TermArgItem
    642         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    643     | PARSEOP_LEQUAL
    644         PARSEOP_OPEN_PAREN
    645         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    646     ;
    647 
    648 LGreaterEqualTerm
    649     : PARSEOP_LGREATEREQUAL
    650         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
    651         TermArg
    652         TermArgItem
    653         PARSEOP_CLOSE_PAREN         {$$ = TrCreateNode (PARSEOP_LNOT, 1,
    654                                         TrLinkChildren ($<n>3,2,$4,$5));}
    655     | PARSEOP_LGREATEREQUAL
    656         PARSEOP_OPEN_PAREN
    657         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    658     ;
    659 
    660 LGreaterTerm
    661     : PARSEOP_LGREATER
    662         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
    663         TermArg
    664         TermArgItem
    665         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    666     | PARSEOP_LGREATER
    667         PARSEOP_OPEN_PAREN
    668         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    669     ;
    670 
    671 LLessEqualTerm
    672     : PARSEOP_LLESSEQUAL
    673         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
    674         TermArg
    675         TermArgItem
    676         PARSEOP_CLOSE_PAREN         {$$ = TrCreateNode (PARSEOP_LNOT, 1,
    677                                         TrLinkChildren ($<n>3,2,$4,$5));}
    678     | PARSEOP_LLESSEQUAL
    679         PARSEOP_OPEN_PAREN
    680         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    681     ;
    682 
    683 LLessTerm
    684     : PARSEOP_LLESS
    685         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
    686         TermArg
    687         TermArgItem
    688         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    689     | PARSEOP_LLESS
    690         PARSEOP_OPEN_PAREN
    691         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    692     ;
    693 
    694 LNotEqualTerm
    695     : PARSEOP_LNOTEQUAL
    696         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
    697         TermArg
    698         TermArgItem
    699         PARSEOP_CLOSE_PAREN         {$$ = TrCreateNode (PARSEOP_LNOT, 1,
    700                                         TrLinkChildren ($<n>3,2,$4,$5));}
    701     | PARSEOP_LNOTEQUAL
    702         PARSEOP_OPEN_PAREN
    703         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    704     ;
    705 
    706 LNotTerm
    707     : PARSEOP_LNOT
    708         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
    709         TermArg
    710         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
    711     | PARSEOP_LNOT
    712         PARSEOP_OPEN_PAREN
    713         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    714     ;
    715 
    716 LoadTableTerm
    717     : PARSEOP_LOADTABLE
    718         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
    719         TermArg
    720         TermArgItem
    721         TermArgItem
    722         OptionalListString
    723         OptionalListString
    724         OptionalReference
    725         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,6,$4,$5,$6,$7,$8,$9);}
    726     | PARSEOP_LOADTABLE
    727         PARSEOP_OPEN_PAREN
    728         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    729     ;
    730 
    731 LoadTerm
    732     : PARSEOP_LOAD
    733         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
    734         NameString
    735         RequiredTarget
    736         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    737     | PARSEOP_LOAD
    738         PARSEOP_OPEN_PAREN
    739         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    740     ;
    741 
    742 LocalTerm
    743     : PARSEOP_LOCAL0                {$$ = TrCreateLeafNode (PARSEOP_LOCAL0);}
    744     | PARSEOP_LOCAL1                {$$ = TrCreateLeafNode (PARSEOP_LOCAL1);}
    745     | PARSEOP_LOCAL2                {$$ = TrCreateLeafNode (PARSEOP_LOCAL2);}
    746     | PARSEOP_LOCAL3                {$$ = TrCreateLeafNode (PARSEOP_LOCAL3);}
    747     | PARSEOP_LOCAL4                {$$ = TrCreateLeafNode (PARSEOP_LOCAL4);}
    748     | PARSEOP_LOCAL5                {$$ = TrCreateLeafNode (PARSEOP_LOCAL5);}
    749     | PARSEOP_LOCAL6                {$$ = TrCreateLeafNode (PARSEOP_LOCAL6);}
    750     | PARSEOP_LOCAL7                {$$ = TrCreateLeafNode (PARSEOP_LOCAL7);}
    751     ;
    752 
    753 LOrTerm
    754     : PARSEOP_LOR
    755         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
    756         TermArg
    757         TermArgItem
    758         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    759     | PARSEOP_LOR
    760         PARSEOP_OPEN_PAREN
    761         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    762     ;
    763 
    764 MatchTerm
    765     : PARSEOP_MATCH
    766         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
    767         TermArg
    768         ',' MatchOpKeyword
    769         TermArgItem
    770         ',' MatchOpKeyword
    771         TermArgItem
    772         TermArgItem
    773         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$7,$9,$10,$11);}
    774     | PARSEOP_MATCH
    775         PARSEOP_OPEN_PAREN
    776         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    777     ;
    778 
    779 MethodTerm
    780     : PARSEOP_METHOD
    781         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
    782         NameString
    783         OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
    784         OptionalSerializeRuleKeyword
    785         OptionalByteConstExpr
    786         OptionalParameterTypePackage
    787         OptionalParameterTypesPackage
    788         PARSEOP_CLOSE_PAREN '{'
    789             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,
    790                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
    791                                         $5,$7,$8,$9,$10,$13);}
    792     | PARSEOP_METHOD
    793         PARSEOP_OPEN_PAREN
    794         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    795     ;
    796 
    797 MidTerm
    798     : PARSEOP_MID
    799         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
    800         TermArg
    801         TermArgItem
    802         TermArgItem
    803         Target
    804         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
    805     | PARSEOP_MID
    806         PARSEOP_OPEN_PAREN
    807         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    808     ;
    809 
    810 ModTerm
    811     : PARSEOP_MOD
    812         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
    813         TermArg
    814         TermArgItem
    815         Target
    816         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    817     | PARSEOP_MOD
    818         PARSEOP_OPEN_PAREN
    819         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    820     ;
    821 
    822 MultiplyTerm
    823     : PARSEOP_MULTIPLY
    824         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
    825         TermArg
    826         TermArgItem
    827         Target
    828         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    829     | PARSEOP_MULTIPLY
    830         PARSEOP_OPEN_PAREN
    831         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    832     ;
    833 
    834 MutexTerm
    835     : PARSEOP_MUTEX
    836         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
    837         NameString
    838         ',' ByteConstExpr
    839         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,
    840                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
    841     | PARSEOP_MUTEX
    842         PARSEOP_OPEN_PAREN
    843         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    844     ;
    845 
    846 NameTerm
    847     : PARSEOP_NAME
    848         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
    849         NameString
    850         ',' DataObject
    851         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,
    852                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
    853     | PARSEOP_NAME
    854         PARSEOP_OPEN_PAREN
    855         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    856     ;
    857 
    858 NAndTerm
    859     : PARSEOP_NAND
    860         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
    861         TermArg
    862         TermArgItem
    863         Target
    864         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    865     | PARSEOP_NAND
    866         PARSEOP_OPEN_PAREN
    867         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    868     ;
    869 
    870 NoOpTerm
    871     : PARSEOP_NOOP                  {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
    872     ;
    873 
    874 NOrTerm
    875     : PARSEOP_NOR
    876         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
    877         TermArg
    878         TermArgItem
    879         Target
    880         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    881     | PARSEOP_NOR
    882         PARSEOP_OPEN_PAREN
    883         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    884     ;
    885 
    886 NotifyTerm
    887     : PARSEOP_NOTIFY
    888         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
    889         SuperName
    890         TermArgItem
    891         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    892     | PARSEOP_NOTIFY
    893         PARSEOP_OPEN_PAREN
    894         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    895     ;
    896 
    897 NotTerm
    898     : PARSEOP_NOT
    899         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
    900         TermArg
    901         Target
    902         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    903     | PARSEOP_NOT
    904         PARSEOP_OPEN_PAREN
    905         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    906     ;
    907 
    908 ObjectTypeTerm
    909     : PARSEOP_OBJECTTYPE
    910         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
    911         ObjectTypeSource
    912         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
    913     | PARSEOP_OBJECTTYPE
    914         PARSEOP_OPEN_PAREN
    915         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    916     ;
    917 
    918 OffsetTerm
    919     : PARSEOP_OFFSET
    920         PARSEOP_OPEN_PAREN
    921         AmlPackageLengthTerm
    922         PARSEOP_CLOSE_PAREN         {$$ = TrCreateNode (PARSEOP_OFFSET,1,$3);}
    923     | PARSEOP_OFFSET
    924         PARSEOP_OPEN_PAREN
    925         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    926     ;
    927 
    928 OpRegionTerm
    929     : PARSEOP_OPERATIONREGION
    930         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
    931         NameString
    932         ',' OpRegionSpaceIdTerm
    933         TermArgItem
    934         TermArgItem
    935         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,4,
    936                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
    937                                         $6,$7,$8);}
    938     | PARSEOP_OPERATIONREGION
    939         PARSEOP_OPEN_PAREN
    940         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    941     ;
    942 
    943 OpRegionSpaceIdTerm
    944     : RegionSpaceKeyword            {}
    945     | ByteConst                     {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
    946     ;
    947 
    948 OrTerm
    949     : PARSEOP_OR
    950         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
    951         TermArg
    952         TermArgItem
    953         Target
    954         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
    955     | PARSEOP_OR
    956         PARSEOP_OPEN_PAREN
    957         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    958     ;
    959 
    960 PackageTerm
    961     : PARSEOP_PACKAGE               {$<n>$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
    962         OptionalDataCount
    963         '{' PackageList '}'         {$$ = TrLinkChildren ($<n>2,2,$3,$5);}
    964 
    965 PowerResTerm
    966     : PARSEOP_POWERRESOURCE
    967         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
    968         NameString
    969         ',' ByteConstExpr
    970         ',' WordConstExpr
    971         PARSEOP_CLOSE_PAREN '{'
    972             TermList '}'            {$$ = TrLinkChildren ($<n>3,4,
    973                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
    974                                         $6,$8,$11);}
    975     | PARSEOP_POWERRESOURCE
    976         PARSEOP_OPEN_PAREN
    977         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    978     ;
    979 
    980 PrintfTerm
    981     : PARSEOP_PRINTF
    982         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_PRINTF);}
    983         StringData
    984         PrintfArgList
    985         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
    986     | PARSEOP_PRINTF
    987         PARSEOP_OPEN_PAREN
    988         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
    989     ;
    990 
    991 PrintfArgList
    992     :                               {$$ = NULL;}
    993     | TermArg                       {$$ = $1;}
    994     | PrintfArgList ','
    995        TermArg                      {$$ = TrLinkPeerNode ($1, $3);}
    996     ;
    997 
    998 ProcessorTerm
    999     : PARSEOP_PROCESSOR
   1000         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
   1001         NameString
   1002         ',' ByteConstExpr
   1003         OptionalDWordConstExpr
   1004         OptionalByteConstExpr
   1005         PARSEOP_CLOSE_PAREN '{'
   1006             TermList '}'            {$$ = TrLinkChildren ($<n>3,5,
   1007                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
   1008                                         $6,$7,$8,$11);}
   1009     | PARSEOP_PROCESSOR
   1010         PARSEOP_OPEN_PAREN
   1011         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1012     ;
   1013 
   1014 RawDataBufferTerm
   1015     : PARSEOP_DATABUFFER
   1016         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DATABUFFER);}
   1017         OptionalWordConst
   1018         PARSEOP_CLOSE_PAREN '{'
   1019             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1020     | PARSEOP_DATABUFFER
   1021         PARSEOP_OPEN_PAREN
   1022         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1023     ;
   1024 
   1025 /*
   1026  * In RefOf, the node isn't really a target, but we can't keep track of it after
   1027  * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
   1028  */
   1029 RefOfTerm
   1030     : PARSEOP_REFOF
   1031         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
   1032         RefOfSource
   1033         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,
   1034                                         TrSetNodeFlags ($4, NODE_IS_TARGET));}
   1035     | PARSEOP_REFOF
   1036         PARSEOP_OPEN_PAREN
   1037         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1038     ;
   1039 
   1040 ReleaseTerm
   1041     : PARSEOP_RELEASE
   1042         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
   1043         SuperName
   1044         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1045     | PARSEOP_RELEASE
   1046         PARSEOP_OPEN_PAREN
   1047         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1048     ;
   1049 
   1050 ResetTerm
   1051     : PARSEOP_RESET
   1052         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
   1053         SuperName
   1054         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1055     | PARSEOP_RESET
   1056         PARSEOP_OPEN_PAREN
   1057         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1058     ;
   1059 
   1060 ReturnTerm
   1061     : PARSEOP_RETURN
   1062         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
   1063         OptionalReturnArg
   1064         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1065     | PARSEOP_RETURN                {$$ = TrLinkChildren (
   1066                                         TrCreateLeafNode (PARSEOP_RETURN),1,
   1067                                         TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO),
   1068                                             NODE_IS_NULL_RETURN));}
   1069     | PARSEOP_RETURN
   1070         PARSEOP_OPEN_PAREN
   1071         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1072     ;
   1073 
   1074 ScopeTerm
   1075     : PARSEOP_SCOPE
   1076         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
   1077         NameString
   1078         PARSEOP_CLOSE_PAREN '{'
   1079             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,
   1080                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
   1081     | PARSEOP_SCOPE
   1082         PARSEOP_OPEN_PAREN
   1083         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1084     ;
   1085 
   1086 ShiftLeftTerm
   1087     : PARSEOP_SHIFTLEFT
   1088         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
   1089         TermArg
   1090         TermArgItem
   1091         Target
   1092         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1093     | PARSEOP_SHIFTLEFT
   1094         PARSEOP_OPEN_PAREN
   1095         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1096     ;
   1097 
   1098 ShiftRightTerm
   1099     : PARSEOP_SHIFTRIGHT
   1100         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
   1101         TermArg
   1102         TermArgItem
   1103         Target
   1104         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1105     | PARSEOP_SHIFTRIGHT
   1106         PARSEOP_OPEN_PAREN
   1107         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1108     ;
   1109 
   1110 SignalTerm
   1111     : PARSEOP_SIGNAL
   1112         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
   1113         SuperName
   1114         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1115     | PARSEOP_SIGNAL
   1116         PARSEOP_OPEN_PAREN
   1117         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1118     ;
   1119 
   1120 SizeOfTerm
   1121     : PARSEOP_SIZEOF
   1122         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
   1123         SuperName
   1124         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1125     | PARSEOP_SIZEOF
   1126         PARSEOP_OPEN_PAREN
   1127         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1128     ;
   1129 
   1130 SleepTerm
   1131     : PARSEOP_SLEEP
   1132         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
   1133         TermArg
   1134         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1135     | PARSEOP_SLEEP
   1136         PARSEOP_OPEN_PAREN
   1137         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1138     ;
   1139 
   1140 StallTerm
   1141     : PARSEOP_STALL
   1142         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
   1143         TermArg
   1144         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1145     | PARSEOP_STALL
   1146         PARSEOP_OPEN_PAREN
   1147         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1148     ;
   1149 
   1150 StoreTerm
   1151     : PARSEOP_STORE
   1152         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
   1153         TermArg
   1154         ',' SuperName
   1155         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,
   1156                                             TrSetNodeFlags ($6, NODE_IS_TARGET));}
   1157     | PARSEOP_STORE
   1158         PARSEOP_OPEN_PAREN
   1159         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1160     ;
   1161 
   1162 SubtractTerm
   1163     : PARSEOP_SUBTRACT
   1164         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
   1165         TermArg
   1166         TermArgItem
   1167         Target
   1168         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1169     | PARSEOP_SUBTRACT
   1170         PARSEOP_OPEN_PAREN
   1171         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1172     ;
   1173 
   1174 SwitchTerm
   1175     : PARSEOP_SWITCH
   1176         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
   1177         TermArg
   1178         PARSEOP_CLOSE_PAREN '{'
   1179             CaseDefaultTermList '}' {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1180     | PARSEOP_SWITCH
   1181         PARSEOP_OPEN_PAREN
   1182         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1183     ;
   1184 
   1185 ThermalZoneTerm
   1186     : PARSEOP_THERMALZONE
   1187         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
   1188         NameString
   1189         PARSEOP_CLOSE_PAREN '{'
   1190             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,
   1191                                         TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
   1192     | PARSEOP_THERMALZONE
   1193         PARSEOP_OPEN_PAREN
   1194         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1195     ;
   1196 
   1197 TimerTerm
   1198     : PARSEOP_TIMER
   1199         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
   1200         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,0);}
   1201     | PARSEOP_TIMER                 {$$ = TrLinkChildren (
   1202                                         TrCreateLeafNode (PARSEOP_TIMER),0);}
   1203     | PARSEOP_TIMER
   1204         PARSEOP_OPEN_PAREN
   1205         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1206     ;
   1207 
   1208 ToBCDTerm
   1209     : PARSEOP_TOBCD
   1210         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
   1211         TermArg
   1212         Target
   1213         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1214     | PARSEOP_TOBCD
   1215         PARSEOP_OPEN_PAREN
   1216         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1217     ;
   1218 
   1219 ToBufferTerm
   1220     : PARSEOP_TOBUFFER
   1221         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
   1222         TermArg
   1223         Target
   1224         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1225     | PARSEOP_TOBUFFER
   1226         PARSEOP_OPEN_PAREN
   1227         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1228     ;
   1229 
   1230 ToDecimalStringTerm
   1231     : PARSEOP_TODECIMALSTRING
   1232         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
   1233         TermArg
   1234         Target
   1235         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1236     | PARSEOP_TODECIMALSTRING
   1237         PARSEOP_OPEN_PAREN
   1238         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1239     ;
   1240 
   1241 ToHexStringTerm
   1242     : PARSEOP_TOHEXSTRING
   1243         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
   1244         TermArg
   1245         Target
   1246         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1247     | PARSEOP_TOHEXSTRING
   1248         PARSEOP_OPEN_PAREN
   1249         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1250     ;
   1251 
   1252 ToIntegerTerm
   1253     : PARSEOP_TOINTEGER
   1254         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
   1255         TermArg
   1256         Target
   1257         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1258     | PARSEOP_TOINTEGER
   1259         PARSEOP_OPEN_PAREN
   1260         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1261     ;
   1262 
   1263 ToPLDTerm
   1264     : PARSEOP_TOPLD
   1265         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_TOPLD);}
   1266         PldKeywordList
   1267         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1268     | PARSEOP_TOPLD
   1269         PARSEOP_OPEN_PAREN
   1270         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1271     ;
   1272 
   1273 PldKeywordList
   1274     :                               {$$ = NULL;}
   1275     | PldKeyword
   1276         PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkChildren ($1,1,$3);}
   1277     | PldKeyword
   1278         PARSEOP_EXP_EQUALS String   {$$ = TrLinkChildren ($1,1,$3);}
   1279     | PldKeywordList ','            /* Allows a trailing comma at list end */
   1280     | PldKeywordList ','
   1281         PldKeyword
   1282         PARSEOP_EXP_EQUALS Integer  {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
   1283     | PldKeywordList ','
   1284         PldKeyword
   1285         PARSEOP_EXP_EQUALS String   {$$ = TrLinkPeerNode ($1,TrLinkChildren ($3,1,$5));}
   1286     ;
   1287 
   1288 
   1289 ToStringTerm
   1290     : PARSEOP_TOSTRING
   1291         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
   1292         TermArg
   1293         OptionalCount
   1294         Target
   1295         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1296     | PARSEOP_TOSTRING
   1297         PARSEOP_OPEN_PAREN
   1298         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1299     ;
   1300 
   1301 ToUUIDTerm
   1302     : PARSEOP_TOUUID
   1303         PARSEOP_OPEN_PAREN
   1304         StringData
   1305         PARSEOP_CLOSE_PAREN         {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
   1306     | PARSEOP_TOUUID
   1307         PARSEOP_OPEN_PAREN
   1308         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1309     ;
   1310 
   1311 UnicodeTerm
   1312     : PARSEOP_UNICODE
   1313         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
   1314         StringData
   1315         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
   1316     | PARSEOP_UNICODE
   1317         PARSEOP_OPEN_PAREN
   1318         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1319     ;
   1320 
   1321 UnloadTerm
   1322     : PARSEOP_UNLOAD
   1323         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
   1324         SuperName
   1325         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,1,$4);}
   1326     | PARSEOP_UNLOAD
   1327         PARSEOP_OPEN_PAREN
   1328         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1329     ;
   1330 
   1331 WaitTerm
   1332     : PARSEOP_WAIT
   1333         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
   1334         SuperName
   1335         TermArgItem
   1336         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
   1337     | PARSEOP_WAIT
   1338         PARSEOP_OPEN_PAREN
   1339         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1340     ;
   1341 
   1342 XOrTerm
   1343     : PARSEOP_XOR
   1344         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
   1345         TermArg
   1346         TermArgItem
   1347         Target
   1348         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
   1349     | PARSEOP_XOR
   1350         PARSEOP_OPEN_PAREN
   1351         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1352     ;
   1353 
   1354 WhileTerm
   1355     : PARSEOP_WHILE
   1356         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
   1357         TermArg
   1358         PARSEOP_CLOSE_PAREN
   1359             '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
   1360     | PARSEOP_WHILE
   1361         PARSEOP_OPEN_PAREN
   1362         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
   1363     ;
   1364