Subversion Repositories Kolibri OS

Rev

Rev 1498 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. %{
  3. /******************************************************************************
  4.  *
  5.  * Module Name: aslcompiler.y - Bison input file (ASL grammar and actions)
  6.  *
  7.  *****************************************************************************/
  8.  
  9. /******************************************************************************
  10.  *
  11.  * 1. Copyright Notice
  12.  *
  13.  * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
  14.  * All rights reserved.
  15.  *
  16.  * 2. License
  17.  *
  18.  * 2.1. This is your license from Intel Corp. under its intellectual property
  19.  * rights.  You may have additional license terms from the party that provided
  20.  * you this software, covering your right to use that party's intellectual
  21.  * property rights.
  22.  *
  23.  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
  24.  * copy of the source code appearing in this file ("Covered Code") an
  25.  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
  26.  * base code distributed originally by Intel ("Original Intel Code") to copy,
  27.  * make derivatives, distribute, use and display any portion of the Covered
  28.  * Code in any form, with the right to sublicense such rights; and
  29.  *
  30.  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
  31.  * license (with the right to sublicense), under only those claims of Intel
  32.  * patents that are infringed by the Original Intel Code, to make, use, sell,
  33.  * offer to sell, and import the Covered Code and derivative works thereof
  34.  * solely to the minimum extent necessary to exercise the above copyright
  35.  * license, and in no event shall the patent license extend to any additions
  36.  * to or modifications of the Original Intel Code.  No other license or right
  37.  * is granted directly or by implication, estoppel or otherwise;
  38.  *
  39.  * The above copyright and patent license is granted only if the following
  40.  * conditions are met:
  41.  *
  42.  * 3. Conditions
  43.  *
  44.  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
  45.  * Redistribution of source code of any substantial portion of the Covered
  46.  * Code or modification with rights to further distribute source must include
  47.  * the above Copyright Notice, the above License, this list of Conditions,
  48.  * and the following Disclaimer and Export Compliance provision.  In addition,
  49.  * Licensee must cause all Covered Code to which Licensee contributes to
  50.  * contain a file documenting the changes Licensee made to create that Covered
  51.  * Code and the date of any change.  Licensee must include in that file the
  52.  * documentation of any changes made by any predecessor Licensee.  Licensee
  53.  * must include a prominent statement that the modification is derived,
  54.  * directly or indirectly, from Original Intel Code.
  55.  *
  56.  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
  57.  * Redistribution of source code of any substantial portion of the Covered
  58.  * Code or modification without rights to further distribute source must
  59.  * include the following Disclaimer and Export Compliance provision in the
  60.  * documentation and/or other materials provided with distribution.  In
  61.  * addition, Licensee may not authorize further sublicense of source of any
  62.  * portion of the Covered Code, and must include terms to the effect that the
  63.  * license from Licensee to its licensee is limited to the intellectual
  64.  * property embodied in the software Licensee provides to its licensee, and
  65.  * not to intellectual property embodied in modifications its licensee may
  66.  * make.
  67.  *
  68.  * 3.3. Redistribution of Executable. Redistribution in executable form of any
  69.  * substantial portion of the Covered Code or modification must reproduce the
  70.  * above Copyright Notice, and the following Disclaimer and Export Compliance
  71.  * provision in the documentation and/or other materials provided with the
  72.  * distribution.
  73.  *
  74.  * 3.4. Intel retains all right, title, and interest in and to the Original
  75.  * Intel Code.
  76.  *
  77.  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
  78.  * Intel shall be used in advertising or otherwise to promote the sale, use or
  79.  * other dealings in products derived from or relating to the Covered Code
  80.  * without prior written authorization from Intel.
  81.  *
  82.  * 4. Disclaimer and Export Compliance
  83.  *
  84.  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
  85.  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
  86.  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
  87.  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
  88.  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
  89.  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
  90.  * PARTICULAR PURPOSE.
  91.  *
  92.  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
  93.  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
  94.  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
  95.  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
  96.  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
  97.  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
  98.  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
  99.  * LIMITED REMEDY.
  100.  *
  101.  * 4.3. Licensee shall not export, either directly or indirectly, any of this
  102.  * software or system incorporating such software without first obtaining any
  103.  * required license or other approval from the U. S. Department of Commerce or
  104.  * any other agency or department of the United States Government.  In the
  105.  * event Licensee exports any such software from the United States or
  106.  * re-exports any such software from a foreign destination, Licensee shall
  107.  * ensure that the distribution and export/re-export of the software is in
  108.  * compliance with all laws, regulations, orders, or other restrictions of the
  109.  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
  110.  * any of its subsidiaries will export/re-export any technical data, process,
  111.  * software, or service, directly or indirectly, to any country for which the
  112.  * United States government or any agency thereof requires an export license,
  113.  * other governmental approval, or letter of assurance, without first obtaining
  114.  * such license, approval or letter.
  115.  *
  116.  *****************************************************************************/
  117.  
  118. #include "aslcompiler.h"
  119. #include <stdio.h>
  120. #include <stdlib.h>
  121. #include <string.h>
  122. #include "acpi.h"
  123. #include "accommon.h"
  124.  
  125. #define _COMPONENT          ACPI_COMPILER
  126.         ACPI_MODULE_NAME    ("aslparse")
  127.  
  128. /*
  129.  * Global Notes:
  130.  *
  131.  * October 2005: The following list terms have been optimized (from the
  132.  * original ASL grammar in the ACPI specification) to force the immediate
  133.  * reduction of each list item so that the parse stack use doesn't increase on
  134.  * each list element and possibly overflow on very large lists (>4000 items).
  135.  * This dramatically reduces use of the parse stack overall.
  136.  *
  137.  *      ArgList, TermList, Objectlist, ByteList, DWordList, PackageList,
  138.  *      ResourceMacroList, and FieldUnitList
  139.  */
  140.  
  141. void *                      AslLocalAllocate (unsigned int Size);
  142.  
  143. /* Bison/yacc configuration */
  144.  
  145. #define static
  146. #undef alloca
  147. #define alloca              AslLocalAllocate
  148. #define yytname             AslCompilername
  149.  
  150. #define YYINITDEPTH         600             /* State stack depth */
  151. #define YYDEBUG             1               /* Enable debug output */
  152. #define YYERROR_VERBOSE     1               /* Verbose error messages */
  153.  
  154. /*
  155.  * The windows version of bison defines this incorrectly as "32768" (Not negative).
  156.  * We use a custom (edited binary) version of bison that defines YYFLAG as YYFBAD
  157.  * instead (#define YYFBAD 32768), so we can define it correctly here.
  158.  *
  159.  * The problem is that if YYFLAG is positive, the extended syntax error messages
  160.  * are disabled.
  161.  */
  162. #define YYFLAG              -32768
  163.  
  164. %}
  165.  
  166. /*
  167.  * Declare the type of values in the grammar
  168.  */
  169. %union {
  170.     UINT64              i;
  171.     char                *s;
  172.     ACPI_PARSE_OBJECT   *n;
  173. }
  174.  
  175. /*! [Begin] no source code translation */
  176.  
  177. /*
  178.  * These shift/reduce conflicts are expected. There should be zero
  179.  * reduce/reduce conflicts.
  180.  */
  181. %expect 60
  182.  
  183. /*
  184.  * Token types: These are returned by the lexer
  185.  *
  186.  * NOTE: This list MUST match the AslKeywordMapping table found
  187.  *       in aslmap.c EXACTLY!  Double check any changes!
  188.  */
  189. %token <i> PARSEOP_ACCESSAS
  190. %token <i> PARSEOP_ACCESSATTRIB_BLOCK
  191. %token <i> PARSEOP_ACCESSATTRIB_BLOCK_CALL
  192. %token <i> PARSEOP_ACCESSATTRIB_BYTE
  193. %token <i> PARSEOP_ACCESSATTRIB_WORD_CALL
  194. %token <i> PARSEOP_ACCESSATTRIB_QUICK
  195. %token <i> PARSEOP_ACCESSATTRIB_SND_RCV
  196. %token <i> PARSEOP_ACCESSATTRIB_WORD
  197. %token <i> PARSEOP_ACCESSTYPE_ANY
  198. %token <i> PARSEOP_ACCESSTYPE_BUF
  199. %token <i> PARSEOP_ACCESSTYPE_BYTE
  200. %token <i> PARSEOP_ACCESSTYPE_DWORD
  201. %token <i> PARSEOP_ACCESSTYPE_QWORD
  202. %token <i> PARSEOP_ACCESSTYPE_WORD
  203. %token <i> PARSEOP_ACQUIRE
  204. %token <i> PARSEOP_ADD
  205. %token <i> PARSEOP_ADDRESSSPACE_FFIXEDHW
  206. %token <i> PARSEOP_ADDRESSTYPE_ACPI
  207. %token <i> PARSEOP_ADDRESSTYPE_MEMORY
  208. %token <i> PARSEOP_ADDRESSTYPE_NVS
  209. %token <i> PARSEOP_ADDRESSTYPE_RESERVED
  210. %token <i> PARSEOP_ALIAS
  211. %token <i> PARSEOP_AND
  212. %token <i> PARSEOP_ARG0
  213. %token <i> PARSEOP_ARG1
  214. %token <i> PARSEOP_ARG2
  215. %token <i> PARSEOP_ARG3
  216. %token <i> PARSEOP_ARG4
  217. %token <i> PARSEOP_ARG5
  218. %token <i> PARSEOP_ARG6
  219. %token <i> PARSEOP_BANKFIELD
  220. %token <i> PARSEOP_BREAK
  221. %token <i> PARSEOP_BREAKPOINT
  222. %token <i> PARSEOP_BUFFER
  223. %token <i> PARSEOP_BUSMASTERTYPE_MASTER
  224. %token <i> PARSEOP_BUSMASTERTYPE_NOTMASTER
  225. %token <i> PARSEOP_BYTECONST
  226. %token <i> PARSEOP_CASE
  227. %token <i> PARSEOP_CONCATENATE
  228. %token <i> PARSEOP_CONCATENATERESTEMPLATE
  229. %token <i> PARSEOP_CONDREFOF
  230. %token <i> PARSEOP_CONTINUE
  231. %token <i> PARSEOP_COPYOBJECT
  232. %token <i> PARSEOP_CREATEBITFIELD
  233. %token <i> PARSEOP_CREATEBYTEFIELD
  234. %token <i> PARSEOP_CREATEDWORDFIELD
  235. %token <i> PARSEOP_CREATEFIELD
  236. %token <i> PARSEOP_CREATEQWORDFIELD
  237. %token <i> PARSEOP_CREATEWORDFIELD
  238. %token <i> PARSEOP_DATATABLEREGION
  239. %token <i> PARSEOP_DEBUG
  240. %token <i> PARSEOP_DECODETYPE_POS
  241. %token <i> PARSEOP_DECODETYPE_SUB
  242. %token <i> PARSEOP_DECREMENT
  243. %token <i> PARSEOP_DEFAULT
  244. %token <i> PARSEOP_DEFAULT_ARG
  245. %token <i> PARSEOP_DEFINITIONBLOCK
  246. %token <i> PARSEOP_DEREFOF
  247. %token <i> PARSEOP_DEVICE
  248. %token <i> PARSEOP_DIVIDE
  249. %token <i> PARSEOP_DMA
  250. %token <i> PARSEOP_DMATYPE_A
  251. %token <i> PARSEOP_DMATYPE_COMPATIBILITY
  252. %token <i> PARSEOP_DMATYPE_B
  253. %token <i> PARSEOP_DMATYPE_F
  254. %token <i> PARSEOP_DWORDCONST
  255. %token <i> PARSEOP_DWORDIO
  256. %token <i> PARSEOP_DWORDMEMORY
  257. %token <i> PARSEOP_DWORDSPACE
  258. %token <i> PARSEOP_EISAID
  259. %token <i> PARSEOP_ELSE
  260. %token <i> PARSEOP_ELSEIF
  261. %token <i> PARSEOP_ENDDEPENDENTFN
  262. %token <i> PARSEOP_ENDTAG
  263. %token <i> PARSEOP_ERRORNODE
  264. %token <i> PARSEOP_EVENT
  265. %token <i> PARSEOP_EXTENDEDIO
  266. %token <i> PARSEOP_EXTENDEDMEMORY
  267. %token <i> PARSEOP_EXTENDEDSPACE
  268. %token <i> PARSEOP_EXTERNAL
  269. %token <i> PARSEOP_FATAL
  270. %token <i> PARSEOP_FIELD
  271. %token <i> PARSEOP_FINDSETLEFTBIT
  272. %token <i> PARSEOP_FINDSETRIGHTBIT
  273. %token <i> PARSEOP_FIXEDIO
  274. %token <i> PARSEOP_FROMBCD
  275. %token <i> PARSEOP_FUNCTION
  276. %token <i> PARSEOP_IF
  277. %token <i> PARSEOP_INCLUDE
  278. %token <i> PARSEOP_INCLUDE_CSTYLE
  279. %token <i> PARSEOP_INCLUDE_END
  280. %token <i> PARSEOP_INCREMENT
  281. %token <i> PARSEOP_INDEX
  282. %token <i> PARSEOP_INDEXFIELD
  283. %token <i> PARSEOP_INTEGER
  284. %token <i> PARSEOP_INTERRUPT
  285. %token <i> PARSEOP_INTLEVEL_ACTIVEHIGH
  286. %token <i> PARSEOP_INTLEVEL_ACTIVELOW
  287. %token <i> PARSEOP_INTTYPE_EDGE
  288. %token <i> PARSEOP_INTTYPE_LEVEL
  289. %token <i> PARSEOP_IO
  290. %token <i> PARSEOP_IODECODETYPE_10
  291. %token <i> PARSEOP_IODECODETYPE_16
  292. %token <i> PARSEOP_IRQ
  293. %token <i> PARSEOP_IRQNOFLAGS
  294. %token <i> PARSEOP_LAND
  295. %token <i> PARSEOP_LEQUAL
  296. %token <i> PARSEOP_LGREATER
  297. %token <i> PARSEOP_LGREATEREQUAL
  298. %token <i> PARSEOP_LINE_CSTYLE
  299. %token <i> PARSEOP_LLESS
  300. %token <i> PARSEOP_LLESSEQUAL
  301. %token <i> PARSEOP_LNOT
  302. %token <i> PARSEOP_LNOTEQUAL
  303. %token <i> PARSEOP_LOAD
  304. %token <i> PARSEOP_LOADTABLE
  305. %token <i> PARSEOP_LOCAL0
  306. %token <i> PARSEOP_LOCAL1
  307. %token <i> PARSEOP_LOCAL2
  308. %token <i> PARSEOP_LOCAL3
  309. %token <i> PARSEOP_LOCAL4
  310. %token <i> PARSEOP_LOCAL5
  311. %token <i> PARSEOP_LOCAL6
  312. %token <i> PARSEOP_LOCAL7
  313. %token <i> PARSEOP_LOCKRULE_LOCK
  314. %token <i> PARSEOP_LOCKRULE_NOLOCK
  315. %token <i> PARSEOP_LOR
  316. %token <i> PARSEOP_MATCH
  317. %token <i> PARSEOP_MATCHTYPE_MEQ
  318. %token <i> PARSEOP_MATCHTYPE_MGE
  319. %token <i> PARSEOP_MATCHTYPE_MGT
  320. %token <i> PARSEOP_MATCHTYPE_MLE
  321. %token <i> PARSEOP_MATCHTYPE_MLT
  322. %token <i> PARSEOP_MATCHTYPE_MTR
  323. %token <i> PARSEOP_MAXTYPE_FIXED
  324. %token <i> PARSEOP_MAXTYPE_NOTFIXED
  325. %token <i> PARSEOP_MEMORY24
  326. %token <i> PARSEOP_MEMORY32
  327. %token <i> PARSEOP_MEMORY32FIXED
  328. %token <i> PARSEOP_MEMTYPE_CACHEABLE
  329. %token <i> PARSEOP_MEMTYPE_NONCACHEABLE
  330. %token <i> PARSEOP_MEMTYPE_PREFETCHABLE
  331. %token <i> PARSEOP_MEMTYPE_WRITECOMBINING
  332. %token <i> PARSEOP_METHOD
  333. %token <i> PARSEOP_METHODCALL
  334. %token <i> PARSEOP_MID
  335. %token <i> PARSEOP_MINTYPE_FIXED
  336. %token <i> PARSEOP_MINTYPE_NOTFIXED
  337. %token <i> PARSEOP_MOD
  338. %token <i> PARSEOP_MULTIPLY
  339. %token <i> PARSEOP_MUTEX
  340. %token <i> PARSEOP_NAME
  341. %token <s> PARSEOP_NAMESEG
  342. %token <s> PARSEOP_NAMESTRING
  343. %token <i> PARSEOP_NAND
  344. %token <i> PARSEOP_NOOP
  345. %token <i> PARSEOP_NOR
  346. %token <i> PARSEOP_NOT
  347. %token <i> PARSEOP_NOTIFY
  348. %token <i> PARSEOP_OBJECTTYPE
  349. %token <i> PARSEOP_OBJECTTYPE_BFF
  350. %token <i> PARSEOP_OBJECTTYPE_BUF
  351. %token <i> PARSEOP_OBJECTTYPE_DDB
  352. %token <i> PARSEOP_OBJECTTYPE_DEV
  353. %token <i> PARSEOP_OBJECTTYPE_EVT
  354. %token <i> PARSEOP_OBJECTTYPE_FLD
  355. %token <i> PARSEOP_OBJECTTYPE_INT
  356. %token <i> PARSEOP_OBJECTTYPE_MTH
  357. %token <i> PARSEOP_OBJECTTYPE_MTX
  358. %token <i> PARSEOP_OBJECTTYPE_OPR
  359. %token <i> PARSEOP_OBJECTTYPE_PKG
  360. %token <i> PARSEOP_OBJECTTYPE_POW
  361. %token <i> PARSEOP_OBJECTTYPE_PRO
  362. %token <i> PARSEOP_OBJECTTYPE_STR
  363. %token <i> PARSEOP_OBJECTTYPE_THZ
  364. %token <i> PARSEOP_OBJECTTYPE_UNK
  365. %token <i> PARSEOP_OFFSET
  366. %token <i> PARSEOP_ONE
  367. %token <i> PARSEOP_ONES
  368. %token <i> PARSEOP_OPERATIONREGION
  369. %token <i> PARSEOP_OR
  370. %token <i> PARSEOP_PACKAGE
  371. %token <i> PARSEOP_PACKAGE_LENGTH
  372. %token <i> PARSEOP_POWERRESOURCE
  373. %token <i> PARSEOP_PROCESSOR
  374. %token <i> PARSEOP_QWORDCONST
  375. %token <i> PARSEOP_QWORDIO
  376. %token <i> PARSEOP_QWORDMEMORY
  377. %token <i> PARSEOP_QWORDSPACE
  378. %token <i> PARSEOP_RANGETYPE_ENTIRE
  379. %token <i> PARSEOP_RANGETYPE_ISAONLY
  380. %token <i> PARSEOP_RANGETYPE_NONISAONLY
  381. %token <i> PARSEOP_RAW_DATA
  382. %token <i> PARSEOP_READWRITETYPE_BOTH
  383. %token <i> PARSEOP_READWRITETYPE_READONLY
  384. %token <i> PARSEOP_REFOF
  385. %token <i> PARSEOP_REGIONSPACE_CMOS
  386. %token <i> PARSEOP_REGIONSPACE_EC
  387. %token <i> PARSEOP_REGIONSPACE_IO
  388. %token <i> PARSEOP_REGIONSPACE_IPMI
  389. %token <i> PARSEOP_REGIONSPACE_MEM
  390. %token <i> PARSEOP_REGIONSPACE_PCI
  391. %token <i> PARSEOP_REGIONSPACE_PCIBAR
  392. %token <i> PARSEOP_REGIONSPACE_SMBUS
  393. %token <i> PARSEOP_REGISTER
  394. %token <i> PARSEOP_RELEASE
  395. %token <i> PARSEOP_RESERVED_BYTES
  396. %token <i> PARSEOP_RESET
  397. %token <i> PARSEOP_RESOURCETEMPLATE
  398. %token <i> PARSEOP_RESOURCETYPE_CONSUMER
  399. %token <i> PARSEOP_RESOURCETYPE_PRODUCER
  400. %token <i> PARSEOP_RETURN
  401. %token <i> PARSEOP_REVISION
  402. %token <i> PARSEOP_SCOPE
  403. %token <i> PARSEOP_SERIALIZERULE_NOTSERIAL
  404. %token <i> PARSEOP_SERIALIZERULE_SERIAL
  405. %token <i> PARSEOP_SHARETYPE_EXCLUSIVE
  406. %token <i> PARSEOP_SHARETYPE_SHARED
  407. %token <i> PARSEOP_SHIFTLEFT
  408. %token <i> PARSEOP_SHIFTRIGHT
  409. %token <i> PARSEOP_SIGNAL
  410. %token <i> PARSEOP_SIZEOF
  411. %token <i> PARSEOP_SLEEP
  412. %token <i> PARSEOP_STALL
  413. %token <i> PARSEOP_STARTDEPENDENTFN
  414. %token <i> PARSEOP_STARTDEPENDENTFN_NOPRI
  415. %token <i> PARSEOP_STORE
  416. %token <s> PARSEOP_STRING_LITERAL
  417. %token <i> PARSEOP_SUBTRACT
  418. %token <i> PARSEOP_SWITCH
  419. %token <i> PARSEOP_THERMALZONE
  420. %token <i> PARSEOP_TIMER
  421. %token <i> PARSEOP_TOBCD
  422. %token <i> PARSEOP_TOBUFFER
  423. %token <i> PARSEOP_TODECIMALSTRING
  424. %token <i> PARSEOP_TOHEXSTRING
  425. %token <i> PARSEOP_TOINTEGER
  426. %token <i> PARSEOP_TOSTRING
  427. %token <i> PARSEOP_TOUUID
  428. %token <i> PARSEOP_TRANSLATIONTYPE_DENSE
  429. %token <i> PARSEOP_TRANSLATIONTYPE_SPARSE
  430. %token <i> PARSEOP_TYPE_STATIC
  431. %token <i> PARSEOP_TYPE_TRANSLATION
  432. %token <i> PARSEOP_UNICODE
  433. %token <i> PARSEOP_UNLOAD
  434. %token <i> PARSEOP_UPDATERULE_ONES
  435. %token <i> PARSEOP_UPDATERULE_PRESERVE
  436. %token <i> PARSEOP_UPDATERULE_ZEROS
  437. %token <i> PARSEOP_VAR_PACKAGE
  438. %token <i> PARSEOP_VENDORLONG
  439. %token <i> PARSEOP_VENDORSHORT
  440. %token <i> PARSEOP_WAIT
  441. %token <i> PARSEOP_WHILE
  442. %token <i> PARSEOP_WORDBUSNUMBER
  443. %token <i> PARSEOP_WORDCONST
  444. %token <i> PARSEOP_WORDIO
  445. %token <i> PARSEOP_WORDSPACE
  446. %token <i> PARSEOP_XFERTYPE_8
  447. %token <i> PARSEOP_XFERTYPE_8_16
  448. %token <i> PARSEOP_XFERTYPE_16
  449. %token <i> PARSEOP_XOR
  450. %token <i> PARSEOP_ZERO
  451.  
  452. /*
  453.  * Special functions. These should probably stay at the end of this
  454.  * table.
  455.  */
  456. %token <i> PARSEOP___DATE__
  457. %token <i> PARSEOP___FILE__
  458. %token <i> PARSEOP___LINE__
  459.  
  460. /*
  461.  * Production names
  462.  */
  463.  
  464. %type <n> ASLCode
  465. %type <n> DefinitionBlockTerm
  466. %type <n> TermList
  467. %type <n> Term
  468. %type <n> CompilerDirective
  469. %type <n> ObjectList
  470. %type <n> Object
  471. %type <n> DataObject
  472. %type <n> BufferData
  473. %type <n> PackageData
  474. %type <n> IntegerData
  475. %type <n> StringData
  476. %type <n> NamedObject
  477. %type <n> NameSpaceModifier
  478. %type <n> UserTerm
  479. %type <n> ArgList
  480. %type <n> TermArg
  481. %type <n> Target
  482. %type <n> RequiredTarget
  483. %type <n> SimpleTarget
  484. %type <n> BufferTermData
  485. %type <n> ParameterTypePackage
  486. %type <n> ParameterTypePackageList
  487. %type <n> ParameterTypesPackage
  488. %type <n> ParameterTypesPackageList
  489.  
  490. %type <n> Type1Opcode
  491. %type <n> Type2Opcode
  492. %type <n> Type2IntegerOpcode
  493. %type <n> Type2StringOpcode
  494. %type <n> Type2BufferOpcode
  495. %type <n> Type2BufferOrStringOpcode
  496. %type <n> Type3Opcode
  497.  
  498. /* Obsolete %type <n> Type4Opcode */
  499.  
  500. %type <n> Type5Opcode
  501. %type <n> Type6Opcode
  502.  
  503. %type <n> LineTerm
  504. %type <n> IncludeTerm
  505. %type <n> IncludeCStyleTerm
  506. %type <n> ExternalTerm
  507.  
  508. %type <n> FieldUnitList
  509. %type <n> FieldUnit
  510. %type <n> FieldUnitEntry
  511.  
  512. %type <n> OffsetTerm
  513. %type <n> AccessAsTerm
  514. %type <n> OptionalAccessAttribTerm
  515.  
  516.  
  517. /* Named Objects */
  518.  
  519. %type <n> BankFieldTerm
  520. %type <n> CreateBitFieldTerm
  521. %type <n> CreateByteFieldTerm
  522. %type <n> CreateDWordFieldTerm
  523. %type <n> CreateFieldTerm
  524. %type <n> CreateQWordFieldTerm
  525. %type <n> CreateWordFieldTerm
  526. %type <n> DataRegionTerm
  527. %type <n> DeviceTerm
  528. %type <n> EventTerm
  529. %type <n> FieldTerm
  530. %type <n> FunctionTerm
  531. %type <n> IndexFieldTerm
  532. %type <n> MethodTerm
  533. %type <n> MutexTerm
  534. %type <n> OpRegionTerm
  535. %type <n> OpRegionSpaceIdTerm
  536. %type <n> PowerResTerm
  537. %type <n> ProcessorTerm
  538. %type <n> ThermalZoneTerm
  539.  
  540.  
  541. /* Namespace modifiers */
  542.  
  543. %type <n> AliasTerm
  544. %type <n> NameTerm
  545. %type <n> ScopeTerm
  546.  
  547. /* Type 1 opcodes */
  548.  
  549. %type <n> BreakTerm
  550. %type <n> BreakPointTerm
  551. %type <n> ContinueTerm
  552. %type <n> FatalTerm
  553. %type <n> IfElseTerm
  554. %type <n> IfTerm
  555. %type <n> ElseTerm
  556. %type <n> LoadTerm
  557. %type <n> NoOpTerm
  558. %type <n> NotifyTerm
  559. %type <n> ReleaseTerm
  560. %type <n> ResetTerm
  561. %type <n> ReturnTerm
  562. %type <n> SignalTerm
  563. %type <n> SleepTerm
  564. %type <n> StallTerm
  565. %type <n> SwitchTerm
  566. %type <n> CaseDefaultTermList
  567. //%type <n> CaseTermList
  568. %type <n> CaseTerm
  569. %type <n> DefaultTerm
  570. %type <n> UnloadTerm
  571. %type <n> WhileTerm
  572.  
  573. /* Type 2 opcodes */
  574.  
  575. %type <n> AcquireTerm
  576. %type <n> AddTerm
  577. %type <n> AndTerm
  578. %type <n> ConcatTerm
  579. %type <n> ConcatResTerm
  580. %type <n> CondRefOfTerm
  581. %type <n> CopyObjectTerm
  582. %type <n> DecTerm
  583. %type <n> DerefOfTerm
  584. %type <n> DivideTerm
  585. %type <n> FindSetLeftBitTerm
  586. %type <n> FindSetRightBitTerm
  587. %type <n> FromBCDTerm
  588. %type <n> IncTerm
  589. %type <n> IndexTerm
  590. %type <n> LAndTerm
  591. %type <n> LEqualTerm
  592. %type <n> LGreaterTerm
  593. %type <n> LGreaterEqualTerm
  594. %type <n> LLessTerm
  595. %type <n> LLessEqualTerm
  596. %type <n> LNotTerm
  597. %type <n> LNotEqualTerm
  598. %type <n> LoadTableTerm
  599. %type <n> LOrTerm
  600. %type <n> MatchTerm
  601. %type <n> MidTerm
  602. %type <n> ModTerm
  603. %type <n> MultiplyTerm
  604. %type <n> NAndTerm
  605. %type <n> NOrTerm
  606. %type <n> NotTerm
  607. %type <n> ObjectTypeTerm
  608. %type <n> OrTerm
  609. %type <n> RefOfTerm
  610. %type <n> ShiftLeftTerm
  611. %type <n> ShiftRightTerm
  612. %type <n> SizeOfTerm
  613. %type <n> StoreTerm
  614. %type <n> SubtractTerm
  615. %type <n> TimerTerm
  616. %type <n> ToBCDTerm
  617. %type <n> ToBufferTerm
  618. %type <n> ToDecimalStringTerm
  619. %type <n> ToHexStringTerm
  620. %type <n> ToIntegerTerm
  621. %type <n> ToStringTerm
  622. %type <n> WaitTerm
  623. %type <n> XOrTerm
  624.  
  625. %type <n> OptionalTermArg
  626. %type <n> OptionalReturnArg
  627. %type <n> OptionalListString
  628.  
  629.  
  630. /* Keywords */
  631.  
  632. %type <n> ObjectTypeKeyword
  633. %type <n> AccessTypeKeyword
  634. %type <n> AccessAttribKeyword
  635. %type <n> LockRuleKeyword
  636. %type <n> UpdateRuleKeyword
  637. %type <n> RegionSpaceKeyword
  638. %type <n> AddressSpaceKeyword
  639. %type <n> MatchOpKeyword
  640. %type <n> SerializeRuleKeyword
  641. %type <n> DMATypeKeyword
  642. %type <n> OptionalBusMasterKeyword
  643. %type <n> XferTypeKeyword
  644. %type <n> ResourceTypeKeyword
  645. %type <n> MinKeyword
  646. %type <n> MaxKeyword
  647. %type <n> DecodeKeyword
  648. %type <n> RangeTypeKeyword
  649. %type <n> MemTypeKeyword
  650. %type <n> OptionalReadWriteKeyword
  651. %type <n> InterruptTypeKeyword
  652. %type <n> InterruptLevel
  653. %type <n> ShareTypeKeyword
  654. %type <n> IODecodeKeyword
  655. %type <n> TypeKeyword
  656. %type <n> TranslationKeyword
  657. %type <n> AddressKeyword
  658.  
  659. /* Types */
  660.  
  661. %type <n> SuperName
  662. %type <n> ArgTerm
  663. %type <n> LocalTerm
  664. %type <n> DebugTerm
  665.  
  666. %type <n> Integer
  667. %type <n> ByteConst
  668. %type <n> WordConst
  669. %type <n> DWordConst
  670. %type <n> QWordConst
  671. %type <n> String
  672.  
  673. %type <n> ConstTerm
  674. %type <n> ByteConstExpr
  675. %type <n> WordConstExpr
  676. %type <n> DWordConstExpr
  677. %type <n> QWordConstExpr
  678. %type <n> ConstExprTerm
  679.  
  680. %type <n> BufferTerm
  681. %type <n> ByteList
  682. %type <n> DWordList
  683.  
  684. %type <n> PackageTerm
  685. %type <n> PackageList
  686. %type <n> PackageElement
  687.  
  688. %type <n> VarPackageLengthTerm
  689.  
  690. /* Macros */
  691.  
  692. %type <n> EISAIDTerm
  693. %type <n> ResourceTemplateTerm
  694. %type <n> ToUUIDTerm
  695. %type <n> UnicodeTerm
  696. %type <n> ResourceMacroList
  697. %type <n> ResourceMacroTerm
  698.  
  699. %type <n> DMATerm
  700. %type <n> DWordIOTerm
  701. %type <n> DWordMemoryTerm
  702. %type <n> DWordSpaceTerm
  703. %type <n> EndDependentFnTerm
  704. %type <n> ExtendedIOTerm
  705. %type <n> ExtendedMemoryTerm
  706. %type <n> ExtendedSpaceTerm
  707. %type <n> FixedIOTerm
  708. %type <n> InterruptTerm
  709. %type <n> IOTerm
  710. %type <n> IRQNoFlagsTerm
  711. %type <n> IRQTerm
  712. %type <n> Memory24Term
  713. %type <n> Memory32FixedTerm
  714. %type <n> Memory32Term
  715. %type <n> QWordIOTerm
  716. %type <n> QWordMemoryTerm
  717. %type <n> QWordSpaceTerm
  718. %type <n> RegisterTerm
  719. %type <n> StartDependentFnTerm
  720. %type <n> StartDependentFnNoPriTerm
  721. %type <n> VendorLongTerm
  722. %type <n> VendorShortTerm
  723. %type <n> WordBusNumberTerm
  724. %type <n> WordIOTerm
  725. %type <n> WordSpaceTerm
  726.  
  727. %type <n> NameString
  728. %type <n> NameSeg
  729.  
  730.  
  731. /* Local types that help construct the AML, not in ACPI spec */
  732.  
  733. %type <n> IncludeEndTerm
  734. %type <n> AmlPackageLengthTerm
  735. %type <n> OptionalByteConstExpr
  736. %type <n> OptionalDWordConstExpr
  737. %type <n> OptionalQWordConstExpr
  738. %type <n> OptionalSerializeRuleKeyword
  739. %type <n> OptionalResourceType_First
  740. %type <n> OptionalResourceType
  741. %type <n> OptionalMinType
  742. %type <n> OptionalMaxType
  743. %type <n> OptionalMemType
  744. %type <n> OptionalCount
  745. %type <n> OptionalDecodeType
  746. %type <n> OptionalRangeType
  747. %type <n> OptionalShareType
  748. %type <n> OptionalType
  749. %type <n> OptionalType_Last
  750. %type <n> OptionalTranslationType_Last
  751. %type <n> OptionalStringData
  752. %type <n> OptionalNameString
  753. %type <n> OptionalNameString_First
  754. %type <n> OptionalNameString_Last
  755. %type <n> OptionalAddressRange
  756. %type <n> OptionalObjectTypeKeyword
  757. %type <n> OptionalParameterTypePackage
  758. %type <n> OptionalParameterTypesPackage
  759. %type <n> OptionalReference
  760. %type <n> OptionalAccessSize
  761.  
  762. %type <n> TermArgItem
  763. %type <n> NameStringItem
  764.  
  765. %%
  766.  
  767.  
  768. /*******************************************************************************
  769.  *
  770.  * Production rules start here
  771.  *
  772.  ******************************************************************************/
  773.  
  774. /*
  775.  * ASL Names
  776.  */
  777.  
  778.  
  779. /*
  780.  * Blocks, Data, and Opcodes
  781.  */
  782.  
  783. ASLCode
  784.     : DefinitionBlockTerm
  785.     | error                         {YYABORT; $$ = NULL;}
  786.     ;
  787.  
  788. /*
  789.  * Note concerning support for "module-level code".
  790.  *
  791.  * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
  792.  * methods (the so-called module-level code.) This support was explicitly
  793.  * removed in ACPI 2.0, but this type of code continues to be created by
  794.  * BIOS vendors. In order to support the disassembly and recompilation of
  795.  * such code (and the porting of ASL code to iASL), iASL supports this
  796.  * code in violation of the current ACPI specification.
  797.  *
  798.  * The grammar change to support module-level code is to revert the
  799.  * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
  800.  * original use of {TermList} instead (see below.) This allows the use
  801.  * of Type1 and Type2 opcodes at module level.
  802.  */
  803. DefinitionBlockTerm
  804.     : PARSEOP_DEFINITIONBLOCK '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITIONBLOCK);}
  805.         String ','
  806.         String ','
  807.         ByteConst ','
  808.         String ','
  809.         String ','
  810.         DWordConst
  811.         ')'                         {TrSetEndLineNumber ($<n>3);}
  812.             '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
  813.     ;
  814.  
  815. /* ACPI 3.0 -- allow semicolons between terms */
  816.  
  817. TermList
  818.     :                               {$$ = NULL;}
  819.     | TermList Term                 {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
  820.     | TermList ';' Term             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
  821.     ;
  822.  
  823. Term
  824.     : Object                        {}
  825.     | Type1Opcode                   {}
  826.     | Type2Opcode                   {}
  827.     | Type2IntegerOpcode            {}
  828.     | Type2StringOpcode             {}
  829.     | Type2BufferOpcode             {}
  830.     | Type2BufferOrStringOpcode     {}
  831.     | error                         {$$ = AslDoError(); yyclearin;}
  832.     ;
  833.  
  834. CompilerDirective
  835.     : IncludeTerm                   {}
  836.     | IncludeCStyleTerm             {$$ = NULL;}
  837.     | LineTerm                                          {$$ = NULL;}
  838.     | ExternalTerm                  {}
  839.     ;
  840.  
  841. ObjectList
  842.     :                               {$$ = NULL;}
  843.     | ObjectList Object             {$$ = TrLinkPeerNode ($1,$2);}
  844.     | error                         {$$ = AslDoError(); yyclearin;}
  845.     ;
  846.  
  847. Object
  848.     : CompilerDirective             {}
  849.     | NamedObject                   {}
  850.     | NameSpaceModifier             {}
  851.     ;
  852.  
  853. DataObject
  854.     : BufferData                    {}
  855.     | PackageData                   {}
  856.     | IntegerData                   {}
  857.     | StringData                    {}
  858.     ;
  859.  
  860. BufferData
  861.     : Type5Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
  862.     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
  863.     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
  864.     | BufferTerm                    {}
  865.     ;
  866.  
  867. PackageData
  868.     : PackageTerm                   {}
  869.     ;
  870.  
  871. IntegerData
  872.     : Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
  873.     | Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
  874.     | Integer                       {}
  875.     | ConstTerm                     {}
  876.     ;
  877.  
  878. StringData
  879.     : Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
  880.     | String                        {}
  881.     ;
  882.  
  883. NamedObject
  884.     : BankFieldTerm                 {}
  885.     | CreateBitFieldTerm            {}
  886.     | CreateByteFieldTerm           {}
  887.     | CreateDWordFieldTerm          {}
  888.     | CreateFieldTerm               {}
  889.     | CreateQWordFieldTerm          {}
  890.     | CreateWordFieldTerm           {}
  891.     | DataRegionTerm                {}
  892.     | DeviceTerm                    {}
  893.     | EventTerm                     {}
  894.     | FieldTerm                     {}
  895.     | FunctionTerm                  {}
  896.     | IndexFieldTerm                {}
  897.     | MethodTerm                    {}
  898.     | MutexTerm                     {}
  899.     | OpRegionTerm                  {}
  900.     | PowerResTerm                  {}
  901.     | ProcessorTerm                 {}
  902.     | ThermalZoneTerm               {}
  903.     ;
  904.  
  905. NameSpaceModifier
  906.     : AliasTerm                     {}
  907.     | NameTerm                      {}
  908.     | ScopeTerm                     {}
  909.     ;
  910.  
  911. UserTerm
  912.     : NameString '('                {TrUpdateNode (PARSEOP_METHODCALL, $1);}
  913.         ArgList ')'                 {$$ = TrLinkChildNode ($1,$4);}
  914.     ;
  915.  
  916. ArgList
  917.     :                               {$$ = NULL;}
  918.     | TermArg
  919.     | ArgList ','                   /* Allows a trailing comma at list end */
  920.     | ArgList ','
  921.         TermArg                     {$$ = TrLinkPeerNode ($1,$3);}
  922.     ;
  923.  
  924. /*
  925. Removed from TermArg due to reduce/reduce conflicts
  926.     | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
  927.     | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
  928.     | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
  929.     | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
  930.  
  931. */
  932.  
  933. TermArg
  934.     : Type2Opcode                   {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
  935.     | DataObject                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
  936.     | NameString                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
  937.     | ArgTerm                       {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
  938.     | LocalTerm                     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
  939.     ;
  940.  
  941. Target
  942.     :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_TARGET | NODE_COMPILE_TIME_CONST);} /* Placeholder is a ZeroOp object */
  943.     | ','                           {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_TARGET | NODE_COMPILE_TIME_CONST);} /* Placeholder is a ZeroOp object */
  944.     | ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
  945.     ;
  946.  
  947. RequiredTarget
  948.     : ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
  949.     ;
  950.  
  951. SimpleTarget
  952.     : NameString                    {}
  953.     | LocalTerm                     {}
  954.     | ArgTerm                       {}
  955.     ;
  956.  
  957. /* Rules for specifying the type of one method argument or return value */
  958.  
  959. ParameterTypePackage
  960.     :                               {$$ = NULL;}
  961.     | ObjectTypeKeyword             {$$ = $1;}
  962.     | ParameterTypePackage ','
  963.         ObjectTypeKeyword           {$$ = TrLinkPeerNodes (2,$1,$3);}
  964.     ;
  965.  
  966. ParameterTypePackageList
  967.     :                               {$$ = NULL;}
  968.     | ObjectTypeKeyword             {$$ = $1;}
  969.     | '{' ParameterTypePackage '}'  {$$ = $2;}
  970.     ;
  971.  
  972. OptionalParameterTypePackage
  973.     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
  974.     | ',' ParameterTypePackageList  {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
  975.     ;
  976.  
  977. /* Rules for specifying the types for method arguments */
  978.  
  979. ParameterTypesPackage
  980.     : ParameterTypePackageList      {$$ = $1;}
  981.     | ParameterTypesPackage ','
  982.         ParameterTypePackageList    {$$ = TrLinkPeerNodes (2,$1,$3);}
  983.     ;
  984.  
  985. ParameterTypesPackageList
  986.     :                               {$$ = NULL;}
  987.     | ObjectTypeKeyword             {$$ = $1;}
  988.     | '{' ParameterTypesPackage '}' {$$ = $2;}
  989.     ;
  990.  
  991. OptionalParameterTypesPackage
  992.     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
  993.     | ',' ParameterTypesPackageList {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
  994.     ;
  995.  
  996.  
  997. /* Opcode types */
  998.  
  999. Type1Opcode
  1000.     : BreakTerm                     {}
  1001.     | BreakPointTerm                {}
  1002.     | ContinueTerm                  {}
  1003.     | FatalTerm                     {}
  1004.     | IfElseTerm                    {}
  1005.     | LoadTerm                      {}
  1006.     | NoOpTerm                      {}
  1007.     | NotifyTerm                    {}
  1008.     | ReleaseTerm                   {}
  1009.     | ResetTerm                     {}
  1010.     | ReturnTerm                    {}
  1011.     | SignalTerm                    {}
  1012.     | SleepTerm                     {}
  1013.     | StallTerm                     {}
  1014.     | SwitchTerm                    {}
  1015.     | UnloadTerm                    {}
  1016.     | WhileTerm                     {}
  1017.     ;
  1018.  
  1019. Type2Opcode
  1020.     : AcquireTerm                   {}
  1021.     | CondRefOfTerm                 {}
  1022.     | CopyObjectTerm                {}
  1023.     | DerefOfTerm                   {}
  1024.     | ObjectTypeTerm                {}
  1025.     | RefOfTerm                     {}
  1026.     | SizeOfTerm                    {}
  1027.     | StoreTerm                     {}
  1028.     | TimerTerm                     {}
  1029.     | WaitTerm                      {}
  1030.     | UserTerm                      {}
  1031.     ;
  1032.  
  1033. /*
  1034.  * Type 3/4/5 opcodes
  1035.  */
  1036.  
  1037. Type2IntegerOpcode                  /* "Type3" opcodes */
  1038.     : AddTerm                       {}
  1039.     | AndTerm                       {}
  1040.     | DecTerm                       {}
  1041.     | DivideTerm                    {}
  1042.     | FindSetLeftBitTerm            {}
  1043.     | FindSetRightBitTerm           {}
  1044.     | FromBCDTerm                   {}
  1045.     | IncTerm                       {}
  1046.     | IndexTerm                     {}
  1047.     | LAndTerm                      {}
  1048.     | LEqualTerm                    {}
  1049.     | LGreaterTerm                  {}
  1050.     | LGreaterEqualTerm             {}
  1051.     | LLessTerm                     {}
  1052.     | LLessEqualTerm                {}
  1053.     | LNotTerm                      {}
  1054.     | LNotEqualTerm                 {}
  1055.     | LoadTableTerm                 {}
  1056.     | LOrTerm                       {}
  1057.     | MatchTerm                     {}
  1058.     | ModTerm                       {}
  1059.     | MultiplyTerm                  {}
  1060.     | NAndTerm                      {}
  1061.     | NOrTerm                       {}
  1062.     | NotTerm                       {}
  1063.     | OrTerm                        {}
  1064.     | ShiftLeftTerm                 {}
  1065.     | ShiftRightTerm                {}
  1066.     | SubtractTerm                  {}
  1067.     | ToBCDTerm                     {}
  1068.     | ToIntegerTerm                 {}
  1069.     | XOrTerm                       {}
  1070.     ;
  1071.  
  1072. Type2StringOpcode                   /* "Type4" Opcodes */
  1073.     : ToDecimalStringTerm           {}
  1074.     | ToHexStringTerm               {}
  1075.     | ToStringTerm                  {}
  1076.     ;
  1077.  
  1078. Type2BufferOpcode                   /* "Type5" Opcodes */
  1079.     : ToBufferTerm                  {}
  1080.     | ConcatResTerm                 {}
  1081.     ;
  1082.  
  1083. Type2BufferOrStringOpcode
  1084.     : ConcatTerm                    {}
  1085.     | MidTerm                       {}
  1086.     ;
  1087.  
  1088. /*
  1089.  * A type 3 opcode evaluates to an Integer and cannot have a destination operand
  1090.  */
  1091.  
  1092. Type3Opcode
  1093.     : EISAIDTerm                    {}
  1094.     ;
  1095.  
  1096. /* Obsolete
  1097. Type4Opcode
  1098.     : ConcatTerm                    {}
  1099.     | ToDecimalStringTerm           {}
  1100.     | ToHexStringTerm               {}
  1101.     | MidTerm                       {}
  1102.     | ToStringTerm                  {}
  1103.     ;
  1104. */
  1105.  
  1106.  
  1107. Type5Opcode
  1108.     : ResourceTemplateTerm          {}
  1109.     | UnicodeTerm                   {}
  1110.     | ToUUIDTerm                    {}
  1111.     ;
  1112.  
  1113. Type6Opcode
  1114.     : RefOfTerm                     {}
  1115.     | DerefOfTerm                   {}
  1116.     | IndexTerm                     {}
  1117.     | UserTerm                      {}
  1118.     ;
  1119.  
  1120. IncludeTerm
  1121.     : PARSEOP_INCLUDE '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE);}
  1122.         String  ')'                 {TrLinkChildren ($<n>3,1,$4);FlOpenIncludeFile ($4);}
  1123.         TermList
  1124.         IncludeEndTerm              {$$ = TrLinkPeerNodes (3,$<n>3,$7,$8);}
  1125.     ;
  1126.  
  1127. IncludeEndTerm
  1128.     : PARSEOP_INCLUDE_END                       {$$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);}
  1129.     ;
  1130.  
  1131. IncludeCStyleTerm
  1132.     : PARSEOP_INCLUDE_CSTYLE
  1133.         String                      {FlOpenIncludeFile ($2);}
  1134.     ;
  1135.  
  1136. LineTerm
  1137.         : PARSEOP_LINE_CSTYLE
  1138.                 Integer                                         {FlSetLineNumber ($2);}
  1139.         ;
  1140.  
  1141. ExternalTerm
  1142.     : PARSEOP_EXTERNAL '('
  1143.         NameString
  1144.         OptionalObjectTypeKeyword
  1145.         OptionalParameterTypePackage
  1146.         OptionalParameterTypesPackage
  1147.         ')'                         {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
  1148.     | PARSEOP_EXTERNAL '('
  1149.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1150.     ;
  1151.  
  1152.  
  1153. /******* Named Objects *******************************************************/
  1154.  
  1155.  
  1156. BankFieldTerm
  1157.     : PARSEOP_BANKFIELD '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
  1158.         NameString
  1159.         NameStringItem
  1160.         TermArgItem
  1161.         ',' AccessTypeKeyword
  1162.         ',' LockRuleKeyword
  1163.         ',' UpdateRuleKeyword
  1164.         ')' '{'
  1165.             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,7,$4,$5,$6,$8,$10,$12,$15);}
  1166.     | PARSEOP_BANKFIELD '('
  1167.         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
  1168.     ;
  1169.  
  1170. FieldUnitList
  1171.     :                               {$$ = NULL;}
  1172.     | FieldUnit
  1173.     | FieldUnitList ','             /* Allows a trailing comma at list end */
  1174.     | FieldUnitList ','
  1175.         FieldUnit                   {$$ = TrLinkPeerNode ($1,$3);}
  1176.     ;
  1177.  
  1178. FieldUnit
  1179.     : FieldUnitEntry                {}
  1180.     | OffsetTerm                    {}
  1181.     | AccessAsTerm                  {}
  1182.     ;
  1183.  
  1184. FieldUnitEntry
  1185.     : ',' AmlPackageLengthTerm      {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
  1186.     | NameSeg ','
  1187.         AmlPackageLengthTerm        {$$ = TrLinkChildNode ($1,$3);}
  1188.     ;
  1189.  
  1190. OffsetTerm
  1191.     : PARSEOP_OFFSET '('
  1192.         AmlPackageLengthTerm
  1193.         ')'                         {$$ = TrCreateNode (PARSEOP_OFFSET,1,$3);}
  1194.     | PARSEOP_OFFSET '('
  1195.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1196.     ;
  1197.  
  1198. AccessAsTerm
  1199.     : PARSEOP_ACCESSAS '('
  1200.         AccessTypeKeyword
  1201.         OptionalAccessAttribTerm
  1202.         ')'                         {$$ = TrCreateNode (PARSEOP_ACCESSAS,2,$3,$4);}
  1203.     | PARSEOP_ACCESSAS '('
  1204.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1205.     ;
  1206.  
  1207. CreateBitFieldTerm
  1208.     : PARSEOP_CREATEBITFIELD '('        {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
  1209.         TermArg
  1210.         TermArgItem
  1211.         NameStringItem
  1212.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
  1213.     | PARSEOP_CREATEBITFIELD '('
  1214.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1215.     ;
  1216.  
  1217. CreateByteFieldTerm
  1218.     : PARSEOP_CREATEBYTEFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
  1219.         TermArg
  1220.         TermArgItem
  1221.         NameStringItem
  1222.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
  1223.     | PARSEOP_CREATEBYTEFIELD '('
  1224.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1225.     ;
  1226.  
  1227. CreateDWordFieldTerm
  1228.     : PARSEOP_CREATEDWORDFIELD '('      {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
  1229.         TermArg
  1230.         TermArgItem
  1231.         NameStringItem
  1232.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
  1233.     | PARSEOP_CREATEDWORDFIELD '('
  1234.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1235.     ;
  1236.  
  1237. CreateFieldTerm
  1238.     : PARSEOP_CREATEFIELD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
  1239.         TermArg
  1240.         TermArgItem
  1241.         TermArgItem
  1242.         NameStringItem
  1243.         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,TrSetNodeFlags ($7, NODE_IS_NAME_DECLARATION));}
  1244.     | PARSEOP_CREATEFIELD '('
  1245.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1246.     ;
  1247.  
  1248. CreateQWordFieldTerm
  1249.     : PARSEOP_CREATEQWORDFIELD '('      {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
  1250.         TermArg
  1251.         TermArgItem
  1252.         NameStringItem
  1253.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
  1254.     | PARSEOP_CREATEQWORDFIELD '('
  1255.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1256.     ;
  1257.  
  1258. CreateWordFieldTerm
  1259.     : PARSEOP_CREATEWORDFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
  1260.         TermArg
  1261.         TermArgItem
  1262.         NameStringItem
  1263.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
  1264.     | PARSEOP_CREATEWORDFIELD '('
  1265.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1266.     ;
  1267.  
  1268. DataRegionTerm
  1269.     : PARSEOP_DATATABLEREGION '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
  1270.         NameString
  1271.         TermArgItem
  1272.         TermArgItem
  1273.         TermArgItem
  1274.         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$6,$7);}
  1275.     | PARSEOP_DATATABLEREGION '('
  1276.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1277.     ;
  1278.  
  1279. DeviceTerm
  1280.     : PARSEOP_DEVICE '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
  1281.         NameString
  1282.         ')' '{'
  1283.             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
  1284.     | PARSEOP_DEVICE '('
  1285.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1286.     ;
  1287.  
  1288. EventTerm
  1289.     : PARSEOP_EVENT '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
  1290.         NameString
  1291.         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
  1292.     | PARSEOP_EVENT '('
  1293.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1294.     ;
  1295.  
  1296. FieldTerm
  1297.     : PARSEOP_FIELD '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
  1298.         NameString
  1299.         ',' AccessTypeKeyword
  1300.         ',' LockRuleKeyword
  1301.         ',' UpdateRuleKeyword
  1302.         ')' '{'
  1303.             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
  1304.     | PARSEOP_FIELD '('
  1305.         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
  1306.     ;
  1307.  
  1308. FunctionTerm
  1309.     : PARSEOP_FUNCTION '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
  1310.         NameString
  1311.         OptionalParameterTypePackage
  1312.         OptionalParameterTypesPackage
  1313.         ')' '{'
  1314.             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
  1315.                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
  1316.                                         TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
  1317.                                         TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
  1318.     | PARSEOP_FUNCTION '('
  1319.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1320.     ;
  1321.  
  1322. IndexFieldTerm
  1323.     : PARSEOP_INDEXFIELD '('            {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
  1324.         NameString
  1325.         NameStringItem
  1326.         ',' AccessTypeKeyword
  1327.         ',' LockRuleKeyword
  1328.         ',' UpdateRuleKeyword
  1329.         ')' '{'
  1330.             FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
  1331.     | PARSEOP_INDEXFIELD '('
  1332.         error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
  1333.     ;
  1334.  
  1335. MethodTerm
  1336.     : PARSEOP_METHOD  '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
  1337.         NameString
  1338.         OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
  1339.         OptionalSerializeRuleKeyword
  1340.         OptionalByteConstExpr
  1341.         OptionalParameterTypePackage
  1342.         OptionalParameterTypesPackage
  1343.         ')' '{'
  1344.             TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$9,$10,$13);}
  1345.     | PARSEOP_METHOD '('
  1346.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1347.     ;
  1348.  
  1349. MutexTerm
  1350.     : PARSEOP_MUTEX '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
  1351.         NameString
  1352.         ',' ByteConstExpr
  1353.         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
  1354.     | PARSEOP_MUTEX '('
  1355.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1356.     ;
  1357.  
  1358. OpRegionTerm
  1359.     : PARSEOP_OPERATIONREGION '('       {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
  1360.         NameString
  1361.         ',' OpRegionSpaceIdTerm
  1362.         TermArgItem
  1363.         TermArgItem
  1364.         ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8);}
  1365.     | PARSEOP_OPERATIONREGION '('
  1366.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1367.     ;
  1368.  
  1369. OpRegionSpaceIdTerm
  1370.     : RegionSpaceKeyword            {}
  1371.     | ByteConst                     {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
  1372.     ;
  1373.  
  1374. PowerResTerm
  1375.     : PARSEOP_POWERRESOURCE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
  1376.         NameString
  1377.         ',' ByteConstExpr
  1378.         ',' WordConstExpr
  1379.         ')' '{'
  1380.             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
  1381.     | PARSEOP_POWERRESOURCE '('
  1382.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1383.     ;
  1384.  
  1385. ProcessorTerm
  1386.     : PARSEOP_PROCESSOR '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
  1387.         NameString
  1388.         ',' ByteConstExpr
  1389.         OptionalDWordConstExpr
  1390.         OptionalByteConstExpr
  1391.         ')' '{'
  1392.             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
  1393.     | PARSEOP_PROCESSOR '('
  1394.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1395.     ;
  1396.  
  1397. ThermalZoneTerm
  1398.     : PARSEOP_THERMALZONE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
  1399.         NameString
  1400.         ')' '{'
  1401.             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
  1402.     | PARSEOP_THERMALZONE '('
  1403.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1404.     ;
  1405.  
  1406.  
  1407. /******* Namespace modifiers *************************************************/
  1408.  
  1409.  
  1410. AliasTerm
  1411.     : PARSEOP_ALIAS '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
  1412.         NameString
  1413.         NameStringItem
  1414.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
  1415.     | PARSEOP_ALIAS '('
  1416.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1417.     ;
  1418.  
  1419. NameTerm
  1420.     : PARSEOP_NAME '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
  1421.         NameString
  1422.         ',' DataObject
  1423.         ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
  1424.     | PARSEOP_NAME '('
  1425.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1426.     ;
  1427.  
  1428. ScopeTerm
  1429.     : PARSEOP_SCOPE '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
  1430.         NameString
  1431.         ')' '{'
  1432.             ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
  1433.     | PARSEOP_SCOPE '('
  1434.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1435.     ;
  1436.  
  1437.  
  1438. /******* Type 1 opcodes *******************************************************/
  1439.  
  1440.  
  1441. BreakTerm
  1442.     : PARSEOP_BREAK                                     {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
  1443.     ;
  1444.  
  1445. BreakPointTerm
  1446.     : PARSEOP_BREAKPOINT                        {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
  1447.     ;
  1448.  
  1449. ContinueTerm
  1450.     : PARSEOP_CONTINUE                          {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
  1451.     ;
  1452.  
  1453. FatalTerm
  1454.     : PARSEOP_FATAL '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
  1455.         ByteConstExpr
  1456.         ',' DWordConstExpr
  1457.         TermArgItem
  1458.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
  1459.     | PARSEOP_FATAL '('
  1460.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1461.     ;
  1462.  
  1463. IfElseTerm
  1464.     : IfTerm ElseTerm               {$$ = TrLinkPeerNode ($1,$2);}
  1465.     ;
  1466.  
  1467. IfTerm
  1468.     : PARSEOP_IF '('                            {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
  1469.         TermArg
  1470.         ')' '{'
  1471.             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
  1472.  
  1473.     | PARSEOP_IF '('
  1474.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1475.     ;
  1476.  
  1477. ElseTerm
  1478.     :                               {$$ = NULL;}
  1479.     | PARSEOP_ELSE '{'                          {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
  1480.         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
  1481.  
  1482.     | PARSEOP_ELSE '{'
  1483.         error '}'                   {$$ = AslDoError(); yyclearin;}
  1484.  
  1485.     | PARSEOP_ELSE
  1486.         error                       {$$ = AslDoError(); yyclearin;}
  1487.  
  1488.     | PARSEOP_ELSEIF '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
  1489.         TermArg                                         {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
  1490.         ')' '{'
  1491.             TermList '}'                    {TrLinkChildren ($<n>5,2,$4,$8);}
  1492.         ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
  1493.                                     {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
  1494.  
  1495.     | PARSEOP_ELSEIF '('
  1496.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1497.  
  1498.     | PARSEOP_ELSEIF
  1499.         error                       {$$ = AslDoError(); yyclearin;}
  1500.     ;
  1501.  
  1502. LoadTerm
  1503.     : PARSEOP_LOAD '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
  1504.         NameString
  1505.         RequiredTarget
  1506.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1507.     | PARSEOP_LOAD '('
  1508.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1509.     ;
  1510.  
  1511. NoOpTerm
  1512.     : PARSEOP_NOOP                                      {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
  1513.     ;
  1514.  
  1515. NotifyTerm
  1516.     : PARSEOP_NOTIFY '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
  1517.         SuperName
  1518.         TermArgItem
  1519.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1520.     | PARSEOP_NOTIFY '('
  1521.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1522.     ;
  1523.  
  1524. ReleaseTerm
  1525.     : PARSEOP_RELEASE '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
  1526.         SuperName
  1527.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1528.     | PARSEOP_RELEASE '('
  1529.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1530.     ;
  1531.  
  1532. ResetTerm
  1533.     : PARSEOP_RESET '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
  1534.         SuperName
  1535.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1536.     | PARSEOP_RESET '('
  1537.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1538.     ;
  1539.  
  1540. ReturnTerm
  1541.     : PARSEOP_RETURN '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
  1542.         OptionalReturnArg
  1543.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1544.     | PARSEOP_RETURN                            {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
  1545.     | PARSEOP_RETURN '('
  1546.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1547.     ;
  1548.  
  1549. SignalTerm
  1550.     : PARSEOP_SIGNAL '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
  1551.         SuperName
  1552.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1553.     | PARSEOP_SIGNAL '('
  1554.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1555.     ;
  1556.  
  1557. SleepTerm
  1558.     : PARSEOP_SLEEP '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
  1559.         TermArg
  1560.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1561.     | PARSEOP_SLEEP '('
  1562.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1563.     ;
  1564.  
  1565. StallTerm
  1566.     : PARSEOP_STALL '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
  1567.         TermArg
  1568.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1569.     | PARSEOP_STALL '('
  1570.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1571.     ;
  1572.  
  1573. SwitchTerm
  1574.     : PARSEOP_SWITCH '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
  1575.         TermArg
  1576.         ')' '{'
  1577.             CaseDefaultTermList '}'
  1578.                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
  1579.     | PARSEOP_SWITCH '('
  1580.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1581.     ;
  1582.  
  1583. /*
  1584.  * Case-Default list; allow only one Default term and unlimited Case terms
  1585.  */
  1586.  
  1587. CaseDefaultTermList
  1588.     :                               {$$ = NULL;}
  1589.     | CaseTerm  {}
  1590.     | DefaultTerm   {}
  1591.     | CaseDefaultTermList
  1592.         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
  1593.     | CaseDefaultTermList
  1594.         DefaultTerm                 {$$ = TrLinkPeerNode ($1,$2);}
  1595.  
  1596. /* Original - attempts to force zero or one default term within the switch */
  1597.  
  1598. /*
  1599. CaseDefaultTermList
  1600.     :                               {$$ = NULL;}
  1601.     | CaseTermList
  1602.         DefaultTerm
  1603.         CaseTermList                {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
  1604.     | CaseTermList
  1605.         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
  1606.     ;
  1607.  
  1608. CaseTermList
  1609.     :                               {$$ = NULL;}
  1610.     | CaseTerm                      {}
  1611.     | CaseTermList
  1612.         CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
  1613.     ;
  1614. */
  1615.  
  1616. CaseTerm
  1617.     : PARSEOP_CASE '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
  1618.         DataObject
  1619.         ')' '{'
  1620.             TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
  1621.     | PARSEOP_CASE '('
  1622.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1623.     ;
  1624.  
  1625. DefaultTerm
  1626.     : PARSEOP_DEFAULT '{'                       {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
  1627.         TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
  1628.     | PARSEOP_DEFAULT '{'
  1629.         error '}'                   {$$ = AslDoError(); yyclearin;}
  1630.     ;
  1631.  
  1632. UnloadTerm
  1633.     : PARSEOP_UNLOAD '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
  1634.         SuperName
  1635.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1636.     | PARSEOP_UNLOAD '('
  1637.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1638.     ;
  1639.  
  1640. WhileTerm
  1641.     : PARSEOP_WHILE '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
  1642.         TermArg
  1643.         ')' '{' TermList '}'
  1644.                                     {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
  1645.     | PARSEOP_WHILE '('
  1646.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1647.     ;
  1648.  
  1649.  
  1650. /******* Type 2 opcodes *******************************************************/
  1651.  
  1652. AcquireTerm
  1653.     : PARSEOP_ACQUIRE '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
  1654.         SuperName
  1655.         ',' WordConstExpr
  1656.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
  1657.     | PARSEOP_ACQUIRE '('
  1658.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1659.     ;
  1660.  
  1661. AddTerm
  1662.     : PARSEOP_ADD '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
  1663.         TermArg
  1664.         TermArgItem
  1665.         Target
  1666.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1667.     | PARSEOP_ADD '('
  1668.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1669.     ;
  1670.  
  1671. AndTerm
  1672.     : PARSEOP_AND '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
  1673.         TermArg
  1674.         TermArgItem
  1675.         Target
  1676.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1677.     | PARSEOP_AND '('
  1678.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1679.     ;
  1680.  
  1681. ConcatTerm
  1682.     : PARSEOP_CONCATENATE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
  1683.         TermArg
  1684.         TermArgItem
  1685.         Target
  1686.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1687.     | PARSEOP_CONCATENATE '('
  1688.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1689.     ;
  1690.  
  1691. ConcatResTerm
  1692.     : PARSEOP_CONCATENATERESTEMPLATE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATERESTEMPLATE);}
  1693.         TermArg
  1694.         TermArgItem
  1695.         Target
  1696.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1697.     | PARSEOP_CONCATENATERESTEMPLATE '('
  1698.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1699.     ;
  1700.  
  1701. CondRefOfTerm
  1702.     : PARSEOP_CONDREFOF '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
  1703.         SuperName
  1704.         Target
  1705.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1706.     | PARSEOP_CONDREFOF '('
  1707.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1708.     ;
  1709.  
  1710. CopyObjectTerm
  1711.     : PARSEOP_COPYOBJECT '('            {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
  1712.         TermArg
  1713.         ',' SimpleTarget
  1714.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
  1715.     | PARSEOP_COPYOBJECT '('
  1716.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1717.     ;
  1718.  
  1719. DecTerm
  1720.     : PARSEOP_DECREMENT '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
  1721.         SuperName
  1722.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1723.     | PARSEOP_DECREMENT '('
  1724.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1725.     ;
  1726.  
  1727. DerefOfTerm
  1728.     : PARSEOP_DEREFOF '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
  1729.         TermArg
  1730.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1731.     | PARSEOP_DEREFOF '('
  1732.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1733.     ;
  1734.  
  1735. DivideTerm
  1736.     : PARSEOP_DIVIDE '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
  1737.         TermArg
  1738.         TermArgItem
  1739.         Target
  1740.         Target
  1741.         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
  1742.     | PARSEOP_DIVIDE '('
  1743.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1744.     ;
  1745.  
  1746. FindSetLeftBitTerm
  1747.     : PARSEOP_FINDSETLEFTBIT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
  1748.         TermArg
  1749.         Target
  1750.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1751.     | PARSEOP_FINDSETLEFTBIT '('
  1752.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1753.     ;
  1754.  
  1755. FindSetRightBitTerm
  1756.     : PARSEOP_FINDSETRIGHTBIT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
  1757.         TermArg
  1758.         Target
  1759.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1760.     | PARSEOP_FINDSETRIGHTBIT '('
  1761.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1762.     ;
  1763.  
  1764. FromBCDTerm
  1765.     : PARSEOP_FROMBCD '('                       {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
  1766.         TermArg
  1767.         Target
  1768.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1769.     | PARSEOP_FROMBCD '('
  1770.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1771.     ;
  1772.  
  1773. IncTerm
  1774.     : PARSEOP_INCREMENT '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
  1775.         SuperName
  1776.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1777.     | PARSEOP_INCREMENT '('
  1778.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1779.     ;
  1780.  
  1781. IndexTerm
  1782.     : PARSEOP_INDEX '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
  1783.         TermArg
  1784.         TermArgItem
  1785.         Target
  1786.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1787.     | PARSEOP_INDEX '('
  1788.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1789.     ;
  1790.  
  1791. LAndTerm
  1792.     : PARSEOP_LAND '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
  1793.         TermArg
  1794.         TermArgItem
  1795.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1796.     | PARSEOP_LAND '('
  1797.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1798.     ;
  1799.  
  1800. LEqualTerm
  1801.     : PARSEOP_LEQUAL '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
  1802.         TermArg
  1803.         TermArgItem
  1804.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1805.     | PARSEOP_LEQUAL '('
  1806.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1807.     ;
  1808.  
  1809. LGreaterTerm
  1810.     : PARSEOP_LGREATER '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
  1811.         TermArg
  1812.         TermArgItem
  1813.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1814.     | PARSEOP_LGREATER '('
  1815.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1816.     ;
  1817.  
  1818. LGreaterEqualTerm
  1819.     : PARSEOP_LGREATEREQUAL '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
  1820.         TermArg
  1821.         TermArgItem
  1822.         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
  1823.     | PARSEOP_LGREATEREQUAL '('
  1824.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1825.     ;
  1826.  
  1827. LLessTerm
  1828.     : PARSEOP_LLESS '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
  1829.         TermArg
  1830.         TermArgItem
  1831.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1832.     | PARSEOP_LLESS '('
  1833.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1834.     ;
  1835.  
  1836. LLessEqualTerm
  1837.     : PARSEOP_LLESSEQUAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
  1838.         TermArg
  1839.         TermArgItem
  1840.         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
  1841.     | PARSEOP_LLESSEQUAL '('
  1842.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1843.     ;
  1844.  
  1845. LNotTerm
  1846.     : PARSEOP_LNOT '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
  1847.         TermArg
  1848.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1849.     | PARSEOP_LNOT '('
  1850.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1851.     ;
  1852.  
  1853. LNotEqualTerm
  1854.     : PARSEOP_LNOTEQUAL '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
  1855.         TermArg
  1856.         TermArgItem
  1857.         ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
  1858.     | PARSEOP_LNOTEQUAL '('
  1859.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1860.     ;
  1861.  
  1862. LoadTableTerm
  1863.     : PARSEOP_LOADTABLE '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
  1864.         TermArg
  1865.         TermArgItem
  1866.         TermArgItem
  1867.         OptionalListString
  1868.         OptionalListString
  1869.         OptionalReference
  1870.         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$5,$6,$7,$8,$9);}
  1871.     | PARSEOP_LOADTABLE '('
  1872.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1873.     ;
  1874.  
  1875. LOrTerm
  1876.     : PARSEOP_LOR '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
  1877.         TermArg
  1878.         TermArgItem
  1879.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1880.     | PARSEOP_LOR '('
  1881.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1882.     ;
  1883.  
  1884. MatchTerm
  1885.     : PARSEOP_MATCH '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
  1886.         TermArg
  1887.         ',' MatchOpKeyword
  1888.         TermArgItem
  1889.         ',' MatchOpKeyword
  1890.         TermArgItem
  1891.         TermArgItem
  1892.         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$7,$9,$10,$11);}
  1893.     | PARSEOP_MATCH '('
  1894.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1895.     ;
  1896.  
  1897. MidTerm
  1898.     : PARSEOP_MID '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
  1899.         TermArg
  1900.         TermArgItem
  1901.         TermArgItem
  1902.         Target
  1903.         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
  1904.     | PARSEOP_MID '('
  1905.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1906.     ;
  1907.  
  1908. ModTerm
  1909.     : PARSEOP_MOD '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
  1910.         TermArg
  1911.         TermArgItem
  1912.         Target
  1913.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1914.     | PARSEOP_MOD '('
  1915.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1916.     ;
  1917.  
  1918. MultiplyTerm
  1919.     : PARSEOP_MULTIPLY '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
  1920.         TermArg
  1921.         TermArgItem
  1922.         Target
  1923.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1924.     | PARSEOP_MULTIPLY '('
  1925.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1926.     ;
  1927.  
  1928. NAndTerm
  1929.     : PARSEOP_NAND '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
  1930.         TermArg
  1931.         TermArgItem
  1932.         Target
  1933.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1934.     | PARSEOP_NAND '('
  1935.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1936.     ;
  1937.  
  1938. NOrTerm
  1939.     : PARSEOP_NOR '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
  1940.         TermArg
  1941.         TermArgItem
  1942.         Target
  1943.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1944.     | PARSEOP_NOR '('
  1945.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1946.     ;
  1947.  
  1948. NotTerm
  1949.     : PARSEOP_NOT '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
  1950.         TermArg
  1951.         Target
  1952.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  1953.     | PARSEOP_NOT '('
  1954.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1955.     ;
  1956.  
  1957. ObjectTypeTerm
  1958.     : PARSEOP_OBJECTTYPE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
  1959.         SuperName
  1960.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  1961.     | PARSEOP_OBJECTTYPE '('
  1962.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1963.     ;
  1964.  
  1965. OrTerm
  1966.     : PARSEOP_OR '('                            {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
  1967.         TermArg
  1968.         TermArgItem
  1969.         Target
  1970.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1971.     | PARSEOP_OR '('
  1972.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1973.     ;
  1974.  
  1975. /*
  1976.  * In RefOf, the node isn't really a target, but we can't keep track of it after
  1977.  * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
  1978.  */
  1979. RefOfTerm
  1980.     : PARSEOP_REFOF '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
  1981.         SuperName
  1982.         ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_TARGET));}
  1983.     | PARSEOP_REFOF '('
  1984.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1985.     ;
  1986.  
  1987. ShiftLeftTerm
  1988.     : PARSEOP_SHIFTLEFT '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
  1989.         TermArg
  1990.         TermArgItem
  1991.         Target
  1992.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  1993.     | PARSEOP_SHIFTLEFT '('
  1994.         error ')'                   {$$ = AslDoError(); yyclearin;}
  1995.     ;
  1996.  
  1997. ShiftRightTerm
  1998.     : PARSEOP_SHIFTRIGHT '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
  1999.         TermArg
  2000.         TermArgItem
  2001.         Target
  2002.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  2003.     | PARSEOP_SHIFTRIGHT '('
  2004.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2005.     ;
  2006.  
  2007. SizeOfTerm
  2008.     : PARSEOP_SIZEOF '('                        {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
  2009.         SuperName
  2010.         ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
  2011.     | PARSEOP_SIZEOF '('
  2012.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2013.     ;
  2014.  
  2015. StoreTerm
  2016.     : PARSEOP_STORE '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
  2017.         TermArg
  2018.         ',' SuperName
  2019.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
  2020.     | PARSEOP_STORE '('
  2021.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2022.     ;
  2023.  
  2024. SubtractTerm
  2025.     : PARSEOP_SUBTRACT '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
  2026.         TermArg
  2027.         TermArgItem
  2028.         Target
  2029.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  2030.     | PARSEOP_SUBTRACT '('
  2031.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2032.     ;
  2033.  
  2034. TimerTerm
  2035.     : PARSEOP_TIMER '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
  2036.         ')'                         {$$ = TrLinkChildren ($<n>3,0);}
  2037.     | PARSEOP_TIMER                         {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
  2038.     | PARSEOP_TIMER '('
  2039.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2040.     ;
  2041.  
  2042. ToBCDTerm
  2043.     : PARSEOP_TOBCD '('                         {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
  2044.         TermArg
  2045.         Target
  2046.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  2047.     | PARSEOP_TOBCD '('
  2048.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2049.     ;
  2050.  
  2051. ToBufferTerm
  2052.     : PARSEOP_TOBUFFER '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
  2053.         TermArg
  2054.         Target
  2055.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  2056.     | PARSEOP_TOBUFFER '('
  2057.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2058.     ;
  2059.  
  2060. ToDecimalStringTerm
  2061.     : PARSEOP_TODECIMALSTRING '('       {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
  2062.         TermArg
  2063.         Target
  2064.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  2065.     | PARSEOP_TODECIMALSTRING '('
  2066.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2067.     ;
  2068.  
  2069. ToHexStringTerm
  2070.     : PARSEOP_TOHEXSTRING '('           {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
  2071.         TermArg
  2072.         Target
  2073.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  2074.     | PARSEOP_TOHEXSTRING '('
  2075.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2076.     ;
  2077.  
  2078. ToIntegerTerm
  2079.     : PARSEOP_TOINTEGER '('                     {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
  2080.         TermArg
  2081.         Target
  2082.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  2083.     | PARSEOP_TOINTEGER '('
  2084.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2085.     ;
  2086.  
  2087. ToStringTerm
  2088.     : PARSEOP_TOSTRING '('                      {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
  2089.         TermArg
  2090.         OptionalCount
  2091.         Target
  2092.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  2093.     | PARSEOP_TOSTRING '('
  2094.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2095.     ;
  2096.  
  2097. ToUUIDTerm
  2098.     : PARSEOP_TOUUID '('
  2099.         StringData ')'              {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
  2100.     | PARSEOP_TOUUID '('
  2101.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2102.     ;
  2103.  
  2104. WaitTerm
  2105.     : PARSEOP_WAIT '('                          {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
  2106.         SuperName
  2107.         TermArgItem
  2108.         ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
  2109.     | PARSEOP_WAIT '('
  2110.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2111.     ;
  2112.  
  2113. XOrTerm
  2114.     : PARSEOP_XOR '('                           {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
  2115.         TermArg
  2116.         TermArgItem
  2117.         Target
  2118.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
  2119.     | PARSEOP_XOR '('
  2120.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2121.     ;
  2122.  
  2123.  
  2124. /******* Keywords *************************************************************/
  2125.  
  2126.  
  2127. ObjectTypeKeyword
  2128.     : PARSEOP_OBJECTTYPE_UNK                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
  2129.     | PARSEOP_OBJECTTYPE_INT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_INT);}
  2130.     | PARSEOP_OBJECTTYPE_STR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_STR);}
  2131.     | PARSEOP_OBJECTTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BUF);}
  2132.     | PARSEOP_OBJECTTYPE_PKG                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PKG);}
  2133.     | PARSEOP_OBJECTTYPE_FLD                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_FLD);}
  2134.     | PARSEOP_OBJECTTYPE_DEV                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DEV);}
  2135.     | PARSEOP_OBJECTTYPE_EVT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_EVT);}
  2136.     | PARSEOP_OBJECTTYPE_MTH                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTH);}
  2137.     | PARSEOP_OBJECTTYPE_MTX                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTX);}
  2138.     | PARSEOP_OBJECTTYPE_OPR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_OPR);}
  2139.     | PARSEOP_OBJECTTYPE_POW                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_POW);}
  2140.     | PARSEOP_OBJECTTYPE_PRO                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PRO);}
  2141.     | PARSEOP_OBJECTTYPE_THZ                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_THZ);}
  2142.     | PARSEOP_OBJECTTYPE_BFF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BFF);}
  2143.     | PARSEOP_OBJECTTYPE_DDB                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DDB);}
  2144.     ;
  2145.  
  2146. AccessTypeKeyword
  2147.     : PARSEOP_ACCESSTYPE_ANY                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_ANY);}
  2148.     | PARSEOP_ACCESSTYPE_BYTE               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BYTE);}
  2149.     | PARSEOP_ACCESSTYPE_WORD               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_WORD);}
  2150.     | PARSEOP_ACCESSTYPE_DWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_DWORD);}
  2151.     | PARSEOP_ACCESSTYPE_QWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_QWORD);}
  2152.     | PARSEOP_ACCESSTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BUF);}
  2153.     ;
  2154.  
  2155. AccessAttribKeyword
  2156.     : PARSEOP_ACCESSATTRIB_QUICK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_QUICK );}
  2157.     | PARSEOP_ACCESSATTRIB_SND_RCV          {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_SND_RCV);}
  2158.     | PARSEOP_ACCESSATTRIB_BYTE             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BYTE);}
  2159.     | PARSEOP_ACCESSATTRIB_WORD             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD);}
  2160.     | PARSEOP_ACCESSATTRIB_BLOCK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK);}
  2161.     | PARSEOP_ACCESSATTRIB_WORD_CALL        {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD_CALL);}
  2162.     | PARSEOP_ACCESSATTRIB_BLOCK_CALL       {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK_CALL);}
  2163.     ;
  2164.  
  2165. LockRuleKeyword
  2166.     : PARSEOP_LOCKRULE_LOCK                 {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_LOCK);}
  2167.     | PARSEOP_LOCKRULE_NOLOCK               {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_NOLOCK);}
  2168.     ;
  2169.  
  2170. UpdateRuleKeyword
  2171.     : PARSEOP_UPDATERULE_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_PRESERVE);}
  2172.     | PARSEOP_UPDATERULE_ONES               {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ONES);}
  2173.     | PARSEOP_UPDATERULE_ZEROS              {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ZEROS);}
  2174.     ;
  2175.  
  2176.  
  2177. RegionSpaceKeyword
  2178.     : PARSEOP_REGIONSPACE_IO                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IO);}
  2179.     | PARSEOP_REGIONSPACE_MEM               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_MEM);}
  2180.     | PARSEOP_REGIONSPACE_PCI               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCI);}
  2181.     | PARSEOP_REGIONSPACE_EC                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_EC);}
  2182.     | PARSEOP_REGIONSPACE_SMBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_SMBUS);}
  2183.     | PARSEOP_REGIONSPACE_CMOS              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_CMOS);}
  2184.     | PARSEOP_REGIONSPACE_PCIBAR            {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCIBAR);}
  2185.     | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
  2186.     ;
  2187.  
  2188. AddressSpaceKeyword
  2189.     : ByteConst                                                         {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
  2190.     | RegionSpaceKeyword                                        {}
  2191.     | PARSEOP_ADDRESSSPACE_FFIXEDHW         {$$ = TrCreateLeafNode (PARSEOP_ADDRESSSPACE_FFIXEDHW);}
  2192.     ;
  2193.  
  2194.  
  2195. SerializeRuleKeyword
  2196.     : PARSEOP_SERIALIZERULE_SERIAL          {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_SERIAL);}
  2197.     | PARSEOP_SERIALIZERULE_NOTSERIAL       {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL);}
  2198.     ;
  2199.  
  2200. MatchOpKeyword
  2201.     : PARSEOP_MATCHTYPE_MTR                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MTR);}
  2202.     | PARSEOP_MATCHTYPE_MEQ                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MEQ);}
  2203.     | PARSEOP_MATCHTYPE_MLE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLE);}
  2204.     | PARSEOP_MATCHTYPE_MLT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLT);}
  2205.     | PARSEOP_MATCHTYPE_MGE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGE);}
  2206.     | PARSEOP_MATCHTYPE_MGT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGT);}
  2207.     ;
  2208.  
  2209. DMATypeKeyword
  2210.     : PARSEOP_DMATYPE_A                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_A);}
  2211.     | PARSEOP_DMATYPE_COMPATIBILITY         {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_COMPATIBILITY);}
  2212.     | PARSEOP_DMATYPE_B                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_B);}
  2213.     | PARSEOP_DMATYPE_F                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_F);}
  2214.     ;
  2215.  
  2216. XferTypeKeyword
  2217.     : PARSEOP_XFERTYPE_8                    {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8);}
  2218.     | PARSEOP_XFERTYPE_8_16                 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8_16);}
  2219.     | PARSEOP_XFERTYPE_16                   {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_16);}
  2220.     ;
  2221.  
  2222. ResourceTypeKeyword
  2223.     : PARSEOP_RESOURCETYPE_CONSUMER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
  2224.     | PARSEOP_RESOURCETYPE_PRODUCER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_PRODUCER);}
  2225.     ;
  2226.  
  2227. MinKeyword
  2228.     : PARSEOP_MINTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_FIXED);}
  2229.     | PARSEOP_MINTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_NOTFIXED);}
  2230.     ;
  2231.  
  2232. MaxKeyword
  2233.     : PARSEOP_MAXTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_FIXED);}
  2234.     | PARSEOP_MAXTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_NOTFIXED);}
  2235.     ;
  2236.  
  2237. DecodeKeyword
  2238.     : PARSEOP_DECODETYPE_POS                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_POS);}
  2239.     | PARSEOP_DECODETYPE_SUB                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_SUB);}
  2240.     ;
  2241.  
  2242. RangeTypeKeyword
  2243.     : PARSEOP_RANGETYPE_ISAONLY             {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ISAONLY);}
  2244.     | PARSEOP_RANGETYPE_NONISAONLY          {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_NONISAONLY);}
  2245.     | PARSEOP_RANGETYPE_ENTIRE              {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ENTIRE);}
  2246.     ;
  2247.  
  2248. MemTypeKeyword
  2249.     : PARSEOP_MEMTYPE_CACHEABLE             {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_CACHEABLE);}
  2250.     | PARSEOP_MEMTYPE_WRITECOMBINING        {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_WRITECOMBINING);}
  2251.     | PARSEOP_MEMTYPE_PREFETCHABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_PREFETCHABLE);}
  2252.     | PARSEOP_MEMTYPE_NONCACHEABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_NONCACHEABLE);}
  2253.     ;
  2254.  
  2255. OptionalReadWriteKeyword
  2256.     :                                       {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
  2257.     | PARSEOP_READWRITETYPE_BOTH            {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
  2258.     | PARSEOP_READWRITETYPE_READONLY        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
  2259.     ;
  2260.  
  2261. InterruptTypeKeyword
  2262.     : PARSEOP_INTTYPE_EDGE                  {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_EDGE);}
  2263.     | PARSEOP_INTTYPE_LEVEL                 {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_LEVEL);}
  2264.     ;
  2265.  
  2266. InterruptLevel
  2267.     : PARSEOP_INTLEVEL_ACTIVEHIGH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEHIGH);}
  2268.     | PARSEOP_INTLEVEL_ACTIVELOW            {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVELOW);}
  2269.     ;
  2270.  
  2271. ShareTypeKeyword
  2272.     : PARSEOP_SHARETYPE_SHARED              {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHARED);}
  2273.     | PARSEOP_SHARETYPE_EXCLUSIVE           {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVE);}
  2274.     ;
  2275.  
  2276. IODecodeKeyword
  2277.     : PARSEOP_IODECODETYPE_16               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_16);}
  2278.     | PARSEOP_IODECODETYPE_10               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_10);}
  2279.     ;
  2280.  
  2281. TypeKeyword
  2282.     : PARSEOP_TYPE_TRANSLATION              {$$ = TrCreateLeafNode (PARSEOP_TYPE_TRANSLATION);}
  2283.     | PARSEOP_TYPE_STATIC                   {$$ = TrCreateLeafNode (PARSEOP_TYPE_STATIC);}
  2284.     ;
  2285.  
  2286. TranslationKeyword
  2287.     : PARSEOP_TRANSLATIONTYPE_SPARSE        {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_SPARSE);}
  2288.     | PARSEOP_TRANSLATIONTYPE_DENSE         {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_DENSE);}
  2289.     ;
  2290.  
  2291. AddressKeyword
  2292.     : PARSEOP_ADDRESSTYPE_MEMORY            {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_MEMORY);}
  2293.     | PARSEOP_ADDRESSTYPE_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_RESERVED);}
  2294.     | PARSEOP_ADDRESSTYPE_NVS               {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_NVS);}
  2295.     | PARSEOP_ADDRESSTYPE_ACPI              {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_ACPI);}
  2296.     ;
  2297.  
  2298.  
  2299. /******* Miscellaneous Types **************************************************/
  2300.  
  2301.  
  2302. SuperName
  2303.     : NameString                    {}
  2304.     | ArgTerm                       {}
  2305.     | LocalTerm                     {}
  2306.     | DebugTerm                     {}
  2307.     | Type6Opcode                   {}
  2308. /*    | UserTerm                      {} */  /* Caused reduce/reduce with Type6Opcode->UserTerm */
  2309.     ;
  2310.  
  2311. ArgTerm
  2312.     : PARSEOP_ARG0                  {$$ = TrCreateLeafNode (PARSEOP_ARG0);}
  2313.     | PARSEOP_ARG1                  {$$ = TrCreateLeafNode (PARSEOP_ARG1);}
  2314.     | PARSEOP_ARG2                  {$$ = TrCreateLeafNode (PARSEOP_ARG2);}
  2315.     | PARSEOP_ARG3                  {$$ = TrCreateLeafNode (PARSEOP_ARG3);}
  2316.     | PARSEOP_ARG4                  {$$ = TrCreateLeafNode (PARSEOP_ARG4);}
  2317.     | PARSEOP_ARG5                  {$$ = TrCreateLeafNode (PARSEOP_ARG5);}
  2318.     | PARSEOP_ARG6                  {$$ = TrCreateLeafNode (PARSEOP_ARG6);}
  2319.     ;
  2320.  
  2321. LocalTerm
  2322.     : PARSEOP_LOCAL0                {$$ = TrCreateLeafNode (PARSEOP_LOCAL0);}
  2323.     | PARSEOP_LOCAL1                {$$ = TrCreateLeafNode (PARSEOP_LOCAL1);}
  2324.     | PARSEOP_LOCAL2                {$$ = TrCreateLeafNode (PARSEOP_LOCAL2);}
  2325.     | PARSEOP_LOCAL3                {$$ = TrCreateLeafNode (PARSEOP_LOCAL3);}
  2326.     | PARSEOP_LOCAL4                {$$ = TrCreateLeafNode (PARSEOP_LOCAL4);}
  2327.     | PARSEOP_LOCAL5                {$$ = TrCreateLeafNode (PARSEOP_LOCAL5);}
  2328.     | PARSEOP_LOCAL6                {$$ = TrCreateLeafNode (PARSEOP_LOCAL6);}
  2329.     | PARSEOP_LOCAL7                {$$ = TrCreateLeafNode (PARSEOP_LOCAL7);}
  2330.     ;
  2331.  
  2332. DebugTerm
  2333.     : PARSEOP_DEBUG                 {$$ = TrCreateLeafNode (PARSEOP_DEBUG);}
  2334.     ;
  2335.  
  2336.  
  2337. ByteConst
  2338.     : Integer                       {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
  2339.     ;
  2340.  
  2341. WordConst
  2342.     : Integer                       {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
  2343.     ;
  2344.  
  2345. DWordConst
  2346.     : Integer                       {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
  2347.     ;
  2348.  
  2349. QWordConst
  2350.     : Integer                       {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
  2351.     ;
  2352.  
  2353. Integer
  2354.     : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, AslCompilerlval.i);}
  2355.     ;
  2356.  
  2357. String
  2358.     : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, (ACPI_NATIVE_INT) AslCompilerlval.s);}
  2359.     ;
  2360.  
  2361. ConstTerm
  2362.     : ConstExprTerm                 {}
  2363.     | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
  2364.     ;
  2365.  
  2366. ByteConstExpr
  2367.     : Type3Opcode                   {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
  2368.     | Type2IntegerOpcode            {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
  2369.     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
  2370.     | ByteConst                     {}
  2371.     ;
  2372.  
  2373. WordConstExpr
  2374.     : Type3Opcode                   {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
  2375.     | Type2IntegerOpcode            {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
  2376.     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
  2377.     | WordConst                     {}
  2378.     ;
  2379.  
  2380. DWordConstExpr
  2381.     : Type3Opcode                   {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
  2382.     | Type2IntegerOpcode            {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
  2383.     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
  2384.     | DWordConst                    {}
  2385.     ;
  2386.  
  2387. QWordConstExpr
  2388.     : Type3Opcode                   {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
  2389.     | Type2IntegerOpcode            {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
  2390.     | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
  2391.     | QWordConst                    {}
  2392.     ;
  2393.  
  2394. ConstExprTerm
  2395.     : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
  2396.     | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
  2397.     | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
  2398.     | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
  2399.     | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
  2400.     | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
  2401.     ;
  2402.  
  2403. /* OptionalCount must appear before ByteList or an incorrect reduction will result */
  2404.  
  2405. OptionalCount
  2406.     :                               {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
  2407.     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
  2408.     | ',' TermArg                   {$$ = $2;}
  2409.     ;
  2410.  
  2411.  
  2412. BufferTerm
  2413.     : PARSEOP_BUFFER '('            {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
  2414.         OptionalTermArg
  2415.         ')' '{'
  2416.             BufferTermData '}'      {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
  2417.     | PARSEOP_BUFFER '('
  2418.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2419.     ;
  2420.  
  2421. BufferTermData
  2422.     : ByteList                      {}
  2423.     | StringData                    {}
  2424.     ;
  2425.  
  2426. ByteList
  2427.     :                               {$$ = NULL;}
  2428.     | ByteConstExpr
  2429.     | ByteList ','                  /* Allows a trailing comma at list end */
  2430.     | ByteList ','
  2431.         ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
  2432.     ;
  2433.  
  2434. DWordList
  2435.     :                               {$$ = NULL;}
  2436.     | DWordConstExpr
  2437.     | DWordList ','                 /* Allows a trailing comma at list end */
  2438.     | DWordList ','
  2439.         DWordConstExpr              {$$ = TrLinkPeerNode ($1,$3);}
  2440.     ;
  2441.  
  2442. PackageTerm
  2443.     : PARSEOP_PACKAGE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
  2444.         VarPackageLengthTerm
  2445.         ')' '{'
  2446.             PackageList '}'         {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
  2447.     | PARSEOP_PACKAGE '('
  2448.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2449.     ;
  2450.  
  2451. VarPackageLengthTerm
  2452.     :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
  2453.     | TermArg                       {$$ = $1;}
  2454.     ;
  2455.  
  2456. PackageList
  2457.     :                               {$$ = NULL;}
  2458.     | PackageElement
  2459.     | PackageList ','               /* Allows a trailing comma at list end */
  2460.     | PackageList ','
  2461.         PackageElement              {$$ = TrLinkPeerNode ($1,$3);}
  2462.     ;
  2463.  
  2464. PackageElement
  2465.     : DataObject                    {}
  2466.     | NameString                    {}
  2467.     ;
  2468.  
  2469. EISAIDTerm
  2470.     : PARSEOP_EISAID '('
  2471.         StringData ')'              {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
  2472.     | PARSEOP_EISAID '('
  2473.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2474.     ;
  2475.  
  2476.  
  2477. /******* Resources and Memory ***********************************************/
  2478.  
  2479.  
  2480. /*
  2481.  * Note: Create two default nodes to allow conversion to a Buffer AML opcode
  2482.  * Also, insert the EndTag at the end of the template.
  2483.  */
  2484. ResourceTemplateTerm
  2485.     : PARSEOP_RESOURCETEMPLATE '(' ')'
  2486.         '{'
  2487.         ResourceMacroList '}'       {$$ = TrCreateNode (PARSEOP_RESOURCETEMPLATE,4,
  2488.                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
  2489.                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
  2490.                                           $5,
  2491.                                           TrCreateLeafNode (PARSEOP_ENDTAG));}
  2492.     ;
  2493.  
  2494. UnicodeTerm
  2495.     : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
  2496.         StringData
  2497.         ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
  2498.     | PARSEOP_UNICODE '('
  2499.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2500.     ;
  2501.  
  2502. ResourceMacroList
  2503.     :                               {$$ = NULL;}
  2504.     | ResourceMacroList
  2505.         ResourceMacroTerm           {$$ = TrLinkPeerNode ($1,$2);}
  2506.     ;
  2507.  
  2508. ResourceMacroTerm
  2509.     : DMATerm                       {}
  2510.     | DWordIOTerm                   {}
  2511.     | DWordMemoryTerm               {}
  2512.     | DWordSpaceTerm                {}
  2513.     | EndDependentFnTerm            {}
  2514.     | ExtendedIOTerm                {}
  2515.     | ExtendedMemoryTerm            {}
  2516.     | ExtendedSpaceTerm             {}
  2517.     | FixedIOTerm                   {}
  2518.     | InterruptTerm                 {}
  2519.     | IOTerm                        {}
  2520.     | IRQNoFlagsTerm                {}
  2521.     | IRQTerm                       {}
  2522.     | Memory24Term                  {}
  2523.     | Memory32FixedTerm             {}
  2524.     | Memory32Term                  {}
  2525.     | QWordIOTerm                   {}
  2526.     | QWordMemoryTerm               {}
  2527.     | QWordSpaceTerm                {}
  2528.     | RegisterTerm                  {}
  2529.     | StartDependentFnTerm          {}
  2530.     | StartDependentFnNoPriTerm     {}
  2531.     | VendorLongTerm                {}
  2532.     | VendorShortTerm               {}
  2533.     | WordBusNumberTerm             {}
  2534.     | WordIOTerm                    {}
  2535.     | WordSpaceTerm                 {}
  2536.     ;
  2537.  
  2538. DMATerm
  2539.     : PARSEOP_DMA '('               {$<n>$ = TrCreateLeafNode (PARSEOP_DMA);}
  2540.         DMATypeKeyword
  2541.         OptionalBusMasterKeyword
  2542.         ',' XferTypeKeyword
  2543.         OptionalNameString_Last
  2544.         ')' '{'
  2545.             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
  2546.     | PARSEOP_DMA '('
  2547.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2548.     ;
  2549.  
  2550. DWordIOTerm
  2551.     : PARSEOP_DWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDIO);}
  2552.         OptionalResourceType_First
  2553.         OptionalMinType
  2554.         OptionalMaxType
  2555.         OptionalDecodeType
  2556.         OptionalRangeType
  2557.         ',' DWordConstExpr
  2558.         ',' DWordConstExpr
  2559.         ',' DWordConstExpr
  2560.         ',' DWordConstExpr
  2561.         ',' DWordConstExpr
  2562.         OptionalByteConstExpr
  2563.         OptionalStringData
  2564.         OptionalNameString
  2565.         OptionalType
  2566.         OptionalTranslationType_Last
  2567.         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
  2568.     | PARSEOP_DWORDIO '('
  2569.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2570.     ;
  2571.  
  2572. DWordMemoryTerm
  2573.     : PARSEOP_DWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDMEMORY);}
  2574.         OptionalResourceType_First
  2575.         OptionalDecodeType
  2576.         OptionalMinType
  2577.         OptionalMaxType
  2578.         OptionalMemType
  2579.         ',' OptionalReadWriteKeyword
  2580.         ',' DWordConstExpr
  2581.         ',' DWordConstExpr
  2582.         ',' DWordConstExpr
  2583.         ',' DWordConstExpr
  2584.         ',' DWordConstExpr
  2585.         OptionalByteConstExpr
  2586.         OptionalStringData
  2587.         OptionalNameString
  2588.         OptionalAddressRange
  2589.         OptionalType_Last
  2590.         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
  2591.     | PARSEOP_DWORDMEMORY '('
  2592.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2593.     ;
  2594.  
  2595. DWordSpaceTerm
  2596.     : PARSEOP_DWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
  2597.         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
  2598.         OptionalResourceType
  2599.         OptionalDecodeType
  2600.         OptionalMinType
  2601.         OptionalMaxType
  2602.         ',' ByteConstExpr
  2603.         ',' DWordConstExpr
  2604.         ',' DWordConstExpr
  2605.         ',' DWordConstExpr
  2606.         ',' DWordConstExpr
  2607.         ',' DWordConstExpr
  2608.         OptionalByteConstExpr
  2609.         OptionalStringData
  2610.         OptionalNameString_Last
  2611.         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
  2612.     | PARSEOP_DWORDSPACE '('
  2613.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2614.     ;
  2615.  
  2616.  
  2617. EndDependentFnTerm
  2618.     : PARSEOP_ENDDEPENDENTFN '('
  2619.         ')'                         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
  2620.     | PARSEOP_ENDDEPENDENTFN '('
  2621.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2622.     ;
  2623.  
  2624. ExtendedIOTerm
  2625.     : PARSEOP_EXTENDEDIO '('        {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
  2626.         OptionalResourceType_First
  2627.         OptionalMinType
  2628.         OptionalMaxType
  2629.         OptionalDecodeType
  2630.         OptionalRangeType
  2631.         ',' QWordConstExpr
  2632.         ',' QWordConstExpr
  2633.         ',' QWordConstExpr
  2634.         ',' QWordConstExpr
  2635.         ',' QWordConstExpr
  2636.         OptionalQWordConstExpr
  2637.         OptionalNameString
  2638.         OptionalType
  2639.         OptionalTranslationType_Last
  2640.         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
  2641.     | PARSEOP_EXTENDEDIO '('
  2642.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2643.     ;
  2644.  
  2645. ExtendedMemoryTerm
  2646.     : PARSEOP_EXTENDEDMEMORY '('    {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
  2647.         OptionalResourceType_First
  2648.         OptionalDecodeType
  2649.         OptionalMinType
  2650.         OptionalMaxType
  2651.         OptionalMemType
  2652.         ',' OptionalReadWriteKeyword
  2653.         ',' QWordConstExpr
  2654.         ',' QWordConstExpr
  2655.         ',' QWordConstExpr
  2656.         ',' QWordConstExpr
  2657.         ',' QWordConstExpr
  2658.         OptionalQWordConstExpr
  2659.         OptionalNameString
  2660.         OptionalAddressRange
  2661.         OptionalType_Last
  2662.         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
  2663.     | PARSEOP_EXTENDEDMEMORY '('
  2664.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2665.     ;
  2666.  
  2667. ExtendedSpaceTerm
  2668.     : PARSEOP_EXTENDEDSPACE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
  2669.         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
  2670.         OptionalResourceType
  2671.         OptionalDecodeType
  2672.         OptionalMinType
  2673.         OptionalMaxType
  2674.         ',' ByteConstExpr
  2675.         ',' QWordConstExpr
  2676.         ',' QWordConstExpr
  2677.         ',' QWordConstExpr
  2678.         ',' QWordConstExpr
  2679.         ',' QWordConstExpr
  2680.         OptionalQWordConstExpr
  2681.         OptionalNameString_Last
  2682.         ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
  2683.     | PARSEOP_EXTENDEDSPACE '('
  2684.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2685.     ;
  2686.  
  2687. FixedIOTerm
  2688.     : PARSEOP_FIXEDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
  2689.         WordConstExpr
  2690.         ',' ByteConstExpr
  2691.         OptionalNameString_Last
  2692.         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
  2693.     | PARSEOP_FIXEDIO '('
  2694.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2695.     ;
  2696.  
  2697. InterruptTerm
  2698.     : PARSEOP_INTERRUPT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
  2699.         OptionalResourceType_First
  2700.         ',' InterruptTypeKeyword
  2701.         ',' InterruptLevel
  2702.         OptionalShareType
  2703.         OptionalByteConstExpr
  2704.         OptionalStringData
  2705.         OptionalNameString_Last
  2706.         ')' '{'
  2707.             DWordList '}'           {$$ = TrLinkChildren ($<n>3,8,$4,$6,$8,$9,$10,$11,$12,$15);}
  2708.     | PARSEOP_INTERRUPT '('
  2709.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2710.     ;
  2711.  
  2712. IOTerm
  2713.     : PARSEOP_IO '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IO);}
  2714.         IODecodeKeyword
  2715.         ',' WordConstExpr
  2716.         ',' WordConstExpr
  2717.         ',' ByteConstExpr
  2718.         ',' ByteConstExpr
  2719.         OptionalNameString_Last
  2720.         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
  2721.     | PARSEOP_IO '('
  2722.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2723.     ;
  2724.  
  2725. IRQNoFlagsTerm
  2726.     : PARSEOP_IRQNOFLAGS '('        {$<n>$ = TrCreateLeafNode (PARSEOP_IRQNOFLAGS);}
  2727.         OptionalNameString_First
  2728.         ')' '{'
  2729.             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
  2730.     | PARSEOP_IRQNOFLAGS '('
  2731.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2732.     ;
  2733.  
  2734. IRQTerm
  2735.     : PARSEOP_IRQ '('               {$<n>$ = TrCreateLeafNode (PARSEOP_IRQ);}
  2736.         InterruptTypeKeyword
  2737.         ',' InterruptLevel
  2738.         OptionalShareType
  2739.         OptionalNameString_Last
  2740.         ')' '{'
  2741.             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$6,$7,$8,$11);}
  2742.     | PARSEOP_IRQ '('
  2743.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2744.     ;
  2745.  
  2746. Memory24Term
  2747.     : PARSEOP_MEMORY24 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
  2748.         OptionalReadWriteKeyword
  2749.         ',' WordConstExpr
  2750.         ',' WordConstExpr
  2751.         ',' WordConstExpr
  2752.         ',' WordConstExpr
  2753.         OptionalNameString_Last
  2754.         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
  2755.     | PARSEOP_MEMORY24 '('
  2756.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2757.     ;
  2758.  
  2759. Memory32FixedTerm
  2760.     : PARSEOP_MEMORY32FIXED '('     {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
  2761.         OptionalReadWriteKeyword
  2762.         ',' DWordConstExpr
  2763.         ',' DWordConstExpr
  2764.         OptionalNameString_Last
  2765.         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$9);}
  2766.     | PARSEOP_MEMORY32FIXED '('
  2767.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2768.     ;
  2769.  
  2770. Memory32Term
  2771.     : PARSEOP_MEMORY32 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
  2772.         OptionalReadWriteKeyword
  2773.         ',' DWordConstExpr
  2774.         ',' DWordConstExpr
  2775.         ',' DWordConstExpr
  2776.         ',' DWordConstExpr
  2777.         OptionalNameString_Last
  2778.         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
  2779.     | PARSEOP_MEMORY32 '('
  2780.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2781.     ;
  2782.  
  2783. QWordIOTerm
  2784.     : PARSEOP_QWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
  2785.         OptionalResourceType_First
  2786.         OptionalMinType
  2787.         OptionalMaxType
  2788.         OptionalDecodeType
  2789.         OptionalRangeType
  2790.         ',' QWordConstExpr
  2791.         ',' QWordConstExpr
  2792.         ',' QWordConstExpr
  2793.         ',' QWordConstExpr
  2794.         ',' QWordConstExpr
  2795.         OptionalByteConstExpr
  2796.         OptionalStringData
  2797.         OptionalNameString
  2798.         OptionalType
  2799.         OptionalTranslationType_Last
  2800.         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
  2801.     | PARSEOP_QWORDIO '('
  2802.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2803.     ;
  2804.  
  2805. QWordMemoryTerm
  2806.     : PARSEOP_QWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDMEMORY);}
  2807.         OptionalResourceType_First
  2808.         OptionalDecodeType
  2809.         OptionalMinType
  2810.         OptionalMaxType
  2811.         OptionalMemType
  2812.         ',' OptionalReadWriteKeyword
  2813.         ',' QWordConstExpr
  2814.         ',' QWordConstExpr
  2815.         ',' QWordConstExpr
  2816.         ',' QWordConstExpr
  2817.         ',' QWordConstExpr
  2818.         OptionalByteConstExpr
  2819.         OptionalStringData
  2820.         OptionalNameString
  2821.         OptionalAddressRange
  2822.         OptionalType_Last
  2823.         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
  2824.     | PARSEOP_QWORDMEMORY '('
  2825.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2826.     ;
  2827.  
  2828. QWordSpaceTerm
  2829.     : PARSEOP_QWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
  2830.         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
  2831.         OptionalResourceType
  2832.         OptionalDecodeType
  2833.         OptionalMinType
  2834.         OptionalMaxType
  2835.         ',' ByteConstExpr
  2836.         ',' QWordConstExpr
  2837.         ',' QWordConstExpr
  2838.         ',' QWordConstExpr
  2839.         ',' QWordConstExpr
  2840.         ',' QWordConstExpr
  2841.         OptionalByteConstExpr
  2842.         OptionalStringData
  2843.         OptionalNameString_Last
  2844.         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
  2845.     | PARSEOP_QWORDSPACE '('
  2846.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2847.     ;
  2848.  
  2849. RegisterTerm
  2850.     : PARSEOP_REGISTER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_REGISTER);}
  2851.         AddressSpaceKeyword
  2852.         ',' ByteConstExpr
  2853.         ',' ByteConstExpr
  2854.         ',' QWordConstExpr
  2855.         OptionalAccessSize
  2856.         OptionalNameString_Last
  2857.         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$11,$12);}
  2858.     | PARSEOP_REGISTER '('
  2859.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2860.     ;
  2861.  
  2862. StartDependentFnTerm
  2863.     : PARSEOP_STARTDEPENDENTFN '('  {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
  2864.         ByteConstExpr
  2865.         ',' ByteConstExpr
  2866.         ')' '{'
  2867.         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,3,$4,$6,$9);}
  2868.     | PARSEOP_STARTDEPENDENTFN '('
  2869.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2870.     ;
  2871.  
  2872. StartDependentFnNoPriTerm
  2873.     : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
  2874.         ')' '{'
  2875.         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
  2876.     | PARSEOP_STARTDEPENDENTFN_NOPRI '('
  2877.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2878.     ;
  2879.  
  2880. VendorLongTerm
  2881.     : PARSEOP_VENDORLONG '('        {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
  2882.         OptionalNameString_First
  2883.         ')' '{'
  2884.             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
  2885.     | PARSEOP_VENDORLONG '('
  2886.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2887.     ;
  2888.  
  2889. VendorShortTerm
  2890.     : PARSEOP_VENDORSHORT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORSHORT);}
  2891.         OptionalNameString_First
  2892.         ')' '{'
  2893.             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
  2894.     | PARSEOP_VENDORSHORT '('
  2895.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2896.     ;
  2897.  
  2898. WordBusNumberTerm
  2899.     : PARSEOP_WORDBUSNUMBER '('     {$<n>$ = TrCreateLeafNode (PARSEOP_WORDBUSNUMBER);}
  2900.         OptionalResourceType_First
  2901.         OptionalMinType
  2902.         OptionalMaxType
  2903.         OptionalDecodeType
  2904.         ',' WordConstExpr
  2905.         ',' WordConstExpr
  2906.         ',' WordConstExpr
  2907.         ',' WordConstExpr
  2908.         ',' WordConstExpr
  2909.         OptionalByteConstExpr
  2910.         OptionalStringData
  2911.         OptionalNameString_Last
  2912.         ')'                         {$$ = TrLinkChildren ($<n>3,12,$4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);}
  2913.     | PARSEOP_WORDBUSNUMBER '('
  2914.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2915.     ;
  2916.  
  2917. WordIOTerm
  2918.     : PARSEOP_WORDIO '('            {$<n>$ = TrCreateLeafNode (PARSEOP_WORDIO);}
  2919.         OptionalResourceType_First
  2920.         OptionalMinType
  2921.         OptionalMaxType
  2922.         OptionalDecodeType
  2923.         OptionalRangeType
  2924.         ',' WordConstExpr
  2925.         ',' WordConstExpr
  2926.         ',' WordConstExpr
  2927.         ',' WordConstExpr
  2928.         ',' WordConstExpr
  2929.         OptionalByteConstExpr
  2930.         OptionalStringData
  2931.         OptionalNameString
  2932.         OptionalType
  2933.         OptionalTranslationType_Last
  2934.         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
  2935.     | PARSEOP_WORDIO '('
  2936.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2937.     ;
  2938.  
  2939. WordSpaceTerm
  2940.     : PARSEOP_WORDSPACE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
  2941.         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
  2942.         OptionalResourceType
  2943.         OptionalDecodeType
  2944.         OptionalMinType
  2945.         OptionalMaxType
  2946.         ',' ByteConstExpr
  2947.         ',' WordConstExpr
  2948.         ',' WordConstExpr
  2949.         ',' WordConstExpr
  2950.         ',' WordConstExpr
  2951.         ',' WordConstExpr
  2952.         OptionalByteConstExpr
  2953.         OptionalStringData
  2954.         OptionalNameString_Last
  2955.         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
  2956.     | PARSEOP_WORDSPACE '('
  2957.         error ')'                   {$$ = AslDoError(); yyclearin;}
  2958.     ;
  2959.  
  2960.  
  2961. /******* Object References ***********************************************/
  2962.  
  2963. /* Allow IO, DMA, IRQ Resource macro names to also be used as identifiers */
  2964.  
  2965. NameString
  2966.     : NameSeg                       {}
  2967.     | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) AslCompilerlval.s);}
  2968.     | PARSEOP_IO                    {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
  2969.     | PARSEOP_DMA                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
  2970.     | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
  2971.     ;
  2972.  
  2973. NameSeg
  2974.     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) AslCompilerlval.s);}
  2975.     ;
  2976.  
  2977.  
  2978. /******* Helper rules ****************************************************/
  2979.  
  2980.  
  2981. AmlPackageLengthTerm
  2982.     : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
  2983.     ;
  2984.  
  2985. OptionalBusMasterKeyword
  2986.     : ','                                       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
  2987.     | ',' PARSEOP_BUSMASTERTYPE_MASTER          {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
  2988.     | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
  2989.     ;
  2990.  
  2991. OptionalAccessAttribTerm
  2992.     :                               {$$ = NULL;}
  2993.     | ','                           {$$ = NULL;}
  2994.     | ',' ByteConstExpr             {$$ = $2;}
  2995.     | ',' AccessAttribKeyword       {$$ = $2;}
  2996.     ;
  2997.  
  2998. OptionalAccessSize
  2999.     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
  3000.     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
  3001.     | ',' ByteConstExpr             {$$ = $2;}
  3002.     ;
  3003.  
  3004. OptionalAddressRange
  3005.     :                               {$$ = NULL;}
  3006.     | ','                           {$$ = NULL;}
  3007.     | ',' AddressKeyword            {$$ = $2;}
  3008.     ;
  3009.  
  3010. OptionalByteConstExpr
  3011.     :                               {$$ = NULL;}
  3012.     | ','                           {$$ = NULL;}
  3013.     | ',' ByteConstExpr             {$$ = $2;}
  3014.     ;
  3015.  
  3016. OptionalDecodeType
  3017.     : ','                           {$$ = NULL;}
  3018.     | ',' DecodeKeyword             {$$ = $2;}
  3019.     ;
  3020.  
  3021. OptionalDWordConstExpr
  3022.     :                               {$$ = NULL;}
  3023.     | ','                           {$$ = NULL;}
  3024.     | ',' DWordConstExpr            {$$ = $2;}
  3025.     ;
  3026.  
  3027. OptionalListString
  3028.     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
  3029.     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
  3030.     | ',' TermArg                   {$$ = $2;}
  3031.     ;
  3032.  
  3033. OptionalMaxType
  3034.     : ','                           {$$ = NULL;}
  3035.     | ',' MaxKeyword                {$$ = $2;}
  3036.     ;
  3037.  
  3038. OptionalMemType
  3039.     : ','                           {$$ = NULL;}
  3040.     | ',' MemTypeKeyword            {$$ = $2;}
  3041.     ;
  3042.  
  3043. OptionalMinType
  3044.     : ','                           {$$ = NULL;}
  3045.     | ',' MinKeyword                {$$ = $2;}
  3046.     ;
  3047.  
  3048. OptionalNameString
  3049.     :                               {$$ = NULL;}
  3050.     | ','                           {$$ = NULL;}
  3051.     | ',' NameString                {$$ = $2;}
  3052.     ;
  3053.  
  3054. OptionalNameString_Last
  3055.     :                               {$$ = NULL;}
  3056.     | ','                           {$$ = NULL;}
  3057.     | ',' NameString                {$$ = $2;}
  3058.     ;
  3059.  
  3060. OptionalNameString_First
  3061.     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}
  3062.     | NameString                    {$$ = $1;}
  3063.     ;
  3064.  
  3065. OptionalObjectTypeKeyword
  3066.     :                               {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
  3067.     | ',' ObjectTypeKeyword         {$$ = $2;}
  3068.     ;
  3069.  
  3070. OptionalQWordConstExpr
  3071.     :                               {$$ = NULL;}
  3072.     | ','                           {$$ = NULL;}
  3073.     | ',' QWordConstExpr            {$$ = $2;}
  3074.     ;
  3075.  
  3076. OptionalRangeType
  3077.     : ','                           {$$ = NULL;}
  3078.     | ',' RangeTypeKeyword          {$$ = $2;}
  3079.     ;
  3080.  
  3081. OptionalReference
  3082.     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
  3083.     | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
  3084.     | ',' TermArg                   {$$ = $2;}
  3085.     ;
  3086.  
  3087. OptionalResourceType_First
  3088.     :                               {$$ = NULL;}
  3089.     | ResourceTypeKeyword           {$$ = $1;}
  3090.     ;
  3091.  
  3092. OptionalResourceType
  3093.     : ','                           {$$ = NULL;}
  3094.     | ',' ResourceTypeKeyword       {$$ = $2;}
  3095.     ;
  3096.  
  3097. OptionalSerializeRuleKeyword
  3098.     :                               {$$ = NULL;}
  3099.     | ','                           {$$ = NULL;}
  3100.     | ',' SerializeRuleKeyword      {$$ = $2;}
  3101.     ;
  3102.  
  3103. OptionalShareType
  3104.     :                               {$$ = NULL;}
  3105.     | ','                           {$$ = NULL;}
  3106.     | ',' ShareTypeKeyword          {$$ = $2;}
  3107.     ;
  3108.  
  3109. OptionalStringData
  3110.     :                               {$$ = NULL;}
  3111.     | ','                           {$$ = NULL;}
  3112.     | ',' StringData                {$$ = $2;}
  3113.     ;
  3114.  
  3115. OptionalTermArg
  3116.     :                               {$$ = NULL;}
  3117.     | TermArg                       {$$ = $1;}
  3118.     ;
  3119.  
  3120. OptionalReturnArg
  3121.     :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
  3122.     | TermArg                       {$$ = $1;}
  3123.     ;
  3124.  
  3125. OptionalType
  3126.     :                               {$$ = NULL;}
  3127.     | ','                           {$$ = NULL;}
  3128.     | ',' TypeKeyword               {$$ = $2;}
  3129.     ;
  3130.  
  3131. OptionalType_Last
  3132.     :                               {$$ = NULL;}
  3133.     | ','                           {$$ = NULL;}
  3134.     | ',' TypeKeyword               {$$ = $2;}
  3135.     ;
  3136.  
  3137. OptionalTranslationType_Last
  3138.     :                               {$$ = NULL;}
  3139.     | ','                           {$$ = NULL;}
  3140.     | ',' TranslationKeyword        {$$ = $2;}
  3141.     ;
  3142.  
  3143.  
  3144. TermArgItem
  3145.     : ',' TermArg                   {$$ = $2;}
  3146.     | ',' error                     {$$ = AslDoError (); yyclearin;}
  3147.     ;
  3148.  
  3149. NameStringItem
  3150.     : ',' NameString                {$$ = $2;}
  3151.     | ',' error                     {$$ = AslDoError (); yyclearin;}
  3152.     ;
  3153.  
  3154. %%
  3155.  
  3156.  
  3157. /*
  3158.  * Local support functions
  3159.  */
  3160.  
  3161. int
  3162. AslCompilerwrap(void)
  3163. {
  3164.   return 1;
  3165. }
  3166.  
  3167. /*! [End] no source code translation !*/
  3168.  
  3169. void *
  3170. AslLocalAllocate (unsigned int Size)
  3171. {
  3172.     void                *Mem;
  3173.  
  3174.  
  3175.     DbgPrint (ASL_PARSE_OUTPUT, "\nAslLocalAllocate: Expanding Stack to %u\n\n", Size);
  3176.  
  3177.     Mem = ACPI_ALLOCATE_ZEROED (Size);
  3178.     if (!Mem)
  3179.     {
  3180.         AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION,
  3181.                         Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
  3182.                         Gbl_InputByteCount, Gbl_CurrentColumn,
  3183.                         Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
  3184.         exit (1);
  3185.     }
  3186.  
  3187.     return (Mem);
  3188. }
  3189.  
  3190. ACPI_PARSE_OBJECT *
  3191. AslDoError (void)
  3192. {
  3193.  
  3194.  
  3195.     return (TrCreateLeafNode (PARSEOP_ERRORNODE));
  3196.  
  3197. }
  3198.  
  3199.  
  3200. /*******************************************************************************
  3201.  *
  3202.  * FUNCTION:    UtGetOpName
  3203.  *
  3204.  * PARAMETERS:  ParseOpcode         - Parser keyword ID
  3205.  *
  3206.  * RETURN:      Pointer to the opcode name
  3207.  *
  3208.  * DESCRIPTION: Get the ascii name of the parse opcode
  3209.  *
  3210.  ******************************************************************************/
  3211.  
  3212. char *
  3213. UtGetOpName (
  3214.     UINT32                  ParseOpcode)
  3215. {
  3216. #ifdef ASL_YYTNAME_START
  3217.     /*
  3218.      * First entries (ASL_YYTNAME_START) in yytname are special reserved names.
  3219.      * Ignore first 8 characters of the name
  3220.      */
  3221.     return ((char *) yytname
  3222.         [(ParseOpcode - ASL_FIRST_PARSE_OPCODE) + ASL_YYTNAME_START] + 8);
  3223. #else
  3224.     return ("[Unknown parser generator]");
  3225. #endif
  3226. }
  3227.