xref: /freebsd/sys/contrib/dev/acpica/compiler/preprocess.h (revision 042ff955b5ebb29fa0be34b57f8e59de196afb92)
14c52cad2SJung-uk Kim /******************************************************************************
24c52cad2SJung-uk Kim  *
34c52cad2SJung-uk Kim  * Module Name: preprocess.h - header for iASL Preprocessor
44c52cad2SJung-uk Kim  *
54c52cad2SJung-uk Kim  *****************************************************************************/
64c52cad2SJung-uk Kim 
74c52cad2SJung-uk Kim /*
84c52cad2SJung-uk Kim  * Copyright (C) 2000 - 2012, Intel Corp.
94c52cad2SJung-uk Kim  * All rights reserved.
104c52cad2SJung-uk Kim  *
114c52cad2SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
124c52cad2SJung-uk Kim  * modification, are permitted provided that the following conditions
134c52cad2SJung-uk Kim  * are met:
144c52cad2SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
154c52cad2SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
164c52cad2SJung-uk Kim  *    without modification.
174c52cad2SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
184c52cad2SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
194c52cad2SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
204c52cad2SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
214c52cad2SJung-uk Kim  *    binary redistribution.
224c52cad2SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
234c52cad2SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
244c52cad2SJung-uk Kim  *    from this software without specific prior written permission.
254c52cad2SJung-uk Kim  *
264c52cad2SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
274c52cad2SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
284c52cad2SJung-uk Kim  * Software Foundation.
294c52cad2SJung-uk Kim  *
304c52cad2SJung-uk Kim  * NO WARRANTY
314c52cad2SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
324c52cad2SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
334c52cad2SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
344c52cad2SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
354c52cad2SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
364c52cad2SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
374c52cad2SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
384c52cad2SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
394c52cad2SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
404c52cad2SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
414c52cad2SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
424c52cad2SJung-uk Kim  */
434c52cad2SJung-uk Kim 
444c52cad2SJung-uk Kim #define __PREPROCESS_H__
454c52cad2SJung-uk Kim 
464c52cad2SJung-uk Kim #ifndef _PREPROCESS
474c52cad2SJung-uk Kim #define _PREPROCESS
484c52cad2SJung-uk Kim 
494c52cad2SJung-uk Kim #undef PR_EXTERN
504c52cad2SJung-uk Kim 
514c52cad2SJung-uk Kim #ifdef _DECLARE_PR_GLOBALS
524c52cad2SJung-uk Kim #define PR_EXTERN
534c52cad2SJung-uk Kim #define PR_INIT_GLOBAL(a,b)         (a)=(b)
544c52cad2SJung-uk Kim #else
554c52cad2SJung-uk Kim #define PR_EXTERN                   extern
564c52cad2SJung-uk Kim #define PR_INIT_GLOBAL(a,b)         (a)
574c52cad2SJung-uk Kim #endif
584c52cad2SJung-uk Kim 
594c52cad2SJung-uk Kim 
604c52cad2SJung-uk Kim /*
614c52cad2SJung-uk Kim  * Configuration
624c52cad2SJung-uk Kim  */
634c52cad2SJung-uk Kim #define PR_MAX_MACRO_ARGS       32              /* Max number of macro args */
644c52cad2SJung-uk Kim #define PR_MAX_ARG_INSTANCES    24              /* Max instances of any one arg */
654c52cad2SJung-uk Kim #define PR_LINES_PER_BLOCK      4096            /* Max input source lines per block */
664c52cad2SJung-uk Kim 
674c52cad2SJung-uk Kim 
684c52cad2SJung-uk Kim /*
694c52cad2SJung-uk Kim  * Local defines and macros
704c52cad2SJung-uk Kim  */
714c52cad2SJung-uk Kim #define PR_TOKEN_SEPARATORS     " ,(){}\t\n"
724c52cad2SJung-uk Kim #define PR_MACRO_SEPARATORS     " ,(){}~!*/%+-<>=&^|\"\t\n"
734c52cad2SJung-uk Kim #define PR_MACRO_ARGUMENTS      " ,\t\n"
744c52cad2SJung-uk Kim #define PR_EXPR_SEPARATORS      " ,(){}~!*/%+-<>=&^|\"\t\n"
754c52cad2SJung-uk Kim 
764c52cad2SJung-uk Kim #define PR_PREFIX_ID            "Pr(%.4u) - "             /* Used for debug output */
774c52cad2SJung-uk Kim 
784c52cad2SJung-uk Kim #define THIS_TOKEN_OFFSET(t)    ((t-Gbl_MainTokenBuffer) + 1)
794c52cad2SJung-uk Kim 
804c52cad2SJung-uk Kim 
814c52cad2SJung-uk Kim /*
824c52cad2SJung-uk Kim  * Preprocessor structures
834c52cad2SJung-uk Kim  */
844c52cad2SJung-uk Kim typedef struct pr_macro_arg
854c52cad2SJung-uk Kim {
864c52cad2SJung-uk Kim     char                        *Name;
874c52cad2SJung-uk Kim     UINT32                      Offset[PR_MAX_ARG_INSTANCES];
884c52cad2SJung-uk Kim     UINT16                      UseCount;
894c52cad2SJung-uk Kim 
904c52cad2SJung-uk Kim } PR_MACRO_ARG;
914c52cad2SJung-uk Kim 
924c52cad2SJung-uk Kim typedef struct pr_define_info
934c52cad2SJung-uk Kim {
944c52cad2SJung-uk Kim     struct pr_define_info       *Previous;
954c52cad2SJung-uk Kim     struct pr_define_info       *Next;
964c52cad2SJung-uk Kim     char                        *Identifier;
974c52cad2SJung-uk Kim     char                        *Replacement;
984c52cad2SJung-uk Kim     char                        *Body;          /* Macro body */
994c52cad2SJung-uk Kim     PR_MACRO_ARG                *Args;          /* Macro arg list */
1004c52cad2SJung-uk Kim     UINT16                      ArgCount;       /* Macro arg count */
1014c52cad2SJung-uk Kim     BOOLEAN                     Persist;        /* Keep for entire compiler run */
1024c52cad2SJung-uk Kim 
1034c52cad2SJung-uk Kim } PR_DEFINE_INFO;
1044c52cad2SJung-uk Kim 
1054c52cad2SJung-uk Kim typedef struct pr_directive_info
1064c52cad2SJung-uk Kim {
1074c52cad2SJung-uk Kim     char                        *Name;          /* Directive name */
1084c52cad2SJung-uk Kim     UINT8                       ArgCount;       /* Required # of args */
1094c52cad2SJung-uk Kim 
1104c52cad2SJung-uk Kim } PR_DIRECTIVE_INFO;
1114c52cad2SJung-uk Kim 
1124c52cad2SJung-uk Kim typedef struct pr_operator_info
1134c52cad2SJung-uk Kim {
1144c52cad2SJung-uk Kim     char                        *Op;
1154c52cad2SJung-uk Kim 
1164c52cad2SJung-uk Kim } PR_OPERATOR_INFO;
1174c52cad2SJung-uk Kim 
1184c52cad2SJung-uk Kim typedef struct pr_file_node
1194c52cad2SJung-uk Kim {
1204c52cad2SJung-uk Kim     struct pr_file_node         *Next;
1214c52cad2SJung-uk Kim     FILE                        *File;
1224c52cad2SJung-uk Kim     char                        *Filename;
1234c52cad2SJung-uk Kim     UINT32                      CurrentLineNumber;
1244c52cad2SJung-uk Kim 
1254c52cad2SJung-uk Kim } PR_FILE_NODE;
1264c52cad2SJung-uk Kim 
1274c52cad2SJung-uk Kim 
1284c52cad2SJung-uk Kim /*
1294c52cad2SJung-uk Kim  * Globals
1304c52cad2SJung-uk Kim  */
131*042ff955SJung-uk Kim #if 0 /* TBD for macros */
132*042ff955SJung-uk Kim PR_EXTERN char                  PR_INIT_GLOBAL (*XXXEvalBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
133*042ff955SJung-uk Kim #endif
134*042ff955SJung-uk Kim 
135*042ff955SJung-uk Kim PR_EXTERN char                  PR_INIT_GLOBAL (*Gbl_MainTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
136*042ff955SJung-uk Kim PR_EXTERN char                  PR_INIT_GLOBAL (*Gbl_MacroTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
137*042ff955SJung-uk Kim PR_EXTERN char                  PR_INIT_GLOBAL (*Gbl_ExpressionTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
1384c52cad2SJung-uk Kim 
1394c52cad2SJung-uk Kim PR_EXTERN PR_FILE_NODE          *Gbl_InputFileList;
1404c52cad2SJung-uk Kim PR_EXTERN PR_DEFINE_INFO        PR_INIT_GLOBAL (*Gbl_DefineList, NULL);
1414c52cad2SJung-uk Kim PR_EXTERN UINT32                Gbl_PreprocessorLineNumber;
1424c52cad2SJung-uk Kim PR_EXTERN int                   Gbl_IfDepth;
1434c52cad2SJung-uk Kim PR_EXTERN BOOLEAN               PR_INIT_GLOBAL (Gbl_PreprocessorError, FALSE);
1444c52cad2SJung-uk Kim 
1454c52cad2SJung-uk Kim 
1464c52cad2SJung-uk Kim /*
1474c52cad2SJung-uk Kim  * prscan - Preprocessor entry
1484c52cad2SJung-uk Kim  */
1494c52cad2SJung-uk Kim void
1504c52cad2SJung-uk Kim PrInitializePreprocessor (
1514c52cad2SJung-uk Kim     void);
1524c52cad2SJung-uk Kim 
1534c52cad2SJung-uk Kim void
1544c52cad2SJung-uk Kim PrInitializeGlobals (
1554c52cad2SJung-uk Kim     void);
1564c52cad2SJung-uk Kim 
1574c52cad2SJung-uk Kim void
1584c52cad2SJung-uk Kim PrTerminatePreprocessor (
1594c52cad2SJung-uk Kim     void);
1604c52cad2SJung-uk Kim 
1614c52cad2SJung-uk Kim BOOLEAN
1624c52cad2SJung-uk Kim PrDoPreprocess (
1634c52cad2SJung-uk Kim     void);
1644c52cad2SJung-uk Kim 
1654c52cad2SJung-uk Kim UINT64
1664c52cad2SJung-uk Kim PrIsDefined (
1674c52cad2SJung-uk Kim     char                    *Identifier);
1684c52cad2SJung-uk Kim 
1694c52cad2SJung-uk Kim UINT64
1704c52cad2SJung-uk Kim PrResolveDefine (
1714c52cad2SJung-uk Kim     char                    *Identifier);
1724c52cad2SJung-uk Kim 
1734c52cad2SJung-uk Kim int
1744c52cad2SJung-uk Kim PrInitLexer (
1754c52cad2SJung-uk Kim     char                    *String);
1764c52cad2SJung-uk Kim 
1774c52cad2SJung-uk Kim void
1784c52cad2SJung-uk Kim PrTerminateLexer (
1794c52cad2SJung-uk Kim     void);
1804c52cad2SJung-uk Kim 
1814c52cad2SJung-uk Kim 
1824c52cad2SJung-uk Kim /*
1834c52cad2SJung-uk Kim  * prmacros - Support for #defines and macros
1844c52cad2SJung-uk Kim  */
1854c52cad2SJung-uk Kim void
1864c52cad2SJung-uk Kim PrDumpPredefinedNames (
1874c52cad2SJung-uk Kim     void);
1884c52cad2SJung-uk Kim 
1894c52cad2SJung-uk Kim PR_DEFINE_INFO *
1904c52cad2SJung-uk Kim PrAddDefine (
1914c52cad2SJung-uk Kim     char                    *Token,
1924c52cad2SJung-uk Kim     char                    *Token2,
1934c52cad2SJung-uk Kim     BOOLEAN                 Persist);
1944c52cad2SJung-uk Kim 
1954c52cad2SJung-uk Kim void
1964c52cad2SJung-uk Kim PrRemoveDefine (
1974c52cad2SJung-uk Kim     char                    *DefineName);
1984c52cad2SJung-uk Kim 
1994c52cad2SJung-uk Kim PR_DEFINE_INFO *
2004c52cad2SJung-uk Kim PrMatchDefine (
2014c52cad2SJung-uk Kim     char                    *MatchString);
2024c52cad2SJung-uk Kim 
2034c52cad2SJung-uk Kim void
2044c52cad2SJung-uk Kim PrAddMacro (
2054c52cad2SJung-uk Kim     char                    *Name,
2064c52cad2SJung-uk Kim     char                    **Next);
2074c52cad2SJung-uk Kim 
2084c52cad2SJung-uk Kim void
2094c52cad2SJung-uk Kim PrDoMacroInvocation (
2104c52cad2SJung-uk Kim     char                    *TokenBuffer,
2114c52cad2SJung-uk Kim     char                    *MacroStart,
2124c52cad2SJung-uk Kim     PR_DEFINE_INFO          *DefineInfo,
2134c52cad2SJung-uk Kim     char                    **Next);
2144c52cad2SJung-uk Kim 
2154c52cad2SJung-uk Kim 
2164c52cad2SJung-uk Kim /*
2174c52cad2SJung-uk Kim  * prexpress - #if expression support
2184c52cad2SJung-uk Kim  */
2194c52cad2SJung-uk Kim ACPI_STATUS
2204c52cad2SJung-uk Kim PrResolveIntegerExpression (
2214c52cad2SJung-uk Kim     char                    *Line,
2224c52cad2SJung-uk Kim     UINT64                  *ReturnValue);
2234c52cad2SJung-uk Kim 
2244c52cad2SJung-uk Kim char *
2254c52cad2SJung-uk Kim PrPrioritizeExpression (
2264c52cad2SJung-uk Kim     char                    *OriginalLine);
2274c52cad2SJung-uk Kim 
2284c52cad2SJung-uk Kim /*
2294c52cad2SJung-uk Kim  * prparser - lex/yacc expression parser
2304c52cad2SJung-uk Kim  */
2314c52cad2SJung-uk Kim UINT64
2324c52cad2SJung-uk Kim PrEvaluateExpression (
2334c52cad2SJung-uk Kim     char                    *ExprString);
2344c52cad2SJung-uk Kim 
2354c52cad2SJung-uk Kim 
2364c52cad2SJung-uk Kim /*
2374c52cad2SJung-uk Kim  * prutils - Preprocesor utilities
2384c52cad2SJung-uk Kim  */
2394c52cad2SJung-uk Kim char *
2404c52cad2SJung-uk Kim PrGetNextToken (
2414c52cad2SJung-uk Kim     char                    *Buffer,
2424c52cad2SJung-uk Kim     char                    *MatchString,
2434c52cad2SJung-uk Kim     char                    **Next);
2444c52cad2SJung-uk Kim 
2454c52cad2SJung-uk Kim void
2464c52cad2SJung-uk Kim PrError (
2474c52cad2SJung-uk Kim     UINT8                   Level,
2484c52cad2SJung-uk Kim     UINT8                   MessageId,
2494c52cad2SJung-uk Kim     UINT32                  Column);
2504c52cad2SJung-uk Kim 
2514c52cad2SJung-uk Kim void
2524c52cad2SJung-uk Kim PrReplaceData (
2534c52cad2SJung-uk Kim     char                    *Buffer,
2544c52cad2SJung-uk Kim     UINT32                  LengthToRemove,
2554c52cad2SJung-uk Kim     char                    *BufferToAdd,
2564c52cad2SJung-uk Kim     UINT32                  LengthToAdd);
2574c52cad2SJung-uk Kim 
2584c52cad2SJung-uk Kim void
2594c52cad2SJung-uk Kim PrOpenIncludeFile (
2604c52cad2SJung-uk Kim     char                    *Filename);
2614c52cad2SJung-uk Kim 
2624c52cad2SJung-uk Kim FILE *
2634c52cad2SJung-uk Kim PrOpenIncludeWithPrefix (
2644c52cad2SJung-uk Kim     char                    *PrefixDir,
2654c52cad2SJung-uk Kim     char                    *Filename);
2664c52cad2SJung-uk Kim 
2674c52cad2SJung-uk Kim void
2684c52cad2SJung-uk Kim PrPushInputFileStack (
2694c52cad2SJung-uk Kim     FILE                    *InputFile,
2704c52cad2SJung-uk Kim     char                    *Filename);
2714c52cad2SJung-uk Kim 
2724c52cad2SJung-uk Kim BOOLEAN
2734c52cad2SJung-uk Kim PrPopInputFileStack (
2744c52cad2SJung-uk Kim     void);
2754c52cad2SJung-uk Kim 
2764c52cad2SJung-uk Kim #endif
277