eĿlipsis
a language independent preprocessor
 
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Loading...
Searching...
No Matches
ellipsis-lexer.c File Reference
#include "ellipsis-lexer.h"
#include "utils/ellipsis-init.h"
#include "encoding/ellipsis-entity.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
Include dependency graph for ellipsis-lexer.c:

Macros

#define ELLIPSIS_CONTRACT(COUNT, COND, ACTION, VERB, CSTR, CTYPE, ...)
 
#define ELLIPSIS_CONTRACT_CHECK_STATIC(CTYPE, COND, CSTR, ...)
 
#define ELLIPSIS_CONTRACT_ICE_OR_TRUE(...)
 
#define ELLIPSIS_CONTRACT_IMPL(COUNT, COND, ACTION, VERB, CSTR, CTYPE, ...)
 
#define ELLIPSIS_CONTRACT_VIOLATION(COUNT, VERB, CTYPE, CSTR, ...)
 
#define ELLIPSIS_STR32_LITERAL   ELLIPSIS_STR32_LITERAL_GLOBAL
 
#define ELLIPSIS_TEST_ICE(...)   (false ? ELLIPSIS_TO_VOIDS(__VA_ARGS__) : (ellipsis‿contracts‿is_ice*)nullptr)
 
#define ELLIPSIS_TO_VOIDS(...)   ((void*)((uintptr_t)((__VA_ARGS__)-(__VA_ARGS__))))
 
#define STRINGIFY(...)   STRINGIFY_(__VA_ARGS__)
 
#define STRINGIFY_(...)   #__VA_ARGS__
 

Typedefs

typedef struct ellipsis‿contracts‿is_ice ellipsis‿contracts‿is_ice
 

Functions

ellipsis‿category ellipsis‿lex‿category‿_Inner (ellipsis‿str32 const st[static 1], ellipsis‿special‿find *find)
 
ellipsis‿category ellipsis‿lex‿category‿_Insta (ellipsis‿str32 const s[static 1], ellipsis‿special‿find *find)
 
bool ellipsis‿lex‿Continue (char32_t val)
 
bool ellipsis‿lex‿is_space (char32_t c)
 
ellipsis‿str32 const * ellipsis‿lex‿nonspace‿_Inner (size_t len[static 1], char const *restrict s[static 1], ellipsis‿special const **sp, ellipsis‿token t[static 1], ellipsis‿special‿find *find)
 
ellipsis‿str32 const * ellipsis‿lex‿nonspace‿_Insta (size_t len[static 1], char const *restrict s[static 1], ellipsis‿special const **sp, ellipsis‿token t[static 1], ellipsis‿special‿find *f)
 
ellipsis‿str32 const * ellipsis‿lex‿space‿_Inner (size_t len[static 1], char const *restrict s[static 1])
 
ellipsis‿str32 const * ellipsis‿lex‿space‿_Insta (size_t len[static 1], char const *restrict s[static 1])
 
bool ellipsis‿lex‿Start (char32_t val)
 
size_t ellipsis‿lex‿str_escape (char[static 1], size_t[static 1], char const[static 2], bool)
 
char * ellipsis‿lex‿strdup_escape‿_Inner (size_t len, char const s[static len], size_t nlenp[static 1])
 
char * ellipsis‿lex‿strdup_escape‿_Insta (size_t len, char const s[static len], size_t nlenp[static 1])
 
size_t ellipsis‿str32‿escape (char32_t *pc32, char const *s, bool)
 

Variables

thread_local bool volatile ellipsis‿contracts‿ignore‿dynamic
 
thread_local bool volatile ellipsis‿contracts‿proceed‿dynamic
 
thread_local bool volatile ellipsis‿contracts‿verbose‿dynamic
 
static ellipsis‿str32 const * one_str32 []
 
static constexpr size_t one_str32_len = sizeof(one_str32)/sizeof(one_str32[0])
 

Detailed Description

Warning
This is a file generated by eĿlipsis version 20250309, do not modify

Macro Definition Documentation

◆ ELLIPSIS_CONTRACT

#define ELLIPSIS_CONTRACT (   COUNT,
  COND,
  ACTION,
  VERB,
  CSTR,
  CTYPE,
  ... 
)
Value:
\
do { \
_Generic( \
default: ELLIPSIS_CONTRACT_IMPL(COUNT, COND, ACTION, VERB, CSTR, CTYPE __VA_OPT__(,) __VA_ARGS__));\
} while(false)
struct ellipsis‿contracts‿is_ice ellipsis‿contracts‿is_ice
Definition ellipsis-expression.c:24
#define ELLIPSIS_TEST_ICE(...)
Definition ellipsis-lexer.c:46
#define ELLIPSIS_CONTRACT_CHECK_STATIC(CTYPE, COND, CSTR,...)
Definition ellipsis-lexer.c:54
#define ELLIPSIS_CONTRACT_IMPL(COUNT, COND, ACTION, VERB, CSTR, CTYPE,...)
Definition ellipsis-lexer.c:36
#define __VA_OPT__
A pseudo macro that cannot be redefined.
Definition ellipsis-predefined.dirs:89

◆ ELLIPSIS_CONTRACT_CHECK_STATIC

#define ELLIPSIS_CONTRACT_CHECK_STATIC (   CTYPE,
  COND,
  CSTR,
  ... 
)
Value:
({\
static_assert(ELLIPSIS_CONTRACT_ICE_OR_TRUE(COND), \
"compile time violation of " CTYPE " " CSTR \
__VA_OPT__(", ") __VA_ARGS__ );\
})
#define ELLIPSIS_CONTRACT_ICE_OR_TRUE(...)
Definition ellipsis-lexer.c:48

◆ ELLIPSIS_CONTRACT_ICE_OR_TRUE

#define ELLIPSIS_CONTRACT_ICE_OR_TRUE (   ...)
Value:
_Generic( \
ELLIPSIS_TEST_ICE(__VA_ARGS__), \
ellipsis‿contracts‿is_ice*: (__VA_ARGS__), \
default: true)
#define true
The constant true made accessible to the preprocessor.
Definition ellipsis-builtins.dirs:32

◆ ELLIPSIS_CONTRACT_IMPL

#define ELLIPSIS_CONTRACT_IMPL (   COUNT,
  COND,
  ACTION,
  VERB,
  CSTR,
  CTYPE,
  ... 
)
Value:
(((false) || (COND)) \
? (void)0 \
: (ELLIPSIS_CONTRACT_VIOLATION(COUNT, VERB, CTYPE, CSTR __VA_OPT__(,) __VA_ARGS__) \
, ((false) \
? (void)0 \
: ACTION())))
#define ELLIPSIS_CONTRACT_VIOLATION(COUNT, VERB, CTYPE, CSTR,...)
Definition ellipsis-lexer.c:27

◆ ELLIPSIS_CONTRACT_VIOLATION

#define ELLIPSIS_CONTRACT_VIOLATION (   COUNT,
  VERB,
  CTYPE,
  CSTR,
  ... 
)
Value:
({\
static char const contract_format_ ## COUNT[] = \
__FILE__ ":" STRINGIFY(__LINE__) ": violation of " CTYPE " `" CSTR "`" __VA_OPT__(", ") __VA_ARGS__ "\n";\
(VERB \
? fputs(contract_format_ ## COUNT, stderr) \
: 0);\
})
#define __FILE__
The current source file as required by the C standard.
Definition ellipsis-builtins.dirs:21
#define __LINE__
The current physical source line as required by the C standard.
Definition ellipsis-builtins.dirs:24
#define STRINGIFY(...)
Definition ellipsis-lexer.c:24

◆ ELLIPSIS_STR32_LITERAL

#define ELLIPSIS_STR32_LITERAL   ELLIPSIS_STR32_LITERAL_GLOBAL

◆ ELLIPSIS_TEST_ICE

#define ELLIPSIS_TEST_ICE (   ...)    (false ? ELLIPSIS_TO_VOIDS(__VA_ARGS__) : (ellipsis‿contracts‿is_ice*)nullptr)

◆ ELLIPSIS_TO_VOIDS

#define ELLIPSIS_TO_VOIDS (   ...)    ((void*)((uintptr_t)((__VA_ARGS__)-(__VA_ARGS__))))

◆ STRINGIFY

#define STRINGIFY (   ...)    STRINGIFY_(__VA_ARGS__)

◆ STRINGIFY_

#define STRINGIFY_ (   ...)    #__VA_ARGS__

Typedef Documentation

◆ ellipsis‿contracts‿is_ice

Function Documentation

◆ ellipsis‿lex‿category‿_Inner()

ellipsis‿category ellipsis‿lex‿category‿_Inner ( ellipsis‿str32 const  st[static 1],
ellipsis‿special‿find find 
)

References ellipsis‿token::cat, ellipsis‿lex‿nonspace(), ellipsis‿str32‿delete(), ellipsis‿str32‿dup, and ELLIPSIS_ERROR.

Referenced by ellipsis‿lex‿category‿_Ctra().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsis‿lex‿category‿_Insta()

ellipsis‿category ellipsis‿lex‿category‿_Insta ( ellipsis‿str32 const  s[static 1],
ellipsis‿special‿find find 
)
inline

start inner defer anchor at level 1

DEFER_TYPE needs a semicolon

end inner defer anchor, level 1

References ellipsis‿lex‿category‿_Ctra(), and ellipsis‿lex‿category‿_Insta().

Referenced by ellipsis‿lex‿category‿_Insta(), and ellipsis‿lex‿category().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsis‿lex‿Continue()

bool ellipsis‿lex‿Continue ( char32_t  val)
inline

References ellipsis‿XID‿Continue, and ellipsis_bitset_member.

Referenced by ellipsis‿filter(), and ellipsis‿lex‿nonspace‿_Inner().

Here is the caller graph for this function:

◆ ellipsis‿lex‿is_space()

bool ellipsis‿lex‿is_space ( char32_t  c)
inline

Referenced by ellipsis‿lex‿nonspace‿_Inner(), and ellipsis‿lex‿space‿_Inner().

Here is the caller graph for this function:

◆ ellipsis‿lex‿nonspace‿_Inner()

◆ ellipsis‿lex‿nonspace‿_Insta()

ellipsis‿str32 const * ellipsis‿lex‿nonspace‿_Insta ( size_t  len[static 1],
char const *restrict  s[static 1],
ellipsis‿special const **  sp,
ellipsis‿token  t[static 1],
ellipsis‿special‿find f 
)
inline

start inner defer anchor at level 1

DEFER_TYPE needs a semicolon

end inner defer anchor, level 1

References ellipsis‿lex‿nonspace‿_Ctra(), and ellipsis‿lex‿nonspace‿_Insta().

Referenced by ellipsis‿lex‿nonspace‿_Insta(), and ellipsis‿lex‿nonspace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsis‿lex‿space‿_Inner()

ellipsis‿str32 const * ellipsis‿lex‿space‿_Inner ( size_t  len[static 1],
char const *restrict  s[static 1] 
)

References ellipsis‿entity‿used, ellipsis‿entity(), ellipsis‿lex‿is_space(), ellipsis‿str32‿escape(), and one_str32.

Referenced by ellipsis‿lex‿space‿_Ctra().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsis‿lex‿space‿_Insta()

ellipsis‿str32 const * ellipsis‿lex‿space‿_Insta ( size_t  len[static 1],
char const *restrict  s[static 1] 
)
inline

start inner defer anchor at level 1

DEFER_TYPE needs a semicolon

end inner defer anchor, level 1

References ellipsis‿lex‿space‿_Ctra(), and ellipsis‿lex‿space‿_Insta().

Referenced by ellipsis‿lex‿space‿_Insta(), and ellipsis‿lex‿space().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsis‿lex‿Start()

bool ellipsis‿lex‿Start ( char32_t  val)
inline

References ellipsis‿XID‿Start, and ellipsis_bitset_member.

Referenced by ellipsis‿lex‿nonspace‿_Inner().

Here is the caller graph for this function:

◆ ellipsis‿lex‿str_escape()

size_t ellipsis‿lex‿str_escape ( char  pc[static 1],
size_t  lenp[static 1],
char const  s[static 2],
bool  account_eol 
)
inline

References ellipsis‿infra‿newline(), and ELLIPSIS_CONTRACT.

Referenced by ellipsis‿lex‿strdup_escape‿_Inner().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsis‿lex‿strdup_escape‿_Inner()

char * ellipsis‿lex‿strdup_escape‿_Inner ( size_t  len,
char const  s[static len],
size_t  nlenp[static 1] 
)

start inner defer anchor at level 1

DEFER_TYPE needs a semicolon

defer needs braces and a semicolon

end inner defer anchor, level 1

References ellipsis‿lex‿str_escape(), ellipsis‿malloc, and ELLIPSIS_CONTRACT.

Referenced by ellipsis‿lex‿strdup_escape‿_Ctra().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsis‿lex‿strdup_escape‿_Insta()

char * ellipsis‿lex‿strdup_escape‿_Insta ( size_t  len,
char const  s[static len],
size_t  nlenp[static 1] 
)
inline

start inner defer anchor at level 1

DEFER_TYPE needs a semicolon

end inner defer anchor, level 1

References ellipsis‿lex‿strdup_escape‿_Ctra(), and ellipsis‿lex‿strdup_escape‿_Insta().

Referenced by ellipsis‿lex‿strdup_escape‿_Insta(), and ellipsis‿lex‿strdup_escape().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsis‿str32‿escape()

size_t ellipsis‿str32‿escape ( char32_t *  pc32,
char const *  s,
bool  account_eol 
)
inline

References ellipsis‿infra‿newline().

Referenced by ellipsis‿lex‿nonspace‿_Inner(), and ellipsis‿lex‿space‿_Inner().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ ellipsis‿contracts‿ignore‿dynamic

thread_local bool volatile ellipsis‿contracts‿ignore‿dynamic
extern

◆ ellipsis‿contracts‿proceed‿dynamic

thread_local bool volatile ellipsis‿contracts‿proceed‿dynamic
extern

◆ ellipsis‿contracts‿verbose‿dynamic

thread_local bool volatile ellipsis‿contracts‿verbose‿dynamic
extern

◆ one_str32

◆ one_str32_len

constexpr size_t one_str32_len = sizeof(one_str32)/sizeof(one_str32[0])
staticconstexpr