blob: 38065ab600b33883560a222a17734205ae1474f5 [file] [log] [blame]
/*
* YAPP preprocessor (mimics NASM's preprocessor) header file
*
* Copyright (C) 2001 Michael Urman
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/* Representation of tokenized file, both for straight source, and macros */
typedef struct YAPP_Token_s {
unsigned int type;
char *str;
union {
unsigned int int_val;
double double_val;
char *str_val;
} val;
} YAPP_Token;
/* internal state of preprocessor's parser */
typedef enum {
YAPP_STATE_INITIAL = 0,
YAPP_STATE_ASSIGN,
YAPP_STATE_DEFINING_MACRO,
YAPP_STATE_BUILDING_MACRO,
YAPP_STATE_NEED_EOL,
YAPP_STATE_EOF
} YAPP_State;
/* tracks nested %if* %elif* %else %endif structures */
typedef enum {
YAPP_OUTPUT, /* this level+module outputs */
YAPP_NO_OUTPUT, /* this would never output */
YAPP_OLD_OUTPUT, /* this level has already output */
YAPP_BLOCKED_OUTPUT /* the surrounding level is not outputting */
} YAPP_Output;
void yapp_lex_initialize(FILE *f);
void set_inhibit(void);
extern /*@dependent@*/ yasm_linemap *yapp_preproc_linemap;
#define cur_lindex yasm_linemap_get_current(yapp_preproc_linemap)