Blame source/compiler/preprocess.h

Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Module Name: preprocess.h - header for iASL Preprocessor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Copyright (C) 2000 - 2018, Intel Corp.
Packit Service 1fb00e
 * All rights reserved.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Redistribution and use in source and binary forms, with or without
Packit Service 1fb00e
 * modification, are permitted provided that the following conditions
Packit Service 1fb00e
 * are met:
Packit Service 1fb00e
 * 1. Redistributions of source code must retain the above copyright
Packit Service 1fb00e
 *    notice, this list of conditions, and the following disclaimer,
Packit Service 1fb00e
 *    without modification.
Packit Service 1fb00e
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
Packit Service 1fb00e
 *    substantially similar to the "NO WARRANTY" disclaimer below
Packit Service 1fb00e
 *    ("Disclaimer") and any redistribution must be conditioned upon
Packit Service 1fb00e
 *    including a substantially similar Disclaimer requirement for further
Packit Service 1fb00e
 *    binary redistribution.
Packit Service 1fb00e
 * 3. Neither the names of the above-listed copyright holders nor the names
Packit Service 1fb00e
 *    of any contributors may be used to endorse or promote products derived
Packit Service 1fb00e
 *    from this software without specific prior written permission.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Alternatively, this software may be distributed under the terms of the
Packit Service 1fb00e
 * GNU General Public License ("GPL") version 2 as published by the Free
Packit Service 1fb00e
 * Software Foundation.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * NO WARRANTY
Packit Service 1fb00e
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit Service 1fb00e
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit Service 1fb00e
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
Packit Service 1fb00e
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit Service 1fb00e
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit Service 1fb00e
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit Service 1fb00e
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit Service 1fb00e
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
Packit Service 1fb00e
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
Packit Service 1fb00e
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Packit Service 1fb00e
 * POSSIBILITY OF SUCH DAMAGES.
Packit Service 1fb00e
 */
Packit Service 1fb00e
Packit Service 1fb00e
#define __PREPROCESS_H__
Packit Service 1fb00e
Packit Service 1fb00e
#ifndef _PREPROCESS
Packit Service 1fb00e
#define _PREPROCESS
Packit Service 1fb00e
Packit Service 1fb00e
#undef PR_EXTERN
Packit Service 1fb00e
Packit Service 1fb00e
#ifdef _DECLARE_PR_GLOBALS
Packit Service 1fb00e
#define PR_EXTERN
Packit Service 1fb00e
#define PR_INIT_GLOBAL(a,b)         (a)=(b)
Packit Service 1fb00e
#else
Packit Service 1fb00e
#define PR_EXTERN                   extern
Packit Service 1fb00e
#define PR_INIT_GLOBAL(a,b)         (a)
Packit Service 1fb00e
#endif
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Configuration
Packit Service 1fb00e
 */
Packit Service 1fb00e
#define PR_MAX_MACRO_ARGS       32              /* Max number of macro args */
Packit Service 1fb00e
#define PR_MAX_ARG_INSTANCES    24              /* Max instances of any one arg */
Packit Service 1fb00e
#define PR_LINES_PER_BLOCK      4096            /* Max input source lines per block */
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Local defines and macros
Packit Service 1fb00e
 */
Packit Service 1fb00e
#define PR_TOKEN_SEPARATORS     " ,(){}\t\n"
Packit Service 1fb00e
#define PR_MACRO_SEPARATORS     " ,(){}~!*/%+-<>=&^|\"\t\n"
Packit Service 1fb00e
#define PR_MACRO_ARGUMENTS      " ,\t\n"
Packit Service 1fb00e
#define PR_EXPR_SEPARATORS      " ,(){}~!*/%+-<>=&^|\"\t\n"
Packit Service 1fb00e
Packit Service 1fb00e
#define PR_PREFIX_ID            "Pr(%.4u) - "             /* Used for debug output */
Packit Service 1fb00e
Packit Service 1fb00e
#define THIS_TOKEN_OFFSET(t)    ((t-Gbl_MainTokenBuffer) + 1)
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Preprocessor structures
Packit Service 1fb00e
 */
Packit Service 1fb00e
typedef struct pr_macro_arg
Packit Service 1fb00e
{
Packit Service 1fb00e
    char                        *Name;
Packit Service 1fb00e
    UINT32                      Offset[PR_MAX_ARG_INSTANCES];
Packit Service 1fb00e
    UINT16                      UseCount;
Packit Service 1fb00e
Packit Service 1fb00e
} PR_MACRO_ARG;
Packit Service 1fb00e
Packit Service 1fb00e
typedef struct pr_define_info
Packit Service 1fb00e
{
Packit Service 1fb00e
    struct pr_define_info       *Previous;
Packit Service 1fb00e
    struct pr_define_info       *Next;
Packit Service 1fb00e
    char                        *Identifier;
Packit Service 1fb00e
    char                        *Replacement;
Packit Service 1fb00e
    char                        *Body;          /* Macro body */
Packit Service 1fb00e
    PR_MACRO_ARG                *Args;          /* Macro arg list */
Packit Service 1fb00e
    UINT16                      ArgCount;       /* Macro arg count */
Packit Service 1fb00e
    BOOLEAN                     Persist;        /* Keep for entire compiler run */
Packit Service 1fb00e
Packit Service 1fb00e
} PR_DEFINE_INFO;
Packit Service 1fb00e
Packit Service 1fb00e
typedef struct pr_directive_info
Packit Service 1fb00e
{
Packit Service 1fb00e
    char                        *Name;          /* Directive name */
Packit Service 1fb00e
    UINT8                       ArgCount;       /* Required # of args */
Packit Service 1fb00e
Packit Service 1fb00e
} PR_DIRECTIVE_INFO;
Packit Service 1fb00e
Packit Service 1fb00e
typedef struct pr_operator_info
Packit Service 1fb00e
{
Packit Service 1fb00e
    char                        *Op;
Packit Service 1fb00e
Packit Service 1fb00e
} PR_OPERATOR_INFO;
Packit Service 1fb00e
Packit Service 1fb00e
typedef struct pr_file_node
Packit Service 1fb00e
{
Packit Service 1fb00e
    struct pr_file_node         *Next;
Packit Service 1fb00e
    FILE                        *File;
Packit Service 1fb00e
    char                        *Filename;
Packit Service 1fb00e
    UINT32                      CurrentLineNumber;
Packit Service 1fb00e
Packit Service 1fb00e
} PR_FILE_NODE;
Packit Service 1fb00e
Packit Service 1fb00e
#define MAX_ARGUMENT_LENGTH     24
Packit Service 1fb00e
Packit Service 1fb00e
typedef struct directive_info
Packit Service 1fb00e
{
Packit Service 1fb00e
    struct directive_info       *Next;
Packit Service 1fb00e
    char                        Argument[MAX_ARGUMENT_LENGTH];
Packit Service 1fb00e
    int                         Directive;
Packit Service 1fb00e
    BOOLEAN                     IgnoringThisCodeBlock;
Packit Service 1fb00e
Packit Service 1fb00e
} DIRECTIVE_INFO;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Globals
Packit Service 1fb00e
 */
Packit Service 1fb00e
#if 0 /* TBD for macros */
Packit Service 1fb00e
PR_EXTERN char                  PR_INIT_GLOBAL (*XXXEvalBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
Packit Service 1fb00e
#endif
Packit Service 1fb00e
Packit Service 1fb00e
PR_EXTERN char                  PR_INIT_GLOBAL (*Gbl_MainTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
Packit Service 1fb00e
PR_EXTERN char                  PR_INIT_GLOBAL (*Gbl_MacroTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
Packit Service 1fb00e
PR_EXTERN char                  PR_INIT_GLOBAL (*Gbl_ExpressionTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
Packit Service 1fb00e
Packit Service 1fb00e
PR_EXTERN UINT32                Gbl_PreprocessorLineNumber;
Packit Service 1fb00e
PR_EXTERN int                   Gbl_IfDepth;
Packit Service 1fb00e
PR_EXTERN PR_FILE_NODE          *Gbl_InputFileList;
Packit Service 1fb00e
PR_EXTERN PR_DEFINE_INFO        PR_INIT_GLOBAL (*Gbl_DefineList, NULL);
Packit Service 1fb00e
PR_EXTERN BOOLEAN               PR_INIT_GLOBAL (Gbl_PreprocessorError, FALSE);
Packit Service 1fb00e
PR_EXTERN BOOLEAN               PR_INIT_GLOBAL (Gbl_IgnoringThisCodeBlock, FALSE);
Packit Service 1fb00e
PR_EXTERN DIRECTIVE_INFO        PR_INIT_GLOBAL (*Gbl_DirectiveStack, NULL);
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * prscan - Preprocessor entry
Packit Service 1fb00e
 */
Packit Service 1fb00e
void
Packit Service 1fb00e
PrInitializePreprocessor (
Packit Service 1fb00e
    void);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrInitializeGlobals (
Packit Service 1fb00e
    void);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrTerminatePreprocessor (
Packit Service 1fb00e
    void);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrDoPreprocess (
Packit Service 1fb00e
    void);
Packit Service 1fb00e
Packit Service 1fb00e
UINT64
Packit Service 1fb00e
PrIsDefined (
Packit Service 1fb00e
    char                    *Identifier);
Packit Service 1fb00e
Packit Service 1fb00e
UINT64
Packit Service 1fb00e
PrResolveDefine (
Packit Service 1fb00e
    char                    *Identifier);
Packit Service 1fb00e
Packit Service 1fb00e
int
Packit Service 1fb00e
PrInitLexer (
Packit Service 1fb00e
    char                    *String);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrTerminateLexer (
Packit Service 1fb00e
    void);
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * prmacros - Support for #defines and macros
Packit Service 1fb00e
 */
Packit Service 1fb00e
void
Packit Service 1fb00e
PrDumpPredefinedNames (
Packit Service 1fb00e
    void);
Packit Service 1fb00e
Packit Service 1fb00e
PR_DEFINE_INFO *
Packit Service 1fb00e
PrAddDefine (
Packit Service 1fb00e
    char                    *Token,
Packit Service 1fb00e
    char                    *Token2,
Packit Service 1fb00e
    BOOLEAN                 Persist);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrRemoveDefine (
Packit Service 1fb00e
    char                    *DefineName);
Packit Service 1fb00e
Packit Service 1fb00e
PR_DEFINE_INFO *
Packit Service 1fb00e
PrMatchDefine (
Packit Service 1fb00e
    char                    *MatchString);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrAddMacro (
Packit Service 1fb00e
    char                    *Name,
Packit Service 1fb00e
    char                    **Next);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrDoMacroInvocation (
Packit Service 1fb00e
    char                    *TokenBuffer,
Packit Service 1fb00e
    char                    *MacroStart,
Packit Service 1fb00e
    PR_DEFINE_INFO          *DefineInfo,
Packit Service 1fb00e
    char                    **Next);
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * prexpress - #if expression support
Packit Service 1fb00e
 */
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
PrResolveIntegerExpression (
Packit Service 1fb00e
    char                    *Line,
Packit Service 1fb00e
    UINT64                  *ReturnValue);
Packit Service 1fb00e
Packit Service 1fb00e
char *
Packit Service 1fb00e
PrPrioritizeExpression (
Packit Service 1fb00e
    char                    *OriginalLine);
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * prparser - lex/yacc expression parser
Packit Service 1fb00e
 */
Packit Service 1fb00e
UINT64
Packit Service 1fb00e
PrEvaluateExpression (
Packit Service 1fb00e
    char                    *ExprString);
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * prutils - Preprocesor utilities
Packit Service 1fb00e
 */
Packit Service 1fb00e
char *
Packit Service 1fb00e
PrGetNextToken (
Packit Service 1fb00e
    char                    *Buffer,
Packit Service 1fb00e
    char                    *MatchString,
Packit Service 1fb00e
    char                    **Next);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrError (
Packit Service 1fb00e
    UINT8                   Level,
Packit Service 1fb00e
    UINT16                  MessageId,
Packit Service 1fb00e
    UINT32                  Column);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrReplaceData (
Packit Service 1fb00e
    char                    *Buffer,
Packit Service 1fb00e
    UINT32                  LengthToRemove,
Packit Service 1fb00e
    char                    *BufferToAdd,
Packit Service 1fb00e
    UINT32                  LengthToAdd);
Packit Service 1fb00e
Packit Service 1fb00e
FILE *
Packit Service 1fb00e
PrOpenIncludeFile (
Packit Service 1fb00e
    char                    *Filename,
Packit Service 1fb00e
    char                    *OpenMode,
Packit Service 1fb00e
    char                    **FullPathname);
Packit Service 1fb00e
Packit Service 1fb00e
FILE *
Packit Service 1fb00e
PrOpenIncludeWithPrefix (
Packit Service 1fb00e
    char                    *PrefixDir,
Packit Service 1fb00e
    char                    *Filename,
Packit Service 1fb00e
    char                    *OpenMode,
Packit Service 1fb00e
    char                    **FullPathname);
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
PrPushInputFileStack (
Packit Service 1fb00e
    FILE                    *InputFile,
Packit Service 1fb00e
    char                    *Filename);
Packit Service 1fb00e
Packit Service 1fb00e
BOOLEAN
Packit Service 1fb00e
PrPopInputFileStack (
Packit Service 1fb00e
    void);
Packit Service 1fb00e
Packit Service 1fb00e
#endif