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