Home | History | Annotate | Line # | Download | only in compiler
aslrules.y revision 1.1.1.1.2.6
      1          1.1  christos NoEcho('
      2          1.1  christos /******************************************************************************
      3          1.1  christos  *
      4  1.1.1.1.2.2     skrll  * Module Name: aslrules.y - Main Bison/Yacc production rules
      5  1.1.1.1.2.6     skrll  *                         - Keep this file synched with the
      6  1.1.1.1.2.6     skrll  *                           CvParseOpBlockType function in cvcompiler.c
      7          1.1  christos  *
      8          1.1  christos  *****************************************************************************/
      9          1.1  christos 
     10          1.1  christos /*
     11  1.1.1.1.2.5     skrll  * Copyright (C) 2000 - 2017, Intel Corp.
     12          1.1  christos  * All rights reserved.
     13          1.1  christos  *
     14          1.1  christos  * Redistribution and use in source and binary forms, with or without
     15          1.1  christos  * modification, are permitted provided that the following conditions
     16          1.1  christos  * are met:
     17          1.1  christos  * 1. Redistributions of source code must retain the above copyright
     18          1.1  christos  *    notice, this list of conditions, and the following disclaimer,
     19          1.1  christos  *    without modification.
     20          1.1  christos  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     21          1.1  christos  *    substantially similar to the "NO WARRANTY" disclaimer below
     22          1.1  christos  *    ("Disclaimer") and any redistribution must be conditioned upon
     23          1.1  christos  *    including a substantially similar Disclaimer requirement for further
     24          1.1  christos  *    binary redistribution.
     25          1.1  christos  * 3. Neither the names of the above-listed copyright holders nor the names
     26          1.1  christos  *    of any contributors may be used to endorse or promote products derived
     27          1.1  christos  *    from this software without specific prior written permission.
     28          1.1  christos  *
     29          1.1  christos  * Alternatively, this software may be distributed under the terms of the
     30          1.1  christos  * GNU General Public License ("GPL") version 2 as published by the Free
     31          1.1  christos  * Software Foundation.
     32          1.1  christos  *
     33          1.1  christos  * NO WARRANTY
     34          1.1  christos  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     35          1.1  christos  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     36          1.1  christos  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     37          1.1  christos  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     38          1.1  christos  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     39          1.1  christos  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     40          1.1  christos  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     41          1.1  christos  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     42          1.1  christos  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     43          1.1  christos  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     44          1.1  christos  * POSSIBILITY OF SUCH DAMAGES.
     45          1.1  christos  */
     46          1.1  christos 
     47          1.1  christos ')
     48          1.1  christos 
     49          1.1  christos /*******************************************************************************
     50          1.1  christos  *
     51  1.1.1.1.2.2     skrll  * ASL Root and Secondary Terms
     52          1.1  christos  *
     53          1.1  christos  ******************************************************************************/
     54          1.1  christos 
     55          1.1  christos /*
     56  1.1.1.1.2.2     skrll  * Root term. Allow multiple #line directives before the definition block
     57          1.1  christos  * to handle output from preprocessors
     58          1.1  christos  */
     59  1.1.1.1.2.2     skrll AslCode
     60  1.1.1.1.2.4     skrll     : DefinitionBlockList           {$<n>$ = TrLinkChildren (
     61  1.1.1.1.2.4     skrll                                         TrCreateLeafNode (PARSEOP_ASL_CODE),1, $1);}
     62          1.1  christos     | error                         {YYABORT; $$ = NULL;}
     63          1.1  christos     ;
     64          1.1  christos 
     65          1.1  christos 
     66          1.1  christos /*
     67          1.1  christos  * Note concerning support for "module-level code".
     68          1.1  christos  *
     69          1.1  christos  * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
     70          1.1  christos  * methods (the so-called module-level code.) This support was explicitly
     71          1.1  christos  * removed in ACPI 2.0, but this type of code continues to be created by
     72          1.1  christos  * BIOS vendors. In order to support the disassembly and recompilation of
     73          1.1  christos  * such code (and the porting of ASL code to iASL), iASL supports this
     74          1.1  christos  * code in violation of the current ACPI specification.
     75          1.1  christos  *
     76          1.1  christos  * The grammar change to support module-level code is to revert the
     77          1.1  christos  * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
     78          1.1  christos  * original use of {TermList} instead (see below.) This allows the use
     79          1.1  christos  * of Type1 and Type2 opcodes at module level.
     80  1.1.1.1.2.3     skrll  *
     81  1.1.1.1.2.3     skrll  * 04/2016: The module-level code is now allowed in the following terms:
     82  1.1.1.1.2.3     skrll  * DeviceTerm, PowerResTerm, ProcessorTerm, ScopeTerm, ThermalZoneTerm.
     83  1.1.1.1.2.3     skrll  * The ObjectList term is obsolete and has been removed.
     84          1.1  christos  */
     85          1.1  christos DefinitionBlockTerm
     86  1.1.1.1.2.5     skrll     : PARSEOP_DEFINITION_BLOCK
     87  1.1.1.1.2.6     skrll         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK); COMMENT_CAPTURE_OFF;}
     88          1.1  christos         String ','
     89          1.1  christos         String ','
     90          1.1  christos         ByteConst ','
     91          1.1  christos         String ','
     92          1.1  christos         String ','
     93          1.1  christos         DWordConst
     94  1.1.1.1.2.6     skrll         PARSEOP_CLOSE_PAREN         {TrSetEndLineNumber ($<n>3); COMMENT_CAPTURE_ON;}
     95  1.1.1.1.2.4     skrll             '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,7,
     96  1.1.1.1.2.4     skrll                                         $4,$6,$8,$10,$12,$14,$18);}
     97          1.1  christos     ;
     98          1.1  christos 
     99  1.1.1.1.2.2     skrll DefinitionBlockList
    100  1.1.1.1.2.2     skrll     : DefinitionBlockTerm
    101  1.1.1.1.2.2     skrll     | DefinitionBlockTerm
    102  1.1.1.1.2.2     skrll         DefinitionBlockList         {$$ = TrLinkPeerNodes (2, $1,$2);}
    103  1.1.1.1.2.1     skrll     ;
    104  1.1.1.1.2.1     skrll 
    105  1.1.1.1.2.5     skrll 
    106  1.1.1.1.2.5     skrll /******* Basic ASCII identifiers **************************************************/
    107  1.1.1.1.2.5     skrll 
    108  1.1.1.1.2.4     skrll /* Allow IO, DMA, IRQ Resource macro and FOR macro names to also be used as identifiers */
    109  1.1.1.1.2.4     skrll 
    110  1.1.1.1.2.4     skrll NameString
    111  1.1.1.1.2.4     skrll     : NameSeg                       {}
    112  1.1.1.1.2.4     skrll     | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) $1);}
    113  1.1.1.1.2.4     skrll     | PARSEOP_IO                    {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
    114  1.1.1.1.2.4     skrll     | PARSEOP_DMA                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
    115  1.1.1.1.2.4     skrll     | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
    116  1.1.1.1.2.4     skrll     | PARSEOP_FOR                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "FOR");}
    117  1.1.1.1.2.4     skrll     ;
    118  1.1.1.1.2.4     skrll /*
    119  1.1.1.1.2.4     skrll NameSeg
    120  1.1.1.1.2.4     skrll     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT)
    121  1.1.1.1.2.5     skrll                                         TrNormalizeNameSeg ($1));}
    122  1.1.1.1.2.4     skrll     ;
    123  1.1.1.1.2.4     skrll */
    124  1.1.1.1.2.4     skrll 
    125  1.1.1.1.2.4     skrll NameSeg
    126  1.1.1.1.2.4     skrll     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
    127  1.1.1.1.2.5     skrll                                         (ACPI_NATIVE_INT) AslCompilerlval.s);}
    128  1.1.1.1.2.4     skrll     ;
    129  1.1.1.1.2.4     skrll 
    130  1.1.1.1.2.4     skrll 
    131  1.1.1.1.2.5     skrll /******* Fundamental argument/statement types ***********************************/
    132  1.1.1.1.2.5     skrll 
    133  1.1.1.1.2.5     skrll Term
    134  1.1.1.1.2.5     skrll     : Object                        {}
    135  1.1.1.1.2.5     skrll     | Type1Opcode                   {}
    136  1.1.1.1.2.5     skrll     | Type2Opcode                   {}
    137  1.1.1.1.2.5     skrll     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    138  1.1.1.1.2.5     skrll     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    139  1.1.1.1.2.5     skrll     | Type2BufferOpcode             {}
    140  1.1.1.1.2.5     skrll     | Type2BufferOrStringOpcode     {}
    141  1.1.1.1.2.5     skrll     | error                         {$$ = AslDoError(); yyclearin;}
    142  1.1.1.1.2.5     skrll     ;
    143  1.1.1.1.2.5     skrll 
    144  1.1.1.1.2.2     skrll SuperName
    145  1.1.1.1.2.5     skrll     : SimpleName                    {}
    146  1.1.1.1.2.2     skrll     | DebugTerm                     {}
    147  1.1.1.1.2.2     skrll     | Type6Opcode                   {}
    148  1.1.1.1.2.4     skrll     ;
    149  1.1.1.1.2.1     skrll 
    150  1.1.1.1.2.2     skrll Target
    151  1.1.1.1.2.2     skrll     :                               {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
    152  1.1.1.1.2.2     skrll     | ','                           {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
    153  1.1.1.1.2.2     skrll     | ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
    154          1.1  christos     ;
    155          1.1  christos 
    156  1.1.1.1.2.5     skrll RequiredTarget
    157  1.1.1.1.2.5     skrll     : ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
    158  1.1.1.1.2.5     skrll     ;
    159  1.1.1.1.2.5     skrll 
    160  1.1.1.1.2.2     skrll TermArg
    161  1.1.1.1.2.5     skrll     : SimpleName                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    162  1.1.1.1.2.5     skrll     | Type2Opcode                   {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    163  1.1.1.1.2.2     skrll     | DataObject                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    164  1.1.1.1.2.5     skrll /*
    165  1.1.1.1.2.5     skrll     | PARSEOP_OPEN_PAREN
    166  1.1.1.1.2.5     skrll         TermArg
    167  1.1.1.1.2.5     skrll         PARSEOP_CLOSE_PAREN         {}
    168  1.1.1.1.2.5     skrll */
    169          1.1  christos     ;
    170          1.1  christos 
    171  1.1.1.1.2.2     skrll /*
    172  1.1.1.1.2.2     skrll  NOTE: Removed from TermArg due to reduce/reduce conflicts:
    173  1.1.1.1.2.2     skrll     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    174  1.1.1.1.2.2     skrll     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    175  1.1.1.1.2.2     skrll     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    176  1.1.1.1.2.2     skrll     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
    177          1.1  christos 
    178  1.1.1.1.2.2     skrll */
    179          1.1  christos 
    180  1.1.1.1.2.2     skrll MethodInvocationTerm
    181  1.1.1.1.2.5     skrll     : NameString
    182  1.1.1.1.2.6     skrll         PARSEOP_OPEN_PAREN          {TrUpdateNode (PARSEOP_METHODCALL, $1); COMMENT_CAPTURE_OFF;}
    183  1.1.1.1.2.5     skrll         ArgList
    184  1.1.1.1.2.6     skrll         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildNode ($1,$4); COMMENT_CAPTURE_ON;}
    185          1.1  christos     ;
    186          1.1  christos 
    187  1.1.1.1.2.2     skrll /* OptionalCount must appear before ByteList or an incorrect reduction will result */
    188          1.1  christos 
    189  1.1.1.1.2.2     skrll OptionalCount
    190  1.1.1.1.2.2     skrll     :                               {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
    191  1.1.1.1.2.2     skrll     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
    192  1.1.1.1.2.2     skrll     | ',' TermArg                   {$$ = $2;}
    193          1.1  christos     ;
    194          1.1  christos 
    195  1.1.1.1.2.4     skrll /*
    196  1.1.1.1.2.4     skrll  * Data count for buffers and packages (byte count for buffers,
    197  1.1.1.1.2.4     skrll  * element count for packages).
    198  1.1.1.1.2.4     skrll  */
    199  1.1.1.1.2.4     skrll OptionalDataCount
    200  1.1.1.1.2.4     skrll 
    201  1.1.1.1.2.4     skrll         /* Legacy ASL */
    202  1.1.1.1.2.4     skrll     :                               {$$ = NULL;}
    203  1.1.1.1.2.5     skrll     | PARSEOP_OPEN_PAREN
    204  1.1.1.1.2.5     skrll         TermArg
    205  1.1.1.1.2.5     skrll         PARSEOP_CLOSE_PAREN         {$$ = $2;}
    206  1.1.1.1.2.5     skrll     | PARSEOP_OPEN_PAREN
    207  1.1.1.1.2.5     skrll         PARSEOP_CLOSE_PAREN         {$$ = NULL;}
    208  1.1.1.1.2.4     skrll 
    209  1.1.1.1.2.4     skrll         /* C-style (ASL+) -- adds equals term */
    210  1.1.1.1.2.4     skrll 
    211  1.1.1.1.2.4     skrll     |  PARSEOP_EXP_EQUALS           {$$ = NULL;}
    212  1.1.1.1.2.4     skrll 
    213  1.1.1.1.2.5     skrll     | PARSEOP_OPEN_PAREN
    214  1.1.1.1.2.5     skrll         TermArg
    215  1.1.1.1.2.5     skrll         PARSEOP_CLOSE_PAREN
    216  1.1.1.1.2.4     skrll         PARSEOP_EXP_EQUALS          {$$ = $2;}
    217  1.1.1.1.2.4     skrll 
    218  1.1.1.1.2.5     skrll     | PARSEOP_OPEN_PAREN
    219  1.1.1.1.2.5     skrll         PARSEOP_CLOSE_PAREN
    220  1.1.1.1.2.5     skrll         String
    221  1.1.1.1.2.4     skrll         PARSEOP_EXP_EQUALS          {$$ = NULL;}
    222          1.1  christos     ;
    223          1.1  christos 
    224          1.1  christos 
    225  1.1.1.1.2.2     skrll /******* List Terms **************************************************/
    226          1.1  christos 
    227  1.1.1.1.2.5     skrll     /* ACPI 3.0 -- allow semicolons between terms */
    228  1.1.1.1.2.5     skrll 
    229  1.1.1.1.2.5     skrll TermList
    230  1.1.1.1.2.5     skrll     :                               {$$ = NULL;}
    231  1.1.1.1.2.5     skrll     | TermList Term                 {$$ = TrLinkPeerNode (
    232  1.1.1.1.2.5     skrll                                         TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
    233  1.1.1.1.2.5     skrll     | TermList Term ';'             {$$ = TrLinkPeerNode (
    234  1.1.1.1.2.5     skrll                                         TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
    235  1.1.1.1.2.5     skrll     | TermList ';' Term             {$$ = TrLinkPeerNode (
    236  1.1.1.1.2.5     skrll                                         TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
    237  1.1.1.1.2.5     skrll     | TermList ';' Term ';'         {$$ = TrLinkPeerNode (
    238  1.1.1.1.2.5     skrll                                         TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
    239  1.1.1.1.2.5     skrll     ;
    240  1.1.1.1.2.5     skrll 
    241  1.1.1.1.2.2     skrll ArgList
    242  1.1.1.1.2.2     skrll     :                               {$$ = NULL;}
    243  1.1.1.1.2.2     skrll     | TermArg
    244  1.1.1.1.2.2     skrll     | ArgList ','                   /* Allows a trailing comma at list end */
    245  1.1.1.1.2.2     skrll     | ArgList ','
    246  1.1.1.1.2.2     skrll         TermArg                     {$$ = TrLinkPeerNode ($1,$3);}
    247          1.1  christos     ;
    248          1.1  christos 
    249  1.1.1.1.2.2     skrll ByteList
    250  1.1.1.1.2.2     skrll     :                               {$$ = NULL;}
    251  1.1.1.1.2.2     skrll     | ByteConstExpr
    252  1.1.1.1.2.2     skrll     | ByteList ','                  /* Allows a trailing comma at list end */
    253  1.1.1.1.2.2     skrll     | ByteList ','
    254  1.1.1.1.2.2     skrll         ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
    255          1.1  christos     ;
    256          1.1  christos 
    257  1.1.1.1.2.2     skrll DWordList
    258  1.1.1.1.2.2     skrll     :                               {$$ = NULL;}
    259  1.1.1.1.2.2     skrll     | DWordConstExpr
    260  1.1.1.1.2.2     skrll     | DWordList ','                 /* Allows a trailing comma at list end */
    261  1.1.1.1.2.2     skrll     | DWordList ','
    262  1.1.1.1.2.2     skrll         DWordConstExpr              {$$ = TrLinkPeerNode ($1,$3);}
    263          1.1  christos     ;
    264          1.1  christos 
    265  1.1.1.1.2.2     skrll FieldUnitList
    266          1.1  christos     :                               {$$ = NULL;}
    267  1.1.1.1.2.2     skrll     | FieldUnit
    268  1.1.1.1.2.2     skrll     | FieldUnitList ','             /* Allows a trailing comma at list end */
    269  1.1.1.1.2.2     skrll     | FieldUnitList ','
    270  1.1.1.1.2.2     skrll         FieldUnit                   {$$ = TrLinkPeerNode ($1,$3);}
    271          1.1  christos     ;
    272          1.1  christos 
    273  1.1.1.1.2.2     skrll FieldUnit
    274  1.1.1.1.2.2     skrll     : FieldUnitEntry                {}
    275  1.1.1.1.2.2     skrll     | OffsetTerm                    {}
    276  1.1.1.1.2.2     skrll     | AccessAsTerm                  {}
    277  1.1.1.1.2.2     skrll     | ConnectionTerm                {}
    278  1.1.1.1.2.2     skrll     ;
    279          1.1  christos 
    280  1.1.1.1.2.2     skrll FieldUnitEntry
    281  1.1.1.1.2.2     skrll     : ',' AmlPackageLengthTerm      {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
    282  1.1.1.1.2.2     skrll     | NameSeg ','
    283  1.1.1.1.2.2     skrll         AmlPackageLengthTerm        {$$ = TrLinkChildNode ($1,$3);}
    284  1.1.1.1.2.2     skrll     ;
    285          1.1  christos 
    286  1.1.1.1.2.2     skrll Object
    287  1.1.1.1.2.2     skrll     : CompilerDirective             {}
    288  1.1.1.1.2.2     skrll     | NamedObject                   {}
    289  1.1.1.1.2.2     skrll     | NameSpaceModifier             {}
    290  1.1.1.1.2.4     skrll //    | StructureTerm                 {}
    291          1.1  christos     ;
    292          1.1  christos 
    293  1.1.1.1.2.2     skrll PackageList
    294  1.1.1.1.2.2     skrll     :                               {$$ = NULL;}
    295  1.1.1.1.2.2     skrll     | PackageElement
    296  1.1.1.1.2.2     skrll     | PackageList ','               /* Allows a trailing comma at list end */
    297  1.1.1.1.2.2     skrll     | PackageList ','
    298  1.1.1.1.2.2     skrll         PackageElement              {$$ = TrLinkPeerNode ($1,$3);}
    299          1.1  christos     ;
    300          1.1  christos 
    301  1.1.1.1.2.2     skrll PackageElement
    302  1.1.1.1.2.2     skrll     : DataObject                    {}
    303  1.1.1.1.2.2     skrll     | NameString                    {}
    304          1.1  christos     ;
    305          1.1  christos 
    306  1.1.1.1.2.2     skrll     /* Rules for specifying the type of one method argument or return value */
    307          1.1  christos 
    308          1.1  christos ParameterTypePackage
    309          1.1  christos     :                               {$$ = NULL;}
    310          1.1  christos     | ObjectTypeKeyword             {$$ = $1;}
    311          1.1  christos     | ParameterTypePackage ','
    312          1.1  christos         ObjectTypeKeyword           {$$ = TrLinkPeerNodes (2,$1,$3);}
    313          1.1  christos     ;
    314          1.1  christos 
    315          1.1  christos ParameterTypePackageList
    316          1.1  christos     :                               {$$ = NULL;}
    317          1.1  christos     | ObjectTypeKeyword             {$$ = $1;}
    318          1.1  christos     | '{' ParameterTypePackage '}'  {$$ = $2;}
    319          1.1  christos     ;
    320          1.1  christos 
    321          1.1  christos OptionalParameterTypePackage
    322          1.1  christos     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
    323  1.1.1.1.2.4     skrll     | ',' ParameterTypePackageList  {$$ = TrLinkChildren (
    324  1.1.1.1.2.4     skrll                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
    325          1.1  christos     ;
    326          1.1  christos 
    327  1.1.1.1.2.2     skrll     /* Rules for specifying the types for method arguments */
    328          1.1  christos 
    329          1.1  christos ParameterTypesPackage
    330          1.1  christos     : ParameterTypePackageList      {$$ = $1;}
    331          1.1  christos     | ParameterTypesPackage ','
    332          1.1  christos         ParameterTypePackageList    {$$ = TrLinkPeerNodes (2,$1,$3);}
    333          1.1  christos     ;
    334          1.1  christos 
    335          1.1  christos ParameterTypesPackageList
    336          1.1  christos     :                               {$$ = NULL;}
    337          1.1  christos     | ObjectTypeKeyword             {$$ = $1;}
    338          1.1  christos     | '{' ParameterTypesPackage '}' {$$ = $2;}
    339          1.1  christos     ;
    340          1.1  christos 
    341          1.1  christos OptionalParameterTypesPackage
    342          1.1  christos     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
    343  1.1.1.1.2.4     skrll     | ',' ParameterTypesPackageList {$$ = TrLinkChildren (
    344  1.1.1.1.2.4     skrll                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
    345          1.1  christos     ;
    346          1.1  christos 
    347          1.1  christos /*
    348  1.1.1.1.2.2     skrll  * Case-Default list; allow only one Default term and unlimited Case terms
    349          1.1  christos  */
    350  1.1.1.1.2.2     skrll CaseDefaultTermList
    351  1.1.1.1.2.2     skrll     :                               {$$ = NULL;}
    352  1.1.1.1.2.5     skrll     | CaseTerm                      {}
    353  1.1.1.1.2.5     skrll     | DefaultTerm                   {}
    354  1.1.1.1.2.2     skrll     | CaseDefaultTermList
    355  1.1.1.1.2.2     skrll         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
    356  1.1.1.1.2.2     skrll     | CaseDefaultTermList
    357  1.1.1.1.2.2     skrll         DefaultTerm                 {$$ = TrLinkPeerNode ($1,$2);}
    358          1.1  christos 
    359  1.1.1.1.2.2     skrll /* Original - attempts to force zero or one default term within the switch */
    360  1.1.1.1.2.2     skrll 
    361  1.1.1.1.2.2     skrll /*
    362  1.1.1.1.2.2     skrll CaseDefaultTermList
    363  1.1.1.1.2.2     skrll     :                               {$$ = NULL;}
    364  1.1.1.1.2.2     skrll     | CaseTermList
    365  1.1.1.1.2.2     skrll         DefaultTerm
    366  1.1.1.1.2.2     skrll         CaseTermList                {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
    367  1.1.1.1.2.2     skrll     | CaseTermList
    368  1.1.1.1.2.2     skrll         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
    369  1.1.1.1.2.2     skrll     ;
    370  1.1.1.1.2.2     skrll 
    371  1.1.1.1.2.2     skrll CaseTermList
    372  1.1.1.1.2.2     skrll     :                               {$$ = NULL;}
    373  1.1.1.1.2.2     skrll     | CaseTerm                      {}
    374  1.1.1.1.2.2     skrll     | CaseTermList
    375  1.1.1.1.2.2     skrll         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
    376  1.1.1.1.2.2     skrll     ;
    377  1.1.1.1.2.2     skrll */
    378  1.1.1.1.2.2     skrll 
    379  1.1.1.1.2.2     skrll 
    380  1.1.1.1.2.2     skrll /*******************************************************************************
    381  1.1.1.1.2.2     skrll  *
    382  1.1.1.1.2.2     skrll  * ASL Data and Constant Terms
    383  1.1.1.1.2.2     skrll  *
    384  1.1.1.1.2.2     skrll  ******************************************************************************/
    385  1.1.1.1.2.2     skrll 
    386  1.1.1.1.2.2     skrll DataObject
    387  1.1.1.1.2.2     skrll     : BufferData                    {}
    388  1.1.1.1.2.2     skrll     | PackageData                   {}
    389  1.1.1.1.2.2     skrll     | IntegerData                   {}
    390  1.1.1.1.2.2     skrll     | StringData                    {}
    391  1.1.1.1.2.2     skrll     ;
    392  1.1.1.1.2.2     skrll 
    393  1.1.1.1.2.2     skrll BufferData
    394  1.1.1.1.2.2     skrll     : Type5Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    395  1.1.1.1.2.2     skrll     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    396  1.1.1.1.2.2     skrll     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    397  1.1.1.1.2.2     skrll     | BufferTerm                    {}
    398  1.1.1.1.2.2     skrll     ;
    399  1.1.1.1.2.2     skrll 
    400  1.1.1.1.2.2     skrll PackageData
    401  1.1.1.1.2.2     skrll     : PackageTerm                   {}
    402  1.1.1.1.2.2     skrll     ;
    403  1.1.1.1.2.2     skrll 
    404  1.1.1.1.2.2     skrll IntegerData
    405  1.1.1.1.2.2     skrll     : Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    406  1.1.1.1.2.2     skrll     | Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    407  1.1.1.1.2.2     skrll     | Integer                       {}
    408  1.1.1.1.2.2     skrll     | ConstTerm                     {}
    409  1.1.1.1.2.2     skrll     ;
    410  1.1.1.1.2.2     skrll 
    411  1.1.1.1.2.2     skrll StringData
    412  1.1.1.1.2.2     skrll     : Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    413  1.1.1.1.2.2     skrll     | String                        {}
    414  1.1.1.1.2.2     skrll     ;
    415  1.1.1.1.2.2     skrll 
    416  1.1.1.1.2.2     skrll ByteConst
    417  1.1.1.1.2.2     skrll     : Integer                       {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
    418  1.1.1.1.2.2     skrll     ;
    419  1.1.1.1.2.2     skrll 
    420  1.1.1.1.2.2     skrll WordConst
    421  1.1.1.1.2.2     skrll     : Integer                       {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
    422  1.1.1.1.2.2     skrll     ;
    423  1.1.1.1.2.2     skrll 
    424  1.1.1.1.2.2     skrll DWordConst
    425  1.1.1.1.2.2     skrll     : Integer                       {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
    426  1.1.1.1.2.2     skrll     ;
    427  1.1.1.1.2.2     skrll 
    428  1.1.1.1.2.2     skrll QWordConst
    429  1.1.1.1.2.2     skrll     : Integer                       {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
    430  1.1.1.1.2.2     skrll     ;
    431  1.1.1.1.2.2     skrll 
    432  1.1.1.1.2.2     skrll /*
    433  1.1.1.1.2.2     skrll  * The NODE_COMPILE_TIME_CONST flag in the following constant expressions
    434  1.1.1.1.2.2     skrll  * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
    435  1.1.1.1.2.2     skrll  * to simple integers. It is an error if these types of expressions cannot be
    436  1.1.1.1.2.2     skrll  * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
    437  1.1.1.1.2.2     skrll  * Note: The required byte length of the constant is passed through to the
    438  1.1.1.1.2.2     skrll  * constant folding code in the node AmlLength field.
    439  1.1.1.1.2.2     skrll  */
    440  1.1.1.1.2.2     skrll ByteConstExpr
    441  1.1.1.1.2.4     skrll     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
    442  1.1.1.1.2.4     skrll                                         TrSetNodeAmlLength ($1, 1);}
    443  1.1.1.1.2.4     skrll     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
    444  1.1.1.1.2.4     skrll                                         TrSetNodeAmlLength ($1, 1);}
    445  1.1.1.1.2.2     skrll     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
    446  1.1.1.1.2.2     skrll     | ByteConst                     {}
    447  1.1.1.1.2.2     skrll     ;
    448  1.1.1.1.2.2     skrll 
    449  1.1.1.1.2.2     skrll WordConstExpr
    450  1.1.1.1.2.4     skrll     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
    451  1.1.1.1.2.4     skrll                                         TrSetNodeAmlLength ($1, 2);}
    452  1.1.1.1.2.4     skrll     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
    453  1.1.1.1.2.4     skrll                                         TrSetNodeAmlLength ($1, 2);}
    454  1.1.1.1.2.2     skrll     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
    455  1.1.1.1.2.2     skrll     | WordConst                     {}
    456  1.1.1.1.2.2     skrll     ;
    457  1.1.1.1.2.2     skrll 
    458  1.1.1.1.2.2     skrll DWordConstExpr
    459  1.1.1.1.2.4     skrll     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
    460  1.1.1.1.2.4     skrll                                         TrSetNodeAmlLength ($1, 4);}
    461  1.1.1.1.2.4     skrll     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
    462  1.1.1.1.2.4     skrll                                         TrSetNodeAmlLength ($1, 4);}
    463  1.1.1.1.2.2     skrll     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
    464  1.1.1.1.2.2     skrll     | DWordConst                    {}
    465  1.1.1.1.2.2     skrll     ;
    466  1.1.1.1.2.2     skrll 
    467  1.1.1.1.2.2     skrll QWordConstExpr
    468  1.1.1.1.2.4     skrll     : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
    469  1.1.1.1.2.4     skrll                                         TrSetNodeAmlLength ($1, 8);}
    470  1.1.1.1.2.4     skrll     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
    471  1.1.1.1.2.4     skrll                                         TrSetNodeAmlLength ($1, 8);}
    472  1.1.1.1.2.2     skrll     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
    473  1.1.1.1.2.2     skrll     | QWordConst                    {}
    474  1.1.1.1.2.2     skrll     ;
    475  1.1.1.1.2.2     skrll 
    476  1.1.1.1.2.2     skrll ConstTerm
    477  1.1.1.1.2.2     skrll     : ConstExprTerm                 {}
    478  1.1.1.1.2.2     skrll     | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
    479  1.1.1.1.2.2     skrll     ;
    480  1.1.1.1.2.2     skrll 
    481  1.1.1.1.2.2     skrll ConstExprTerm
    482  1.1.1.1.2.2     skrll     : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
    483  1.1.1.1.2.2     skrll     | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
    484  1.1.1.1.2.2     skrll     | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
    485  1.1.1.1.2.2     skrll     | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
    486  1.1.1.1.2.2     skrll     | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
    487  1.1.1.1.2.2     skrll     | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
    488  1.1.1.1.2.2     skrll     | PARSEOP___PATH__              {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
    489  1.1.1.1.2.2     skrll     ;
    490  1.1.1.1.2.2     skrll 
    491  1.1.1.1.2.2     skrll Integer
    492  1.1.1.1.2.4     skrll     : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER,
    493  1.1.1.1.2.4     skrll                                         AslCompilerlval.i);}
    494  1.1.1.1.2.2     skrll     ;
    495  1.1.1.1.2.2     skrll 
    496  1.1.1.1.2.2     skrll String
    497  1.1.1.1.2.4     skrll     : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL,
    498  1.1.1.1.2.4     skrll                                         (ACPI_NATIVE_INT) AslCompilerlval.s);}
    499  1.1.1.1.2.2     skrll     ;
    500  1.1.1.1.2.2     skrll 
    501  1.1.1.1.2.2     skrll 
    502  1.1.1.1.2.2     skrll /*******************************************************************************
    503  1.1.1.1.2.2     skrll  *
    504  1.1.1.1.2.2     skrll  * ASL Opcode Terms
    505  1.1.1.1.2.2     skrll  *
    506  1.1.1.1.2.2     skrll  ******************************************************************************/
    507  1.1.1.1.2.2     skrll 
    508  1.1.1.1.2.2     skrll CompilerDirective
    509  1.1.1.1.2.2     skrll     : IncludeTerm                   {}
    510  1.1.1.1.2.2     skrll     | IncludeEndTerm                {}
    511  1.1.1.1.2.2     skrll     | ExternalTerm                  {}
    512  1.1.1.1.2.2     skrll     ;
    513  1.1.1.1.2.2     skrll 
    514  1.1.1.1.2.2     skrll NamedObject
    515  1.1.1.1.2.2     skrll     : BankFieldTerm                 {}
    516  1.1.1.1.2.2     skrll     | CreateBitFieldTerm            {}
    517  1.1.1.1.2.2     skrll     | CreateByteFieldTerm           {}
    518  1.1.1.1.2.2     skrll     | CreateDWordFieldTerm          {}
    519  1.1.1.1.2.2     skrll     | CreateFieldTerm               {}
    520  1.1.1.1.2.2     skrll     | CreateQWordFieldTerm          {}
    521  1.1.1.1.2.2     skrll     | CreateWordFieldTerm           {}
    522  1.1.1.1.2.2     skrll     | DataRegionTerm                {}
    523  1.1.1.1.2.2     skrll     | DeviceTerm                    {}
    524  1.1.1.1.2.2     skrll     | EventTerm                     {}
    525  1.1.1.1.2.2     skrll     | FieldTerm                     {}
    526  1.1.1.1.2.2     skrll     | FunctionTerm                  {}
    527  1.1.1.1.2.2     skrll     | IndexFieldTerm                {}
    528  1.1.1.1.2.2     skrll     | MethodTerm                    {}
    529  1.1.1.1.2.2     skrll     | MutexTerm                     {}
    530  1.1.1.1.2.2     skrll     | OpRegionTerm                  {}
    531  1.1.1.1.2.2     skrll     | PowerResTerm                  {}
    532  1.1.1.1.2.2     skrll     | ProcessorTerm                 {}
    533  1.1.1.1.2.2     skrll     | ThermalZoneTerm               {}
    534  1.1.1.1.2.2     skrll     ;
    535  1.1.1.1.2.2     skrll 
    536  1.1.1.1.2.2     skrll NameSpaceModifier
    537  1.1.1.1.2.2     skrll     : AliasTerm                     {}
    538  1.1.1.1.2.2     skrll     | NameTerm                      {}
    539  1.1.1.1.2.4     skrll //    | NameTermAslPlus               {}
    540  1.1.1.1.2.2     skrll     | ScopeTerm                     {}
    541  1.1.1.1.2.2     skrll     ;
    542  1.1.1.1.2.2     skrll 
    543  1.1.1.1.2.5     skrll SimpleName
    544  1.1.1.1.2.2     skrll     : NameString                    {}
    545  1.1.1.1.2.2     skrll     | LocalTerm                     {}
    546  1.1.1.1.2.5     skrll     | ArgTerm                       {}
    547  1.1.1.1.2.5     skrll     ;
    548  1.1.1.1.2.5     skrll 
    549  1.1.1.1.2.5     skrll /* For ObjectType(), SuperName except for MethodInvocationTerm */
    550  1.1.1.1.2.5     skrll 
    551  1.1.1.1.2.5     skrll ObjectTypeSource
    552  1.1.1.1.2.5     skrll     : SimpleName                    {}
    553  1.1.1.1.2.2     skrll     | DebugTerm                     {}
    554  1.1.1.1.2.2     skrll     | RefOfTerm                     {}
    555  1.1.1.1.2.2     skrll     | DerefOfTerm                   {}
    556  1.1.1.1.2.2     skrll     | IndexTerm                     {}
    557  1.1.1.1.2.4     skrll     | IndexExpTerm                  {}
    558  1.1.1.1.2.2     skrll     ;
    559  1.1.1.1.2.2     skrll 
    560  1.1.1.1.2.5     skrll /* For DeRefOf(), SuperName except for DerefOf and Debug */
    561  1.1.1.1.2.5     skrll 
    562  1.1.1.1.2.5     skrll DerefOfSource
    563  1.1.1.1.2.5     skrll     : SimpleName                    {}
    564  1.1.1.1.2.5     skrll     | RefOfTerm                     {}
    565  1.1.1.1.2.5     skrll     | DerefOfTerm                   {}
    566  1.1.1.1.2.5     skrll     | IndexTerm                     {}
    567  1.1.1.1.2.5     skrll     | IndexExpTerm                  {}
    568  1.1.1.1.2.5     skrll     | StoreTerm                     {}
    569  1.1.1.1.2.5     skrll     | EqualsTerm                    {}
    570  1.1.1.1.2.5     skrll     | MethodInvocationTerm          {}
    571  1.1.1.1.2.2     skrll     ;
    572  1.1.1.1.2.2     skrll 
    573  1.1.1.1.2.5     skrll /* For RefOf(), SuperName except for RefOf and MethodInvocationTerm */
    574  1.1.1.1.2.5     skrll 
    575  1.1.1.1.2.5     skrll RefOfSource
    576  1.1.1.1.2.5     skrll     : SimpleName                    {}
    577  1.1.1.1.2.5     skrll     | DebugTerm                     {}
    578  1.1.1.1.2.5     skrll     | DerefOfTerm                   {}
    579  1.1.1.1.2.5     skrll     | IndexTerm                     {}
    580  1.1.1.1.2.5     skrll     | IndexExpTerm                  {}
    581  1.1.1.1.2.2     skrll     ;
    582  1.1.1.1.2.2     skrll 
    583  1.1.1.1.2.5     skrll /* For CondRefOf(), SuperName except for RefOf and MethodInvocationTerm */
    584  1.1.1.1.2.5     skrll 
    585  1.1.1.1.2.5     skrll CondRefOfSource
    586  1.1.1.1.2.5     skrll     : SimpleName                    {}
    587  1.1.1.1.2.5     skrll     | DebugTerm                     {}
    588  1.1.1.1.2.5     skrll     | DerefOfTerm                   {}
    589  1.1.1.1.2.5     skrll     | IndexTerm                     {}
    590  1.1.1.1.2.5     skrll     | IndexExpTerm                  {}
    591  1.1.1.1.2.5     skrll     ;
    592  1.1.1.1.2.2     skrll 
    593  1.1.1.1.2.5     skrll /*
    594  1.1.1.1.2.5     skrll  * Opcode types, as defined in the ACPI specification
    595  1.1.1.1.2.5     skrll  */
    596  1.1.1.1.2.2     skrll Type1Opcode
    597  1.1.1.1.2.2     skrll     : BreakTerm                     {}
    598  1.1.1.1.2.2     skrll     | BreakPointTerm                {}
    599  1.1.1.1.2.2     skrll     | ContinueTerm                  {}
    600  1.1.1.1.2.2     skrll     | FatalTerm                     {}
    601  1.1.1.1.2.3     skrll     | ForTerm                       {}
    602  1.1.1.1.2.2     skrll     | ElseIfTerm                    {}
    603  1.1.1.1.2.2     skrll     | LoadTerm                      {}
    604  1.1.1.1.2.2     skrll     | NoOpTerm                      {}
    605  1.1.1.1.2.2     skrll     | NotifyTerm                    {}
    606  1.1.1.1.2.2     skrll     | ReleaseTerm                   {}
    607  1.1.1.1.2.2     skrll     | ResetTerm                     {}
    608  1.1.1.1.2.2     skrll     | ReturnTerm                    {}
    609  1.1.1.1.2.2     skrll     | SignalTerm                    {}
    610  1.1.1.1.2.2     skrll     | SleepTerm                     {}
    611  1.1.1.1.2.2     skrll     | StallTerm                     {}
    612  1.1.1.1.2.2     skrll     | SwitchTerm                    {}
    613  1.1.1.1.2.2     skrll     | UnloadTerm                    {}
    614  1.1.1.1.2.2     skrll     | WhileTerm                     {}
    615  1.1.1.1.2.2     skrll     ;
    616  1.1.1.1.2.2     skrll 
    617  1.1.1.1.2.2     skrll Type2Opcode
    618  1.1.1.1.2.2     skrll     : AcquireTerm                   {}
    619  1.1.1.1.2.2     skrll     | CondRefOfTerm                 {}
    620  1.1.1.1.2.2     skrll     | CopyObjectTerm                {}
    621  1.1.1.1.2.2     skrll     | DerefOfTerm                   {}
    622  1.1.1.1.2.2     skrll     | ObjectTypeTerm                {}
    623  1.1.1.1.2.2     skrll     | RefOfTerm                     {}
    624  1.1.1.1.2.2     skrll     | SizeOfTerm                    {}
    625  1.1.1.1.2.2     skrll     | StoreTerm                     {}
    626  1.1.1.1.2.2     skrll     | EqualsTerm                    {}
    627  1.1.1.1.2.2     skrll     | TimerTerm                     {}
    628  1.1.1.1.2.2     skrll     | WaitTerm                      {}
    629  1.1.1.1.2.2     skrll     | MethodInvocationTerm          {}
    630  1.1.1.1.2.2     skrll     ;
    631  1.1.1.1.2.2     skrll 
    632  1.1.1.1.2.2     skrll /*
    633  1.1.1.1.2.2     skrll  * Type 3/4/5 opcodes
    634  1.1.1.1.2.2     skrll  */
    635  1.1.1.1.2.2     skrll Type2IntegerOpcode                  /* "Type3" opcodes */
    636  1.1.1.1.2.2     skrll     : Expression                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    637  1.1.1.1.2.2     skrll     | AddTerm                       {}
    638  1.1.1.1.2.2     skrll     | AndTerm                       {}
    639          1.1  christos     | DecTerm                       {}
    640          1.1  christos     | DivideTerm                    {}
    641          1.1  christos     | FindSetLeftBitTerm            {}
    642          1.1  christos     | FindSetRightBitTerm           {}
    643          1.1  christos     | FromBCDTerm                   {}
    644          1.1  christos     | IncTerm                       {}
    645          1.1  christos     | IndexTerm                     {}
    646  1.1.1.1.2.4     skrll //    | StructureIndexTerm            {}
    647  1.1.1.1.2.4     skrll //    | StructurePointerTerm          {}
    648          1.1  christos     | LAndTerm                      {}
    649          1.1  christos     | LEqualTerm                    {}
    650          1.1  christos     | LGreaterTerm                  {}
    651          1.1  christos     | LGreaterEqualTerm             {}
    652          1.1  christos     | LLessTerm                     {}
    653          1.1  christos     | LLessEqualTerm                {}
    654          1.1  christos     | LNotTerm                      {}
    655          1.1  christos     | LNotEqualTerm                 {}
    656          1.1  christos     | LoadTableTerm                 {}
    657          1.1  christos     | LOrTerm                       {}
    658          1.1  christos     | MatchTerm                     {}
    659          1.1  christos     | ModTerm                       {}
    660          1.1  christos     | MultiplyTerm                  {}
    661          1.1  christos     | NAndTerm                      {}
    662          1.1  christos     | NOrTerm                       {}
    663          1.1  christos     | NotTerm                       {}
    664          1.1  christos     | OrTerm                        {}
    665          1.1  christos     | ShiftLeftTerm                 {}
    666          1.1  christos     | ShiftRightTerm                {}
    667          1.1  christos     | SubtractTerm                  {}
    668          1.1  christos     | ToBCDTerm                     {}
    669          1.1  christos     | ToIntegerTerm                 {}
    670          1.1  christos     | XOrTerm                       {}
    671          1.1  christos     ;
    672          1.1  christos 
    673          1.1  christos Type2StringOpcode                   /* "Type4" Opcodes */
    674          1.1  christos     : ToDecimalStringTerm           {}
    675          1.1  christos     | ToHexStringTerm               {}
    676          1.1  christos     | ToStringTerm                  {}
    677          1.1  christos     ;
    678          1.1  christos 
    679          1.1  christos Type2BufferOpcode                   /* "Type5" Opcodes */
    680          1.1  christos     : ToBufferTerm                  {}
    681          1.1  christos     | ConcatResTerm                 {}
    682          1.1  christos     ;
    683          1.1  christos 
    684          1.1  christos Type2BufferOrStringOpcode
    685  1.1.1.1.2.1     skrll     : ConcatTerm                    {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
    686  1.1.1.1.2.1     skrll     | PrintfTerm                    {}
    687  1.1.1.1.2.1     skrll     | FprintfTerm                   {}
    688          1.1  christos     | MidTerm                       {}
    689          1.1  christos     ;
    690          1.1  christos 
    691          1.1  christos /*
    692          1.1  christos  * A type 3 opcode evaluates to an Integer and cannot have a destination operand
    693          1.1  christos  */
    694          1.1  christos Type3Opcode
    695          1.1  christos     : EISAIDTerm                    {}
    696          1.1  christos     ;
    697          1.1  christos 
    698          1.1  christos /* Obsolete
    699          1.1  christos Type4Opcode
    700          1.1  christos     : ConcatTerm                    {}
    701          1.1  christos     | ToDecimalStringTerm           {}
    702          1.1  christos     | ToHexStringTerm               {}
    703          1.1  christos     | MidTerm                       {}
    704          1.1  christos     | ToStringTerm                  {}
    705          1.1  christos     ;
    706          1.1  christos */
    707          1.1  christos 
    708  1.1.1.1.2.4     skrll /* Type 5 opcodes are a subset of Type2 opcodes, and return a constant */
    709  1.1.1.1.2.4     skrll 
    710          1.1  christos Type5Opcode
    711          1.1  christos     : ResourceTemplateTerm          {}
    712          1.1  christos     | UnicodeTerm                   {}
    713  1.1.1.1.2.1     skrll     | ToPLDTerm                     {}
    714          1.1  christos     | ToUUIDTerm                    {}
    715          1.1  christos     ;
    716          1.1  christos 
    717          1.1  christos Type6Opcode
    718          1.1  christos     : RefOfTerm                     {}
    719          1.1  christos     | DerefOfTerm                   {}
    720          1.1  christos     | IndexTerm                     {}
    721  1.1.1.1.2.2     skrll     | IndexExpTerm                  {}
    722  1.1.1.1.2.4     skrll //    | StructureIndexTerm            {}
    723  1.1.1.1.2.4     skrll //    | StructurePointerTerm          {}
    724  1.1.1.1.2.1     skrll     | MethodInvocationTerm          {}
    725          1.1  christos     ;
    726          1.1  christos 
    727          1.1  christos 
    728  1.1.1.1.2.2     skrll /*******************************************************************************
    729  1.1.1.1.2.2     skrll  *
    730  1.1.1.1.2.2     skrll  * ASL Helper Terms
    731  1.1.1.1.2.2     skrll  *
    732  1.1.1.1.2.2     skrll  ******************************************************************************/
    733          1.1  christos 
    734          1.1  christos AmlPackageLengthTerm
    735  1.1.1.1.2.4     skrll     : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,
    736  1.1.1.1.2.4     skrll                                         (ACPI_PARSE_OBJECT *) $1);}
    737          1.1  christos     ;
    738          1.1  christos 
    739          1.1  christos NameStringItem
    740          1.1  christos     : ',' NameString                {$$ = $2;}
    741          1.1  christos     | ',' error                     {$$ = AslDoError (); yyclearin;}
    742          1.1  christos     ;
    743          1.1  christos 
    744          1.1  christos TermArgItem
    745          1.1  christos     : ',' TermArg                   {$$ = $2;}
    746          1.1  christos     | ',' error                     {$$ = AslDoError (); yyclearin;}
    747          1.1  christos     ;
    748          1.1  christos 
    749          1.1  christos OptionalReference
    750          1.1  christos     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
    751          1.1  christos     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
    752          1.1  christos     | ',' TermArg                   {$$ = $2;}
    753          1.1  christos     ;
    754          1.1  christos 
    755          1.1  christos OptionalReturnArg
    756  1.1.1.1.2.4     skrll     :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO),
    757  1.1.1.1.2.4     skrll                                             NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
    758          1.1  christos     | TermArg                       {$$ = $1;}
    759          1.1  christos     ;
    760          1.1  christos 
    761          1.1  christos OptionalSerializeRuleKeyword
    762          1.1  christos     :                               {$$ = NULL;}
    763          1.1  christos     | ','                           {$$ = NULL;}
    764          1.1  christos     | ',' SerializeRuleKeyword      {$$ = $2;}
    765          1.1  christos     ;
    766          1.1  christos 
    767          1.1  christos OptionalTermArg
    768  1.1.1.1.2.3     skrll     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
    769  1.1.1.1.2.3     skrll     | TermArg                       {$$ = $1;}
    770  1.1.1.1.2.3     skrll     ;
    771  1.1.1.1.2.3     skrll 
    772          1.1  christos OptionalWordConst
    773          1.1  christos     :                               {$$ = NULL;}
    774          1.1  christos     | WordConst                     {$$ = $1;}
    775          1.1  christos     ;
    776