Convert-Binary-C
view release on metacpan or search on metacpan
ucpp/ucppi.h view on Meta::CPAN
/*
* (c) Thomas Pornin 1999 - 2002
*
* 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.
* 4. The name of the authors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT 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 AUTHORS OR 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.
*
*/
#ifndef UCPP__UCPPI__
#define UCPP__UCPPI__
#include "tune.h"
#include "cpp.h"
#include "nhash.h"
#include "reent.h"
/*
* A macro represented in a compact form; simple tokens are represented
* by one byte, containing their number. Tokens with a string value are
* followed by the value (string finished by a 0). Macro arguments are
* followed by the argument number (in one byte -- thus implying a hard
* limit of 254 arguments (number 255 is for __VA_ARGS__).
*/
struct comp_token_fifo {
size_t length;
size_t rp;
unsigned char *t;
};
/* These declarations are used only internally by ucpp */
/*
* S_TOKEN(x) checks whether x is a token type with an embedded string
* ttMWS(x) checks whether x is macro whitespace (space, comment...)
* ttWHI(x) checks whether x is whitespace (MWS or newline)
*/
#define S_TOKEN(x) STRING_TOKEN(x)
#define ttMWS(x) ((x) == NONE || (x) == COMMENT || (x) == OPT_NONE)
#define ttWHI(x) (ttMWS(x) || (x) == NEWLINE)
/*
* Function prototypes
*/
/*
* from lexer.c
*/
#define init_cppm UCPP_PRIVATE(init_cppm)
#define put_char UCPP_PRIVATE(put_char)
#define discard_char UCPP_PRIVATE(discard_char)
#define next_token UCPP_PRIVATE(next_token)
#define grap_char UCPP_PRIVATE(grap_char)
#define space_char UCPP_PRIVATE(space_char)
void init_cppm(pCPP);
void put_char(pCPP_ struct lexer_state *, unsigned char);
void discard_char(pCPP_ struct lexer_state *);
int next_token(pCPP_ struct lexer_state *);
int grap_char(pCPP_ struct lexer_state *);
int space_char(int);
#ifdef UCPP_REENTRANT
#define new_cppm UCPP_PRIVATE(new_cppm)
#define del_cppm UCPP_PRIVATE(del_cppm)
CPPM new_cppm(void);
void del_cppm(CPPM);
#endif
#ifdef UCPP_CLONE
#define clone_cppm UCPP_PRIVATE(clone_cppm)
CPPM clone_cppm(const CPPM);
#endif
/*
* from assert.c
*/
struct assert {
hash_item_header head; /* first field */
size_t nbval;
struct token_fifo *val;
};
( run in 0.685 second using v1.01-cache-2.11-cpan-39bf76dae61 )