Created
August 19, 2024 06:38
-
-
Save dolik-rce/5c588e226634aeee287f3dbe6b6f9962 to your computer and use it in GitHub Desktop.
TOML parser
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* A packrat parser generated by PackCC 2.0.0 */ | |
#include "general.h" | |
#ifdef _MSC_VER | |
#undef _CRT_SECURE_NO_WARNINGS | |
#define _CRT_SECURE_NO_WARNINGS | |
#endif /* _MSC_VER */ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#ifndef _MSC_VER | |
#if defined __GNUC__ && defined _WIN32 /* MinGW */ | |
#ifndef PCC_USE_SYSTEM_STRNLEN | |
#define strnlen(str, maxlen) pcc_strnlen(str, maxlen) | |
static size_t pcc_strnlen(const char *str, size_t maxlen) { | |
size_t i; | |
for (i = 0; i < maxlen && str[i]; i++); | |
return i; | |
} | |
#endif /* !PCC_USE_SYSTEM_STRNLEN */ | |
#endif /* defined __GNUC__ && defined _WIN32 */ | |
#endif /* !_MSC_VER */ | |
#include "toml.h" | |
#include "toml_pre.h" | |
#if !defined __has_attribute || defined _MSC_VER | |
#define __attribute__(x) | |
#endif | |
#ifdef _MSC_VER | |
#define MARK_FUNC_AS_USED __pragma(warning(suppress:4505)) | |
#else | |
#define MARK_FUNC_AS_USED __attribute__((__unused__)) | |
#endif | |
#ifdef _MSC_VER | |
#define MARK_VAR_AS_USED __pragma(warning(suppress:4189)) | |
#else | |
#define MARK_VAR_AS_USED __attribute__((__unused__)) | |
#endif | |
#ifndef PCC_BUFFER_MIN_SIZE | |
#define PCC_BUFFER_MIN_SIZE 256 | |
#endif /* !PCC_BUFFER_MIN_SIZE */ | |
#ifndef PCC_ARRAY_MIN_SIZE | |
#define PCC_ARRAY_MIN_SIZE 2 | |
#endif /* !PCC_ARRAY_MIN_SIZE */ | |
#ifndef PCC_POOL_MIN_SIZE | |
#define PCC_POOL_MIN_SIZE 65536 | |
#endif /* !PCC_POOL_MIN_SIZE */ | |
#define PCC_DBG_EVALUATE 0 | |
#define PCC_DBG_MATCH 1 | |
#define PCC_DBG_NOMATCH 2 | |
#define PCC_VOID_VALUE (~(size_t)0) | |
typedef enum pcc_bool_tag { | |
PCC_FALSE = 0, | |
PCC_TRUE | |
} pcc_bool_t; | |
typedef struct pcc_char_array_tag { | |
char *buf; | |
size_t max; | |
size_t len; | |
} pcc_char_array_t; | |
typedef struct pcc_range_tag { | |
size_t start; | |
size_t end; | |
} pcc_range_t; | |
typedef int pcc_value_t; | |
typedef struct parserCtx *pcc_auxil_t; | |
typedef ptoml_context_t pcc_context_t; | |
typedef struct pcc_value_table_tag { | |
pcc_value_t *buf; | |
size_t max; | |
size_t len; | |
} pcc_value_table_t; | |
typedef struct pcc_value_refer_table_tag { | |
pcc_value_t **buf; | |
size_t max; | |
size_t len; | |
} pcc_value_refer_table_t; | |
typedef struct pcc_capture_tag { | |
pcc_range_t range; | |
char *string; /* mutable */ | |
} pcc_capture_t; | |
typedef struct pcc_capture_table_tag { | |
pcc_capture_t *buf; | |
size_t max; | |
size_t len; | |
} pcc_capture_table_t; | |
typedef struct pcc_capture_const_table_tag { | |
const pcc_capture_t **buf; | |
size_t max; | |
size_t len; | |
} pcc_capture_const_table_t; | |
typedef struct pcc_thunk_tag pcc_thunk_t; | |
typedef struct pcc_thunk_array_tag pcc_thunk_array_t; | |
typedef void (*pcc_action_t)(pcc_context_t *, pcc_thunk_t *, pcc_value_t *); | |
typedef enum pcc_thunk_type_tag { | |
PCC_THUNK_LEAF, | |
PCC_THUNK_NODE | |
} pcc_thunk_type_t; | |
typedef struct pcc_thunk_leaf_tag { | |
pcc_value_refer_table_t values; | |
pcc_capture_const_table_t capts; | |
pcc_capture_t capt0; | |
pcc_action_t action; | |
} pcc_thunk_leaf_t; | |
typedef struct pcc_thunk_node_tag { | |
const pcc_thunk_array_t *thunks; /* just a reference */ | |
pcc_value_t *value; /* just a reference */ | |
} pcc_thunk_node_t; | |
typedef union pcc_thunk_data_tag { | |
pcc_thunk_leaf_t leaf; | |
pcc_thunk_node_t node; | |
} pcc_thunk_data_t; | |
struct pcc_thunk_tag { | |
pcc_thunk_type_t type; | |
pcc_thunk_data_t data; | |
}; | |
struct pcc_thunk_array_tag { | |
pcc_thunk_t **buf; | |
size_t max; | |
size_t len; | |
}; | |
typedef struct pcc_thunk_chunk_tag { | |
pcc_value_table_t values; | |
pcc_capture_table_t capts; | |
pcc_thunk_array_t thunks; | |
size_t pos; /* the starting position in the character buffer */ | |
} pcc_thunk_chunk_t; | |
typedef struct pcc_lr_entry_tag pcc_lr_entry_t; | |
typedef enum pcc_lr_answer_type_tag { | |
PCC_LR_ANSWER_LR, | |
PCC_LR_ANSWER_CHUNK | |
} pcc_lr_answer_type_t; | |
typedef union pcc_lr_answer_data_tag { | |
pcc_lr_entry_t *lr; | |
pcc_thunk_chunk_t *chunk; | |
} pcc_lr_answer_data_t; | |
typedef struct pcc_lr_answer_tag pcc_lr_answer_t; | |
struct pcc_lr_answer_tag { | |
pcc_lr_answer_type_t type; | |
pcc_lr_answer_data_t data; | |
size_t pos; /* the absolute position in the input */ | |
pcc_lr_answer_t *hold; | |
}; | |
typedef pcc_thunk_chunk_t *(*pcc_rule_t)(pcc_context_t *); | |
typedef struct pcc_rule_set_tag { | |
pcc_rule_t *buf; | |
size_t max; | |
size_t len; | |
} pcc_rule_set_t; | |
typedef struct pcc_lr_head_tag pcc_lr_head_t; | |
struct pcc_lr_head_tag { | |
pcc_rule_t rule; | |
pcc_rule_set_t invol; | |
pcc_rule_set_t eval; | |
pcc_lr_head_t *hold; | |
}; | |
typedef struct pcc_lr_memo_tag { | |
pcc_rule_t rule; | |
pcc_lr_answer_t *answer; | |
} pcc_lr_memo_t; | |
typedef struct pcc_lr_memo_map_tag { | |
pcc_lr_memo_t *buf; | |
size_t max; | |
size_t len; | |
} pcc_lr_memo_map_t; | |
typedef struct pcc_lr_table_entry_tag { | |
pcc_lr_head_t *head; /* just a reference */ | |
pcc_lr_memo_map_t memos; | |
pcc_lr_answer_t *hold_a; | |
pcc_lr_head_t *hold_h; | |
} pcc_lr_table_entry_t; | |
typedef struct pcc_lr_table_tag { | |
pcc_lr_table_entry_t **buf; | |
size_t max; | |
size_t len; | |
size_t ofs; | |
} pcc_lr_table_t; | |
struct pcc_lr_entry_tag { | |
pcc_rule_t rule; | |
pcc_thunk_chunk_t *seed; /* just a reference */ | |
pcc_lr_head_t *head; /* just a reference */ | |
}; | |
typedef struct pcc_lr_stack_tag { | |
pcc_lr_entry_t **buf; | |
size_t max; | |
size_t len; | |
} pcc_lr_stack_t; | |
typedef struct pcc_memory_entry_tag pcc_memory_entry_t; | |
typedef struct pcc_memory_pool_tag pcc_memory_pool_t; | |
struct pcc_memory_entry_tag { | |
pcc_memory_entry_t *next; | |
}; | |
struct pcc_memory_pool_tag { | |
pcc_memory_pool_t *next; | |
size_t allocated; | |
size_t unused; | |
}; | |
typedef struct pcc_memory_recycler_tag { | |
pcc_memory_pool_t *pool_list; | |
pcc_memory_entry_t *entry_list; | |
size_t element_size; | |
} pcc_memory_recycler_t; | |
struct ptoml_context_tag { | |
size_t pos; /* the position in the input of the first character currently buffered */ | |
size_t cur; /* the current parsing position in the character buffer */ | |
size_t level; | |
pcc_char_array_t buffer; | |
pcc_lr_table_t lrtable; | |
pcc_lr_stack_t lrstack; | |
pcc_thunk_array_t thunks; | |
pcc_auxil_t auxil; | |
pcc_memory_recycler_t thunk_chunk_recycler; | |
pcc_memory_recycler_t lr_head_recycler; | |
pcc_memory_recycler_t lr_answer_recycler; | |
}; | |
#ifndef PCC_ERROR | |
#define PCC_ERROR(auxil) pcc_error() | |
MARK_FUNC_AS_USED | |
static void pcc_error(void) { | |
fprintf(stderr, "Syntax error\n"); | |
exit(1); | |
} | |
#endif /* !PCC_ERROR */ | |
#ifndef PCC_GETCHAR | |
#define PCC_GETCHAR(auxil) getchar() | |
#endif /* !PCC_GETCHAR */ | |
#ifndef PCC_MALLOC | |
#define PCC_MALLOC(auxil, size) pcc_malloc_e(size) | |
static void *pcc_malloc_e(size_t size) { | |
void *const p = malloc(size); | |
if (p == NULL) { | |
fprintf(stderr, "Out of memory\n"); | |
exit(1); | |
} | |
return p; | |
} | |
#endif /* !PCC_MALLOC */ | |
#ifndef PCC_REALLOC | |
#define PCC_REALLOC(auxil, ptr, size) pcc_realloc_e(ptr, size) | |
static void *pcc_realloc_e(void *ptr, size_t size) { | |
void *const p = realloc(ptr, size); | |
if (p == NULL) { | |
fprintf(stderr, "Out of memory\n"); | |
exit(1); | |
} | |
return p; | |
} | |
#endif /* !PCC_REALLOC */ | |
#ifndef PCC_FREE | |
#define PCC_FREE(auxil, ptr) free(ptr) | |
#endif /* !PCC_FREE */ | |
#ifndef PCC_DEBUG | |
#define PCC_DEBUG(auxil, event, rule, level, pos, buffer, length) ((void)0) | |
#endif /* !PCC_DEBUG */ | |
static char *pcc_strndup_e(pcc_auxil_t auxil, const char *str, size_t len) { | |
const size_t m = strnlen(str, len); | |
char *const s = (char *)PCC_MALLOC(auxil, m + 1); | |
memcpy(s, str, m); | |
s[m] = '\0'; | |
return s; | |
} | |
static void pcc_char_array__init(pcc_auxil_t auxil, pcc_char_array_t *array) { | |
array->len = 0; | |
array->max = 0; | |
array->buf = NULL; | |
} | |
static void pcc_char_array__add(pcc_auxil_t auxil, pcc_char_array_t *array, char ch) { | |
if (array->max <= array->len) { | |
const size_t n = array->len + 1; | |
size_t m = array->max; | |
if (m == 0) m = PCC_BUFFER_MIN_SIZE; | |
while (m < n && m != 0) m <<= 1; | |
if (m == 0) m = n; | |
array->buf = (char *)PCC_REALLOC(auxil, array->buf, m); | |
array->max = m; | |
} | |
array->buf[array->len++] = ch; | |
} | |
static void pcc_char_array__term(pcc_auxil_t auxil, pcc_char_array_t *array) { | |
PCC_FREE(auxil, array->buf); | |
} | |
static void pcc_value_table__init(pcc_auxil_t auxil, pcc_value_table_t *table) { | |
table->len = 0; | |
table->max = 0; | |
table->buf = NULL; | |
} | |
MARK_FUNC_AS_USED | |
static void pcc_value_table__resize(pcc_auxil_t auxil, pcc_value_table_t *table, size_t len) { | |
if (table->max < len) { | |
size_t m = table->max; | |
if (m == 0) m = PCC_ARRAY_MIN_SIZE; | |
while (m < len && m != 0) m <<= 1; | |
if (m == 0) m = len; | |
table->buf = (pcc_value_t *)PCC_REALLOC(auxil, table->buf, sizeof(pcc_value_t) * m); | |
table->max = m; | |
} | |
table->len = len; | |
} | |
MARK_FUNC_AS_USED | |
static void pcc_value_table__clear(pcc_auxil_t auxil, pcc_value_table_t *table) { | |
memset(table->buf, 0, sizeof(pcc_value_t) * table->len); | |
} | |
static void pcc_value_table__term(pcc_auxil_t auxil, pcc_value_table_t *table) { | |
PCC_FREE(auxil, table->buf); | |
} | |
static void pcc_value_refer_table__init(pcc_auxil_t auxil, pcc_value_refer_table_t *table) { | |
table->len = 0; | |
table->max = 0; | |
table->buf = NULL; | |
} | |
static void pcc_value_refer_table__resize(pcc_auxil_t auxil, pcc_value_refer_table_t *table, size_t len) { | |
size_t i; | |
if (table->max < len) { | |
size_t m = table->max; | |
if (m == 0) m = PCC_ARRAY_MIN_SIZE; | |
while (m < len && m != 0) m <<= 1; | |
if (m == 0) m = len; | |
table->buf = (pcc_value_t **)PCC_REALLOC(auxil, table->buf, sizeof(pcc_value_t *) * m); | |
table->max = m; | |
} | |
for (i = table->len; i < len; i++) table->buf[i] = NULL; | |
table->len = len; | |
} | |
static void pcc_value_refer_table__term(pcc_auxil_t auxil, pcc_value_refer_table_t *table) { | |
PCC_FREE(auxil, table->buf); | |
} | |
static void pcc_capture_table__init(pcc_auxil_t auxil, pcc_capture_table_t *table) { | |
table->len = 0; | |
table->max = 0; | |
table->buf = NULL; | |
} | |
MARK_FUNC_AS_USED | |
static void pcc_capture_table__resize(pcc_auxil_t auxil, pcc_capture_table_t *table, size_t len) { | |
size_t i; | |
for (i = len; i < table->len; i++) PCC_FREE(auxil, table->buf[i].string); | |
if (table->max < len) { | |
size_t m = table->max; | |
if (m == 0) m = PCC_ARRAY_MIN_SIZE; | |
while (m < len && m != 0) m <<= 1; | |
if (m == 0) m = len; | |
table->buf = (pcc_capture_t *)PCC_REALLOC(auxil, table->buf, sizeof(pcc_capture_t) * m); | |
table->max = m; | |
} | |
for (i = table->len; i < len; i++) { | |
table->buf[i].range.start = 0; | |
table->buf[i].range.end = 0; | |
table->buf[i].string = NULL; | |
} | |
table->len = len; | |
} | |
static void pcc_capture_table__term(pcc_auxil_t auxil, pcc_capture_table_t *table) { | |
while (table->len > 0) { | |
table->len--; | |
PCC_FREE(auxil, table->buf[table->len].string); | |
} | |
PCC_FREE(auxil, table->buf); | |
} | |
static void pcc_capture_const_table__init(pcc_auxil_t auxil, pcc_capture_const_table_t *table) { | |
table->len = 0; | |
table->max = 0; | |
table->buf = NULL; | |
} | |
static void pcc_capture_const_table__resize(pcc_auxil_t auxil, pcc_capture_const_table_t *table, size_t len) { | |
size_t i; | |
if (table->max < len) { | |
size_t m = table->max; | |
if (m == 0) m = PCC_ARRAY_MIN_SIZE; | |
while (m < len && m != 0) m <<= 1; | |
if (m == 0) m = len; | |
table->buf = (const pcc_capture_t **)PCC_REALLOC(auxil, (pcc_capture_t **)table->buf, sizeof(const pcc_capture_t *) * m); | |
table->max = m; | |
} | |
for (i = table->len; i < len; i++) table->buf[i] = NULL; | |
table->len = len; | |
} | |
static void pcc_capture_const_table__term(pcc_auxil_t auxil, pcc_capture_const_table_t *table) { | |
PCC_FREE(auxil, (void *)table->buf); | |
} | |
MARK_FUNC_AS_USED | |
static pcc_thunk_t *pcc_thunk__create_leaf(pcc_auxil_t auxil, pcc_action_t action, size_t valuec, size_t captc) { | |
pcc_thunk_t *const thunk = (pcc_thunk_t *)PCC_MALLOC(auxil, sizeof(pcc_thunk_t)); | |
thunk->type = PCC_THUNK_LEAF; | |
pcc_value_refer_table__init(auxil, &thunk->data.leaf.values); | |
pcc_value_refer_table__resize(auxil, &thunk->data.leaf.values, valuec); | |
pcc_capture_const_table__init(auxil, &thunk->data.leaf.capts); | |
pcc_capture_const_table__resize(auxil, &thunk->data.leaf.capts, captc); | |
thunk->data.leaf.capt0.range.start = 0; | |
thunk->data.leaf.capt0.range.end = 0; | |
thunk->data.leaf.capt0.string = NULL; | |
thunk->data.leaf.action = action; | |
return thunk; | |
} | |
static pcc_thunk_t *pcc_thunk__create_node(pcc_auxil_t auxil, const pcc_thunk_array_t *thunks, pcc_value_t *value) { | |
pcc_thunk_t *const thunk = (pcc_thunk_t *)PCC_MALLOC(auxil, sizeof(pcc_thunk_t)); | |
thunk->type = PCC_THUNK_NODE; | |
thunk->data.node.thunks = thunks; | |
thunk->data.node.value = value; | |
return thunk; | |
} | |
static void pcc_thunk__destroy(pcc_auxil_t auxil, pcc_thunk_t *thunk) { | |
if (thunk == NULL) return; | |
switch (thunk->type) { | |
case PCC_THUNK_LEAF: | |
PCC_FREE(auxil, thunk->data.leaf.capt0.string); | |
pcc_capture_const_table__term(auxil, &thunk->data.leaf.capts); | |
pcc_value_refer_table__term(auxil, &thunk->data.leaf.values); | |
break; | |
case PCC_THUNK_NODE: | |
break; | |
default: /* unknown */ | |
break; | |
} | |
PCC_FREE(auxil, thunk); | |
} | |
static void pcc_thunk_array__init(pcc_auxil_t auxil, pcc_thunk_array_t *array) { | |
array->len = 0; | |
array->max = 0; | |
array->buf = NULL; | |
} | |
static void pcc_thunk_array__add(pcc_auxil_t auxil, pcc_thunk_array_t *array, pcc_thunk_t *thunk) { | |
if (array->max <= array->len) { | |
const size_t n = array->len + 1; | |
size_t m = array->max; | |
if (m == 0) m = PCC_ARRAY_MIN_SIZE; | |
while (m < n && m != 0) m <<= 1; | |
if (m == 0) m = n; | |
array->buf = (pcc_thunk_t **)PCC_REALLOC(auxil, array->buf, sizeof(pcc_thunk_t *) * m); | |
array->max = m; | |
} | |
array->buf[array->len++] = thunk; | |
} | |
static void pcc_thunk_array__revert(pcc_auxil_t auxil, pcc_thunk_array_t *array, size_t len) { | |
while (array->len > len) { | |
array->len--; | |
pcc_thunk__destroy(auxil, array->buf[array->len]); | |
} | |
} | |
static void pcc_thunk_array__term(pcc_auxil_t auxil, pcc_thunk_array_t *array) { | |
while (array->len > 0) { | |
array->len--; | |
pcc_thunk__destroy(auxil, array->buf[array->len]); | |
} | |
PCC_FREE(auxil, array->buf); | |
} | |
static void pcc_memory_recycler__init(pcc_auxil_t auxil, pcc_memory_recycler_t *recycler, size_t element_size) { | |
recycler->pool_list = NULL; | |
recycler->entry_list = NULL; | |
recycler->element_size = element_size; | |
} | |
static void *pcc_memory_recycler__supply(pcc_auxil_t auxil, pcc_memory_recycler_t *recycler) { | |
if (recycler->entry_list) { | |
pcc_memory_entry_t *const tmp = recycler->entry_list; | |
recycler->entry_list = tmp->next; | |
return tmp; | |
} | |
if (!recycler->pool_list || recycler->pool_list->unused == 0) { | |
size_t size = PCC_POOL_MIN_SIZE; | |
if (recycler->pool_list) { | |
size = recycler->pool_list->allocated << 1; | |
if (size == 0) size = recycler->pool_list->allocated; | |
} | |
{ | |
pcc_memory_pool_t *const pool = (pcc_memory_pool_t *)PCC_MALLOC( | |
auxil, sizeof(pcc_memory_pool_t) + recycler->element_size * size | |
); | |
pool->allocated = size; | |
pool->unused = size; | |
pool->next = recycler->pool_list; | |
recycler->pool_list = pool; | |
} | |
} | |
recycler->pool_list->unused--; | |
return (char *)recycler->pool_list + sizeof(pcc_memory_pool_t) + recycler->element_size * recycler->pool_list->unused; | |
} | |
static void pcc_memory_recycler__recycle(pcc_auxil_t auxil, pcc_memory_recycler_t *recycler, void *ptr) { | |
pcc_memory_entry_t *const tmp = (pcc_memory_entry_t *)ptr; | |
tmp->next = recycler->entry_list; | |
recycler->entry_list = tmp; | |
} | |
static void pcc_memory_recycler__term(pcc_auxil_t auxil, pcc_memory_recycler_t *recycler) { | |
while (recycler->pool_list) { | |
pcc_memory_pool_t *const tmp = recycler->pool_list; | |
recycler->pool_list = tmp->next; | |
PCC_FREE(auxil, tmp); | |
} | |
} | |
MARK_FUNC_AS_USED | |
static pcc_thunk_chunk_t *pcc_thunk_chunk__create(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = (pcc_thunk_chunk_t *)pcc_memory_recycler__supply(ctx->auxil, &ctx->thunk_chunk_recycler); | |
pcc_value_table__init(ctx->auxil, &chunk->values); | |
pcc_capture_table__init(ctx->auxil, &chunk->capts); | |
pcc_thunk_array__init(ctx->auxil, &chunk->thunks); | |
chunk->pos = 0; | |
return chunk; | |
} | |
static void pcc_thunk_chunk__destroy(pcc_context_t *ctx, pcc_thunk_chunk_t *chunk) { | |
if (chunk == NULL) return; | |
pcc_thunk_array__term(ctx->auxil, &chunk->thunks); | |
pcc_capture_table__term(ctx->auxil, &chunk->capts); | |
pcc_value_table__term(ctx->auxil, &chunk->values); | |
pcc_memory_recycler__recycle(ctx->auxil, &ctx->thunk_chunk_recycler, chunk); | |
} | |
static void pcc_rule_set__init(pcc_auxil_t auxil, pcc_rule_set_t *set) { | |
set->len = 0; | |
set->max = 0; | |
set->buf = NULL; | |
} | |
static size_t pcc_rule_set__index(pcc_auxil_t auxil, const pcc_rule_set_t *set, pcc_rule_t rule) { | |
size_t i; | |
for (i = 0; i < set->len; i++) { | |
if (set->buf[i] == rule) return i; | |
} | |
return PCC_VOID_VALUE; | |
} | |
static pcc_bool_t pcc_rule_set__add(pcc_auxil_t auxil, pcc_rule_set_t *set, pcc_rule_t rule) { | |
const size_t i = pcc_rule_set__index(auxil, set, rule); | |
if (i != PCC_VOID_VALUE) return PCC_FALSE; | |
if (set->max <= set->len) { | |
const size_t n = set->len + 1; | |
size_t m = set->max; | |
if (m == 0) m = PCC_ARRAY_MIN_SIZE; | |
while (m < n && m != 0) m <<= 1; | |
if (m == 0) m = n; | |
set->buf = (pcc_rule_t *)PCC_REALLOC(auxil, set->buf, sizeof(pcc_rule_t) * m); | |
set->max = m; | |
} | |
set->buf[set->len++] = rule; | |
return PCC_TRUE; | |
} | |
static pcc_bool_t pcc_rule_set__remove(pcc_auxil_t auxil, pcc_rule_set_t *set, pcc_rule_t rule) { | |
const size_t i = pcc_rule_set__index(auxil, set, rule); | |
if (i == PCC_VOID_VALUE) return PCC_FALSE; | |
memmove(set->buf + i, set->buf + (i + 1), sizeof(pcc_rule_t) * (set->len - (i + 1))); | |
return PCC_TRUE; | |
} | |
static void pcc_rule_set__clear(pcc_auxil_t auxil, pcc_rule_set_t *set) { | |
set->len = 0; | |
} | |
static void pcc_rule_set__copy(pcc_auxil_t auxil, pcc_rule_set_t *set, const pcc_rule_set_t *src) { | |
size_t i; | |
pcc_rule_set__clear(auxil, set); | |
for (i = 0; i < src->len; i++) { | |
pcc_rule_set__add(auxil, set, src->buf[i]); | |
} | |
} | |
static void pcc_rule_set__term(pcc_auxil_t auxil, pcc_rule_set_t *set) { | |
PCC_FREE(auxil, set->buf); | |
} | |
static pcc_lr_head_t *pcc_lr_head__create(pcc_context_t *ctx, pcc_rule_t rule) { | |
pcc_lr_head_t *const head = (pcc_lr_head_t *)pcc_memory_recycler__supply(ctx->auxil, &ctx->lr_head_recycler); | |
head->rule = rule; | |
pcc_rule_set__init(ctx->auxil, &head->invol); | |
pcc_rule_set__init(ctx->auxil, &head->eval); | |
head->hold = NULL; | |
return head; | |
} | |
static void pcc_lr_head__destroy(pcc_context_t *ctx, pcc_lr_head_t *head) { | |
if (head == NULL) return; | |
pcc_lr_head__destroy(ctx, head->hold); | |
pcc_rule_set__term(ctx->auxil, &head->eval); | |
pcc_rule_set__term(ctx->auxil, &head->invol); | |
pcc_memory_recycler__recycle(ctx->auxil, &ctx->lr_head_recycler, head); | |
} | |
static void pcc_lr_entry__destroy(pcc_auxil_t auxil, pcc_lr_entry_t *lr); | |
static pcc_lr_answer_t *pcc_lr_answer__create(pcc_context_t *ctx, pcc_lr_answer_type_t type, size_t pos) { | |
pcc_lr_answer_t *answer = (pcc_lr_answer_t *)pcc_memory_recycler__supply(ctx->auxil, &ctx->lr_answer_recycler); | |
answer->type = type; | |
answer->pos = pos; | |
answer->hold = NULL; | |
switch (answer->type) { | |
case PCC_LR_ANSWER_LR: | |
answer->data.lr = NULL; | |
break; | |
case PCC_LR_ANSWER_CHUNK: | |
answer->data.chunk = NULL; | |
break; | |
default: /* unknown */ | |
PCC_FREE(ctx->auxil, answer); | |
answer = NULL; | |
} | |
return answer; | |
} | |
static void pcc_lr_answer__set_chunk(pcc_context_t *ctx, pcc_lr_answer_t *answer, pcc_thunk_chunk_t *chunk) { | |
pcc_lr_answer_t *const a = pcc_lr_answer__create(ctx, answer->type, answer->pos); | |
switch (answer->type) { | |
case PCC_LR_ANSWER_LR: | |
a->data.lr = answer->data.lr; | |
break; | |
case PCC_LR_ANSWER_CHUNK: | |
a->data.chunk = answer->data.chunk; | |
break; | |
default: /* unknown */ | |
break; | |
} | |
a->hold = answer->hold; | |
answer->hold = a; | |
answer->type = PCC_LR_ANSWER_CHUNK; | |
answer->data.chunk = chunk; | |
} | |
static void pcc_lr_answer__destroy(pcc_context_t *ctx, pcc_lr_answer_t *answer) { | |
while (answer != NULL) { | |
pcc_lr_answer_t *const a = answer->hold; | |
switch (answer->type) { | |
case PCC_LR_ANSWER_LR: | |
pcc_lr_entry__destroy(ctx->auxil, answer->data.lr); | |
break; | |
case PCC_LR_ANSWER_CHUNK: | |
pcc_thunk_chunk__destroy(ctx, answer->data.chunk); | |
break; | |
default: /* unknown */ | |
break; | |
} | |
pcc_memory_recycler__recycle(ctx->auxil, &ctx->lr_answer_recycler, answer); | |
answer = a; | |
} | |
} | |
static void pcc_lr_memo_map__init(pcc_auxil_t auxil, pcc_lr_memo_map_t *map) { | |
map->len = 0; | |
map->max = 0; | |
map->buf = NULL; | |
} | |
static size_t pcc_lr_memo_map__index(pcc_context_t *ctx, pcc_lr_memo_map_t *map, pcc_rule_t rule) { | |
size_t i; | |
for (i = 0; i < map->len; i++) { | |
if (map->buf[i].rule == rule) return i; | |
} | |
return PCC_VOID_VALUE; | |
} | |
static void pcc_lr_memo_map__put(pcc_context_t *ctx, pcc_lr_memo_map_t *map, pcc_rule_t rule, pcc_lr_answer_t *answer) { | |
const size_t i = pcc_lr_memo_map__index(ctx, map, rule); | |
if (i != PCC_VOID_VALUE) { | |
pcc_lr_answer__destroy(ctx, map->buf[i].answer); | |
map->buf[i].answer = answer; | |
} | |
else { | |
if (map->max <= map->len) { | |
const size_t n = map->len + 1; | |
size_t m = map->max; | |
if (m == 0) m = PCC_ARRAY_MIN_SIZE; | |
while (m < n && m != 0) m <<= 1; | |
if (m == 0) m = n; | |
map->buf = (pcc_lr_memo_t *)PCC_REALLOC(ctx->auxil, map->buf, sizeof(pcc_lr_memo_t) * m); | |
map->max = m; | |
} | |
map->buf[map->len].rule = rule; | |
map->buf[map->len].answer = answer; | |
map->len++; | |
} | |
} | |
static pcc_lr_answer_t *pcc_lr_memo_map__get(pcc_context_t *ctx, pcc_lr_memo_map_t *map, pcc_rule_t rule) { | |
const size_t i = pcc_lr_memo_map__index(ctx, map, rule); | |
return (i != PCC_VOID_VALUE) ? map->buf[i].answer : NULL; | |
} | |
static void pcc_lr_memo_map__term(pcc_context_t *ctx, pcc_lr_memo_map_t *map) { | |
while (map->len > 0) { | |
map->len--; | |
pcc_lr_answer__destroy(ctx, map->buf[map->len].answer); | |
} | |
PCC_FREE(ctx->auxil, map->buf); | |
} | |
static pcc_lr_table_entry_t *pcc_lr_table_entry__create(pcc_context_t *ctx) { | |
pcc_lr_table_entry_t *const entry = (pcc_lr_table_entry_t *)PCC_MALLOC(ctx->auxil, sizeof(pcc_lr_table_entry_t)); | |
entry->head = NULL; | |
pcc_lr_memo_map__init(ctx->auxil, &entry->memos); | |
entry->hold_a = NULL; | |
entry->hold_h = NULL; | |
return entry; | |
} | |
static void pcc_lr_table_entry__destroy(pcc_context_t *ctx, pcc_lr_table_entry_t *entry) { | |
if (entry == NULL) return; | |
pcc_lr_head__destroy(ctx, entry->hold_h); | |
pcc_lr_answer__destroy(ctx, entry->hold_a); | |
pcc_lr_memo_map__term(ctx, &entry->memos); | |
PCC_FREE(ctx->auxil, entry); | |
} | |
static void pcc_lr_table__init(pcc_auxil_t auxil, pcc_lr_table_t *table) { | |
table->ofs = 0; | |
table->len = 0; | |
table->max = 0; | |
table->buf = NULL; | |
} | |
static void pcc_lr_table__resize(pcc_context_t *ctx, pcc_lr_table_t *table, size_t len) { | |
size_t i; | |
for (i = len; i < table->len; i++) pcc_lr_table_entry__destroy(ctx, table->buf[i]); | |
if (table->max < len) { | |
size_t m = table->max; | |
if (m == 0) m = PCC_ARRAY_MIN_SIZE; | |
while (m < len && m != 0) m <<= 1; | |
if (m == 0) m = len; | |
table->buf = (pcc_lr_table_entry_t **)PCC_REALLOC(ctx->auxil, table->buf, sizeof(pcc_lr_table_entry_t *) * m); | |
table->max = m; | |
} | |
for (i = table->len; i < len; i++) table->buf[i] = NULL; | |
table->len = len; | |
} | |
static void pcc_lr_table__set_head(pcc_context_t *ctx, pcc_lr_table_t *table, size_t index, pcc_lr_head_t *head) { | |
index += table->ofs; | |
if (index >= table->len) pcc_lr_table__resize(ctx, table, index + 1); | |
if (table->buf[index] == NULL) table->buf[index] = pcc_lr_table_entry__create(ctx); | |
table->buf[index]->head = head; | |
} | |
static void pcc_lr_table__hold_head(pcc_context_t *ctx, pcc_lr_table_t *table, size_t index, pcc_lr_head_t *head) { | |
index += table->ofs; | |
if (index >= table->len) pcc_lr_table__resize(ctx, table, index + 1); | |
if (table->buf[index] == NULL) table->buf[index] = pcc_lr_table_entry__create(ctx); | |
head->hold = table->buf[index]->hold_h; | |
table->buf[index]->hold_h = head; | |
} | |
static void pcc_lr_table__set_answer(pcc_context_t *ctx, pcc_lr_table_t *table, size_t index, pcc_rule_t rule, pcc_lr_answer_t *answer) { | |
index += table->ofs; | |
if (index >= table->len) pcc_lr_table__resize(ctx, table, index + 1); | |
if (table->buf[index] == NULL) table->buf[index] = pcc_lr_table_entry__create(ctx); | |
pcc_lr_memo_map__put(ctx, &table->buf[index]->memos, rule, answer); | |
} | |
static void pcc_lr_table__hold_answer(pcc_context_t *ctx, pcc_lr_table_t *table, size_t index, pcc_lr_answer_t *answer) { | |
index += table->ofs; | |
if (index >= table->len) pcc_lr_table__resize(ctx, table, index + 1); | |
if (table->buf[index] == NULL) table->buf[index] = pcc_lr_table_entry__create(ctx); | |
answer->hold = table->buf[index]->hold_a; | |
table->buf[index]->hold_a = answer; | |
} | |
static pcc_lr_head_t *pcc_lr_table__get_head(pcc_context_t *ctx, pcc_lr_table_t *table, size_t index) { | |
index += table->ofs; | |
if (index >= table->len || table->buf[index] == NULL) return NULL; | |
return table->buf[index]->head; | |
} | |
static pcc_lr_answer_t *pcc_lr_table__get_answer(pcc_context_t *ctx, pcc_lr_table_t *table, size_t index, pcc_rule_t rule) { | |
index += table->ofs; | |
if (index >= table->len || table->buf[index] == NULL) return NULL; | |
return pcc_lr_memo_map__get(ctx, &table->buf[index]->memos, rule); | |
} | |
static void pcc_lr_table__shift(pcc_context_t *ctx, pcc_lr_table_t *table, size_t count) { | |
size_t i; | |
if (count > table->len - table->ofs) count = table->len - table->ofs; | |
for (i = 0; i < count; i++) pcc_lr_table_entry__destroy(ctx, table->buf[table->ofs++]); | |
if (table->ofs > (table->max >> 1)) { | |
memmove(table->buf, table->buf + table->ofs, sizeof(pcc_lr_table_entry_t *) * (table->len - table->ofs)); | |
table->len -= table->ofs; | |
table->ofs = 0; | |
} | |
} | |
static void pcc_lr_table__term(pcc_context_t *ctx, pcc_lr_table_t *table) { | |
while (table->len > table->ofs) { | |
table->len--; | |
pcc_lr_table_entry__destroy(ctx, table->buf[table->len]); | |
} | |
PCC_FREE(ctx->auxil, table->buf); | |
} | |
static pcc_lr_entry_t *pcc_lr_entry__create(pcc_auxil_t auxil, pcc_rule_t rule) { | |
pcc_lr_entry_t *const lr = (pcc_lr_entry_t *)PCC_MALLOC(auxil, sizeof(pcc_lr_entry_t)); | |
lr->rule = rule; | |
lr->seed = NULL; | |
lr->head = NULL; | |
return lr; | |
} | |
static void pcc_lr_entry__destroy(pcc_auxil_t auxil, pcc_lr_entry_t *lr) { | |
PCC_FREE(auxil, lr); | |
} | |
static void pcc_lr_stack__init(pcc_auxil_t auxil, pcc_lr_stack_t *stack) { | |
stack->len = 0; | |
stack->max = 0; | |
stack->buf = NULL; | |
} | |
static void pcc_lr_stack__push(pcc_auxil_t auxil, pcc_lr_stack_t *stack, pcc_lr_entry_t *lr) { | |
if (stack->max <= stack->len) { | |
const size_t n = stack->len + 1; | |
size_t m = stack->max; | |
if (m == 0) m = PCC_ARRAY_MIN_SIZE; | |
while (m < n && m != 0) m <<= 1; | |
if (m == 0) m = n; | |
stack->buf = (pcc_lr_entry_t **)PCC_REALLOC(auxil, stack->buf, sizeof(pcc_lr_entry_t *) * m); | |
stack->max = m; | |
} | |
stack->buf[stack->len++] = lr; | |
} | |
static pcc_lr_entry_t *pcc_lr_stack__pop(pcc_auxil_t auxil, pcc_lr_stack_t *stack) { | |
return stack->buf[--stack->len]; | |
} | |
static void pcc_lr_stack__term(pcc_auxil_t auxil, pcc_lr_stack_t *stack) { | |
PCC_FREE(auxil, stack->buf); | |
} | |
static pcc_context_t *pcc_context__create(pcc_auxil_t auxil) { | |
pcc_context_t *const ctx = (pcc_context_t *)PCC_MALLOC(auxil, sizeof(pcc_context_t)); | |
ctx->pos = 0; | |
ctx->cur = 0; | |
ctx->level = 0; | |
pcc_char_array__init(auxil, &ctx->buffer); | |
pcc_lr_table__init(auxil, &ctx->lrtable); | |
pcc_lr_stack__init(auxil, &ctx->lrstack); | |
pcc_thunk_array__init(auxil, &ctx->thunks); | |
pcc_memory_recycler__init(auxil, &ctx->thunk_chunk_recycler, sizeof(pcc_thunk_chunk_t)); | |
pcc_memory_recycler__init(auxil, &ctx->lr_head_recycler, sizeof(pcc_lr_head_t)); | |
pcc_memory_recycler__init(auxil, &ctx->lr_answer_recycler, sizeof(pcc_lr_answer_t)); | |
ctx->auxil = auxil; | |
return ctx; | |
} | |
static void pcc_context__destroy(pcc_context_t *ctx) { | |
if (ctx == NULL) return; | |
pcc_thunk_array__term(ctx->auxil, &ctx->thunks); | |
pcc_lr_stack__term(ctx->auxil, &ctx->lrstack); | |
pcc_lr_table__term(ctx, &ctx->lrtable); | |
pcc_char_array__term(ctx->auxil, &ctx->buffer); | |
pcc_memory_recycler__term(ctx->auxil, &ctx->thunk_chunk_recycler); | |
pcc_memory_recycler__term(ctx->auxil, &ctx->lr_head_recycler); | |
pcc_memory_recycler__term(ctx->auxil, &ctx->lr_answer_recycler); | |
PCC_FREE(ctx->auxil, ctx); | |
} | |
static size_t pcc_refill_buffer(pcc_context_t *ctx, size_t num) { | |
if (ctx->buffer.len >= ctx->cur + num) return ctx->buffer.len - ctx->cur; | |
while (ctx->buffer.len < ctx->cur + num) { | |
const int c = PCC_GETCHAR(ctx->auxil); | |
if (c < 0) break; | |
pcc_char_array__add(ctx->auxil, &ctx->buffer, (char)c); | |
} | |
return ctx->buffer.len - ctx->cur; | |
} | |
MARK_FUNC_AS_USED | |
static void pcc_commit_buffer(pcc_context_t *ctx) { | |
memmove(ctx->buffer.buf, ctx->buffer.buf + ctx->cur, ctx->buffer.len - ctx->cur); | |
ctx->buffer.len -= ctx->cur; | |
ctx->pos += ctx->cur; | |
pcc_lr_table__shift(ctx, &ctx->lrtable, ctx->cur); | |
ctx->cur = 0; | |
} | |
MARK_FUNC_AS_USED | |
static const char *pcc_get_capture_string(pcc_context_t *ctx, const pcc_capture_t *capt) { | |
if (capt->string == NULL) | |
((pcc_capture_t *)capt)->string = | |
pcc_strndup_e(ctx->auxil, ctx->buffer.buf + capt->range.start, capt->range.end - capt->range.start); | |
return capt->string; | |
} | |
static size_t pcc_get_char_as_utf32(pcc_context_t *ctx, int *out) { /* with checking UTF-8 validity */ | |
int c, u; | |
size_t n; | |
if (pcc_refill_buffer(ctx, 1) < 1) return 0; | |
c = (int)(unsigned char)ctx->buffer.buf[ctx->cur]; | |
n = (c < 0x80) ? 1 : | |
((c & 0xe0) == 0xc0) ? 2 : | |
((c & 0xf0) == 0xe0) ? 3 : | |
((c & 0xf8) == 0xf0) ? 4 : 0; | |
if (n < 1) return 0; | |
if (pcc_refill_buffer(ctx, n) < n) return 0; | |
switch (n) { | |
case 1: | |
u = c; | |
break; | |
case 2: | |
u = c & 0x1f; | |
c = (int)(unsigned char)ctx->buffer.buf[ctx->cur + 1]; | |
if ((c & 0xc0) != 0x80) return 0; | |
u <<= 6; u |= c & 0x3f; | |
if (u < 0x80) return 0; | |
break; | |
case 3: | |
u = c & 0x0f; | |
c = (int)(unsigned char)ctx->buffer.buf[ctx->cur + 1]; | |
if ((c & 0xc0) != 0x80) return 0; | |
u <<= 6; u |= c & 0x3f; | |
c = (int)(unsigned char)ctx->buffer.buf[ctx->cur + 2]; | |
if ((c & 0xc0) != 0x80) return 0; | |
u <<= 6; u |= c & 0x3f; | |
if (u < 0x800) return 0; | |
break; | |
case 4: | |
u = c & 0x07; | |
c = (int)(unsigned char)ctx->buffer.buf[ctx->cur + 1]; | |
if ((c & 0xc0) != 0x80) return 0; | |
u <<= 6; u |= c & 0x3f; | |
c = (int)(unsigned char)ctx->buffer.buf[ctx->cur + 2]; | |
if ((c & 0xc0) != 0x80) return 0; | |
u <<= 6; u |= c & 0x3f; | |
c = (int)(unsigned char)ctx->buffer.buf[ctx->cur + 3]; | |
if ((c & 0xc0) != 0x80) return 0; | |
u <<= 6; u |= c & 0x3f; | |
if (u < 0x10000 || u > 0x10ffff) return 0; | |
break; | |
default: | |
return 0; | |
} | |
if (out) *out = u; | |
return n; | |
} | |
MARK_FUNC_AS_USED | |
static pcc_bool_t pcc_apply_rule(pcc_context_t *ctx, pcc_rule_t rule, pcc_thunk_array_t *thunks, pcc_value_t *value) { | |
static pcc_value_t null; | |
pcc_thunk_chunk_t *c = NULL; | |
const size_t p = ctx->pos + ctx->cur; | |
pcc_bool_t b = PCC_TRUE; | |
pcc_lr_answer_t *a = pcc_lr_table__get_answer(ctx, &ctx->lrtable, p, rule); | |
pcc_lr_head_t *h = pcc_lr_table__get_head(ctx, &ctx->lrtable, p); | |
if (h != NULL) { | |
if (a == NULL && rule != h->rule && pcc_rule_set__index(ctx->auxil, &h->invol, rule) == PCC_VOID_VALUE) { | |
b = PCC_FALSE; | |
c = NULL; | |
} | |
else if (pcc_rule_set__remove(ctx->auxil, &h->eval, rule)) { | |
b = PCC_FALSE; | |
c = rule(ctx); | |
a = pcc_lr_answer__create(ctx, PCC_LR_ANSWER_CHUNK, ctx->pos + ctx->cur); | |
a->data.chunk = c; | |
pcc_lr_table__hold_answer(ctx, &ctx->lrtable, p, a); | |
} | |
} | |
if (b) { | |
if (a != NULL) { | |
ctx->cur = a->pos - ctx->pos; | |
switch (a->type) { | |
case PCC_LR_ANSWER_LR: | |
if (a->data.lr->head == NULL) { | |
a->data.lr->head = pcc_lr_head__create(ctx, rule); | |
pcc_lr_table__hold_head(ctx, &ctx->lrtable, p, a->data.lr->head); | |
} | |
{ | |
size_t i = ctx->lrstack.len; | |
while (i > 0) { | |
i--; | |
if (ctx->lrstack.buf[i]->head == a->data.lr->head) break; | |
ctx->lrstack.buf[i]->head = a->data.lr->head; | |
pcc_rule_set__add(ctx->auxil, &a->data.lr->head->invol, ctx->lrstack.buf[i]->rule); | |
} | |
} | |
c = a->data.lr->seed; | |
break; | |
case PCC_LR_ANSWER_CHUNK: | |
c = a->data.chunk; | |
break; | |
default: /* unknown */ | |
break; | |
} | |
} | |
else { | |
pcc_lr_entry_t *const e = pcc_lr_entry__create(ctx->auxil, rule); | |
pcc_lr_stack__push(ctx->auxil, &ctx->lrstack, e); | |
a = pcc_lr_answer__create(ctx, PCC_LR_ANSWER_LR, p); | |
a->data.lr = e; | |
pcc_lr_table__set_answer(ctx, &ctx->lrtable, p, rule, a); | |
c = rule(ctx); | |
pcc_lr_stack__pop(ctx->auxil, &ctx->lrstack); | |
a->pos = ctx->pos + ctx->cur; | |
if (e->head == NULL) { | |
pcc_lr_answer__set_chunk(ctx, a, c); | |
} | |
else { | |
e->seed = c; | |
h = a->data.lr->head; | |
if (h->rule != rule) { | |
c = a->data.lr->seed; | |
a = pcc_lr_answer__create(ctx, PCC_LR_ANSWER_CHUNK, ctx->pos + ctx->cur); | |
a->data.chunk = c; | |
pcc_lr_table__hold_answer(ctx, &ctx->lrtable, p, a); | |
} | |
else { | |
pcc_lr_answer__set_chunk(ctx, a, a->data.lr->seed); | |
if (a->data.chunk == NULL) { | |
c = NULL; | |
} | |
else { | |
pcc_lr_table__set_head(ctx, &ctx->lrtable, p, h); | |
for (;;) { | |
ctx->cur = p - ctx->pos; | |
pcc_rule_set__copy(ctx->auxil, &h->eval, &h->invol); | |
c = rule(ctx); | |
if (c == NULL || ctx->pos + ctx->cur <= a->pos) break; | |
pcc_lr_answer__set_chunk(ctx, a, c); | |
a->pos = ctx->pos + ctx->cur; | |
} | |
pcc_thunk_chunk__destroy(ctx, c); | |
pcc_lr_table__set_head(ctx, &ctx->lrtable, p, NULL); | |
ctx->cur = a->pos - ctx->pos; | |
c = a->data.chunk; | |
} | |
} | |
} | |
} | |
} | |
if (c == NULL) return PCC_FALSE; | |
if (value == NULL) value = &null; | |
memset(value, 0, sizeof(pcc_value_t)); /* in case */ | |
pcc_thunk_array__add(ctx->auxil, thunks, pcc_thunk__create_node(ctx->auxil, &c->thunks, value)); | |
return PCC_TRUE; | |
} | |
MARK_FUNC_AS_USED | |
static void pcc_do_action(pcc_context_t *ctx, const pcc_thunk_array_t *thunks, pcc_value_t *value) { | |
size_t i; | |
for (i = 0; i < thunks->len; i++) { | |
pcc_thunk_t *const thunk = thunks->buf[i]; | |
switch (thunk->type) { | |
case PCC_THUNK_LEAF: | |
thunk->data.leaf.action(ctx, thunk, value); | |
break; | |
case PCC_THUNK_NODE: | |
pcc_do_action(ctx, thunk->data.node.thunks, thunk->data.node.value); | |
break; | |
default: /* unknown */ | |
break; | |
} | |
} | |
} | |
static void pcc_action_keyval_0(ptoml_context_t *__pcc_ctx, pcc_thunk_t *__pcc_in, pcc_value_t *__pcc_out) { | |
#define auxil (__pcc_ctx->auxil) | |
#define __ (*__pcc_out) | |
#define _0 pcc_get_capture_string(__pcc_ctx, &__pcc_in->data.leaf.capt0) | |
#define _0s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.start)) | |
#define _0e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.end)) | |
keyvalStart(auxil, _0s); | |
#undef _0e | |
#undef _0s | |
#undef _0 | |
#undef __ | |
#undef auxil | |
} | |
static void pcc_action_keyval_1(ptoml_context_t *__pcc_ctx, pcc_thunk_t *__pcc_in, pcc_value_t *__pcc_out) { | |
#define auxil (__pcc_ctx->auxil) | |
#define __ (*__pcc_out) | |
#define _0 pcc_get_capture_string(__pcc_ctx, &__pcc_in->data.leaf.capt0) | |
#define _0s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.start)) | |
#define _0e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.end)) | |
keyvalKeyEnd(auxil); | |
#undef _0e | |
#undef _0s | |
#undef _0 | |
#undef __ | |
#undef auxil | |
} | |
static void pcc_action_keyval_2(ptoml_context_t *__pcc_ctx, pcc_thunk_t *__pcc_in, pcc_value_t *__pcc_out) { | |
#define auxil (__pcc_ctx->auxil) | |
#define __ (*__pcc_out) | |
#define _0 pcc_get_capture_string(__pcc_ctx, &__pcc_in->data.leaf.capt0) | |
#define _0s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.start)) | |
#define _0e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.end)) | |
keyvalValEnd(auxil); | |
#undef _0e | |
#undef _0s | |
#undef _0 | |
#undef __ | |
#undef auxil | |
} | |
static void pcc_action_simpleKey_0(ptoml_context_t *__pcc_ctx, pcc_thunk_t *__pcc_in, pcc_value_t *__pcc_out) { | |
#define auxil (__pcc_ctx->auxil) | |
#define __ (*__pcc_out) | |
#define _0 pcc_get_capture_string(__pcc_ctx, &__pcc_in->data.leaf.capt0) | |
#define _0s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.start)) | |
#define _0e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.end)) | |
#define _1 pcc_get_capture_string(__pcc_ctx, __pcc_in->data.leaf.capts.buf[0]) | |
#define _1s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capts.buf[0]->range.start)) | |
#define _1e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capts.buf[0]->range.end)) | |
queueKey (auxil, _0); | |
#undef _1e | |
#undef _1s | |
#undef _1 | |
#undef _0e | |
#undef _0s | |
#undef _0 | |
#undef __ | |
#undef auxil | |
} | |
static void pcc_action_val_0(ptoml_context_t *__pcc_ctx, pcc_thunk_t *__pcc_in, pcc_value_t *__pcc_out) { | |
#define auxil (__pcc_ctx->auxil) | |
#define __ (*__pcc_out) | |
#define _0 pcc_get_capture_string(__pcc_ctx, &__pcc_in->data.leaf.capt0) | |
#define _0s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.start)) | |
#define _0e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.end)) | |
#define _1 pcc_get_capture_string(__pcc_ctx, __pcc_in->data.leaf.capts.buf[0]) | |
#define _1s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capts.buf[0]->range.start)) | |
#define _1e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capts.buf[0]->range.end)) | |
notifyValue(auxil, _0, _0s); | |
#undef _1e | |
#undef _1s | |
#undef _1 | |
#undef _0e | |
#undef _0s | |
#undef _0 | |
#undef __ | |
#undef auxil | |
} | |
static void pcc_action_stdTable_0(ptoml_context_t *__pcc_ctx, pcc_thunk_t *__pcc_in, pcc_value_t *__pcc_out) { | |
#define auxil (__pcc_ctx->auxil) | |
#define __ (*__pcc_out) | |
#define _0 pcc_get_capture_string(__pcc_ctx, &__pcc_in->data.leaf.capt0) | |
#define _0s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.start)) | |
#define _0e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.end)) | |
tableKeyStart(auxil, false, _0s); | |
#undef _0e | |
#undef _0s | |
#undef _0 | |
#undef __ | |
#undef auxil | |
} | |
static void pcc_action_stdTable_1(ptoml_context_t *__pcc_ctx, pcc_thunk_t *__pcc_in, pcc_value_t *__pcc_out) { | |
#define auxil (__pcc_ctx->auxil) | |
#define __ (*__pcc_out) | |
#define _0 pcc_get_capture_string(__pcc_ctx, &__pcc_in->data.leaf.capt0) | |
#define _0s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.start)) | |
#define _0e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.end)) | |
tableKeyEnd(auxil); | |
#undef _0e | |
#undef _0s | |
#undef _0 | |
#undef __ | |
#undef auxil | |
} | |
static void pcc_action_arrayTable_0(ptoml_context_t *__pcc_ctx, pcc_thunk_t *__pcc_in, pcc_value_t *__pcc_out) { | |
#define auxil (__pcc_ctx->auxil) | |
#define __ (*__pcc_out) | |
#define _0 pcc_get_capture_string(__pcc_ctx, &__pcc_in->data.leaf.capt0) | |
#define _0s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.start)) | |
#define _0e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.end)) | |
tableKeyStart(auxil, true, _0s); | |
#undef _0e | |
#undef _0s | |
#undef _0 | |
#undef __ | |
#undef auxil | |
} | |
static void pcc_action_arrayTable_1(ptoml_context_t *__pcc_ctx, pcc_thunk_t *__pcc_in, pcc_value_t *__pcc_out) { | |
#define auxil (__pcc_ctx->auxil) | |
#define __ (*__pcc_out) | |
#define _0 pcc_get_capture_string(__pcc_ctx, &__pcc_in->data.leaf.capt0) | |
#define _0s ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.start)) | |
#define _0e ((const size_t)(__pcc_ctx->pos + __pcc_in->data.leaf.capt0.range.end)) | |
tableKeyEnd(auxil); | |
#undef _0e | |
#undef _0s | |
#undef _0 | |
#undef __ | |
#undef auxil | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_toml(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_expression(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_ws(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_wschar(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_newline(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_commentStartSymbol(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_nonAscii(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_nonEol(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_comment(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_keyval(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_key(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_simpleKey(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_unquotedKey(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_quotedKey(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dottedKey(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dotSep(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_keyvalSep(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_val(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_string(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_basicString(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_quotationMark(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_basicChar(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_basicUnescaped(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_escaped(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_escape(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_escapeSeqChar(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlBasicString(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlBasicStringDelim(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlBasicBody(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbContent(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbChar(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbQuotes(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbUnescaped(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbEscapedNl(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_literalString(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_apostrophe(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_literalChar(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlLiteralString(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlLiteralStringDelim(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlLiteralBody(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mllContent(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mllChar(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mllQuotes(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_integer(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_minus(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_plus(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_underscore(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_digit1_9(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_digit0_7(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_digit0_1(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_hexPrefix(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_octPrefix(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_binPrefix(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_decInt(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_unsignedDecInt(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_hexInt(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_octInt(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_binInt(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_float(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_floatIntPart(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_frac(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_decimalPoint(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_zeroPrefixableInt(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_exp(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_floatExpPart(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_specialFloat(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inf(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_nan(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_boolean(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_true(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_false(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dateTime(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dateFullyear(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dateMonth(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dateMday(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeDelim(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeHour(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeMinute(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeSecond(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeSecfrac(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeNumoffset(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeOffset(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_partialTime(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_fullDate(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_fullTime(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_offsetDateTime(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_localDateTime(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_localDate(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_localTime(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_array(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayOpen(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayClose(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayValues(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arraySep(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_wsCommentNewline(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_table(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_stdTable(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_stdTableOpen(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_stdTableClose(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTable(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTableOpen(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTableClose(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTableSep(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTableKeyvals(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayTable(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayTableOpen(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayTableClose(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_ALPHA(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_DIGIT(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_HEXDIG(pcc_context_t *ctx); | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_toml(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "toml", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_expression, &chunk->thunks, NULL)) goto L0000; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_newline, &chunk->thunks, NULL)) goto L0001; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_expression, &chunk->thunks, NULL)) goto L0001; | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_newline, &chunk->thunks, NULL)) goto L0002; | |
if (ctx->cur == p) break; | |
continue; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
{ | |
const size_t p = ctx->cur; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0005; | |
ctx->cur += n; | |
} | |
ctx->cur = p; | |
goto L0004; | |
L0005:; | |
ctx->cur = p; | |
} | |
goto L0003; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0006; | |
ctx->cur += n; | |
} | |
goto L0003; | |
L0006:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0003:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "toml", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "toml", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_expression(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "expression", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0002; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_keyval, &chunk->thunks, NULL)) goto L0002; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0002; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_comment, &chunk->thunks, NULL)) goto L0003; | |
goto L0004; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0004:; | |
} | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0005; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_table, &chunk->thunks, NULL)) goto L0005; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0005; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_comment, &chunk->thunks, NULL)) goto L0006; | |
goto L0007; | |
L0006:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0007:; | |
} | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0008; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_comment, &chunk->thunks, NULL)) goto L0009; | |
goto L0010; | |
L0009:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0010:; | |
} | |
goto L0001; | |
L0008:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "expression", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "expression", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_ws(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "ws", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wschar, &chunk->thunks, NULL)) goto L0001; | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "ws", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_wschar(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "wschar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ' ' | |
) goto L0002; | |
ctx->cur++; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '\t' | |
) goto L0003; | |
ctx->cur++; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "wschar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "wschar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_newline(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "newline", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if ( | |
pcc_refill_buffer(ctx, 2) < 2 || | |
(ctx->buffer.buf + ctx->cur)[0] != '\r' || | |
(ctx->buffer.buf + ctx->cur)[1] != '\n' | |
) goto L0002; | |
ctx->cur += 2; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '\n' | |
) goto L0003; | |
ctx->cur++; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "newline", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "newline", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_commentStartSymbol(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "commentStartSymbol", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '#' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "commentStartSymbol", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "commentStartSymbol", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_nonAscii(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "nonAscii", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0002; | |
if (!( | |
(u >= 0x000080 && u <= 0x00d7ff) | |
)) goto L0002; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0003; | |
if (!( | |
(u >= 0x00e000 && u <= 0x00110f) || | |
u == 0x000046 || | |
u == 0x000046 || | |
u == 0x000046 | |
)) goto L0003; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "nonAscii", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "nonAscii", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_nonEol(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "nonEol", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '\t' | |
) goto L0002; | |
ctx->cur++; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0003; | |
if (!( | |
(u >= 0x000020 && u <= 0x00007f) | |
)) goto L0003; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_nonAscii, &chunk->thunks, NULL)) goto L0004; | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "nonEol", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "nonEol", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_comment(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "comment", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_commentStartSymbol, &chunk->thunks, NULL)) goto L0000; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_nonEol, &chunk->thunks, NULL)) goto L0001; | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "comment", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "comment", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_keyval(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "keyval", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_keyval_0, 0, 0); | |
thunk->data.leaf.capt0.range.start = chunk->pos; | |
thunk->data.leaf.capt0.range.end = ctx->cur; | |
pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk); | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_key, &chunk->thunks, NULL)) goto L0000; | |
{ | |
pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_keyval_1, 0, 0); | |
thunk->data.leaf.capt0.range.start = chunk->pos; | |
thunk->data.leaf.capt0.range.end = ctx->cur; | |
pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk); | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_keyvalSep, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_val, &chunk->thunks, NULL)) goto L0000; | |
{ | |
pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_keyval_2, 0, 0); | |
thunk->data.leaf.capt0.range.start = chunk->pos; | |
thunk->data.leaf.capt0.range.end = ctx->cur; | |
pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk); | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "keyval", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "keyval", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_key(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "key", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_dottedKey, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_simpleKey, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "key", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "key", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_simpleKey(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "simpleKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
pcc_capture_table__resize(ctx->auxil, &chunk->capts, 1); | |
{ | |
const size_t p = ctx->cur; | |
size_t q; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_quotedKey, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_unquotedKey, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
q = ctx->cur; | |
chunk->capts.buf[0].range.start = p; | |
chunk->capts.buf[0].range.end = q; | |
} | |
{ | |
pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_simpleKey_0, 0, 1); | |
thunk->data.leaf.capts.buf[0] = &(chunk->capts.buf[0]); | |
thunk->data.leaf.capt0.range.start = chunk->pos; | |
thunk->data.leaf.capt0.range.end = ctx->cur; | |
pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk); | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "simpleKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "simpleKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_unquotedKey(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "unquotedKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
const size_t p0 = ctx->cur; | |
const size_t n0 = chunk->thunks.len; | |
int i; | |
for (i = 0;; i++) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ALPHA, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '-' | |
) goto L0005; | |
ctx->cur++; | |
goto L0002; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '_' | |
) goto L0006; | |
ctx->cur++; | |
goto L0002; | |
L0006:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
if (i < 1) { | |
ctx->cur = p0; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n0); | |
goto L0000; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "unquotedKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "unquotedKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_quotedKey(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "quotedKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_basicString, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_literalString, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "quotedKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "quotedKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dottedKey(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "dottedKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_simpleKey, &chunk->thunks, NULL)) goto L0000; | |
{ | |
const size_t p0 = ctx->cur; | |
const size_t n0 = chunk->thunks.len; | |
int i; | |
for (i = 0;; i++) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_dotSep, &chunk->thunks, NULL)) goto L0001; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_simpleKey, &chunk->thunks, NULL)) goto L0001; | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
if (i < 1) { | |
ctx->cur = p0; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n0); | |
goto L0000; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "dottedKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "dottedKey", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dotSep(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "dotSep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '.' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "dotSep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "dotSep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_keyvalSep(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "keyvalSep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '=' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "keyvalSep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "keyvalSep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_val(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "val", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
pcc_capture_table__resize(ctx->auxil, &chunk->capts, 1); | |
{ | |
const size_t p = ctx->cur; | |
size_t q; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_string, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_boolean, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_array, &chunk->thunks, NULL)) goto L0004; | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_inlineTable, &chunk->thunks, NULL)) goto L0005; | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_dateTime, &chunk->thunks, NULL)) goto L0006; | |
goto L0001; | |
L0006:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_float, &chunk->thunks, NULL)) goto L0007; | |
goto L0001; | |
L0007:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_integer, &chunk->thunks, NULL)) goto L0008; | |
goto L0001; | |
L0008:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
q = ctx->cur; | |
chunk->capts.buf[0].range.start = p; | |
chunk->capts.buf[0].range.end = q; | |
} | |
{ | |
pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_val_0, 0, 1); | |
thunk->data.leaf.capts.buf[0] = &(chunk->capts.buf[0]); | |
thunk->data.leaf.capt0.range.start = chunk->pos; | |
thunk->data.leaf.capt0.range.end = ctx->cur; | |
pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk); | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "val", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "val", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_string(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "string", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlBasicString, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_basicString, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlLiteralString, &chunk->thunks, NULL)) goto L0004; | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_literalString, &chunk->thunks, NULL)) goto L0005; | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "string", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "string", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_basicString(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "basicString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_quotationMark, &chunk->thunks, NULL)) goto L0000; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_basicChar, &chunk->thunks, NULL)) goto L0001; | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_quotationMark, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "basicString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "basicString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_quotationMark(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "quotationMark", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '\"' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "quotationMark", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "quotationMark", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_basicChar(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "basicChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_basicUnescaped, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_escaped, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "basicChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "basicChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_basicUnescaped(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "basicUnescaped", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wschar, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '!' | |
) goto L0003; | |
ctx->cur++; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0004; | |
if (!( | |
(u >= 0x000023 && u <= 0x00005b) | |
)) goto L0004; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0005; | |
if (!( | |
(u >= 0x00005d && u <= 0x00007e) | |
)) goto L0005; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_nonAscii, &chunk->thunks, NULL)) goto L0006; | |
goto L0001; | |
L0006:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "basicUnescaped", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "basicUnescaped", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_escaped(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "escaped", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_escape, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_escapeSeqChar, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "escaped", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "escaped", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_escape(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "escape", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '\\' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "escape", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "escape", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_escapeSeqChar(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "escapeSeqChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0002; | |
if (!( | |
u == 0x000022 || | |
u == 0x000062 || | |
u == 0x000066 || | |
u == 0x00006e || | |
u == 0x000072 || | |
u == 0x000074 | |
)) goto L0002; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'u' | |
) goto L0003; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0003; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0003; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0003; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'U' | |
) goto L0004; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0004; | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "escapeSeqChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "escapeSeqChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlBasicString(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlBasicString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlBasicStringDelim, &chunk->thunks, NULL)) goto L0000; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_newline, &chunk->thunks, NULL)) goto L0001; | |
goto L0002; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0002:; | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlBasicBody, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlBasicStringDelim, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlBasicString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mlBasicString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlBasicStringDelim(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlBasicStringDelim", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_quotationMark, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_quotationMark, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_quotationMark, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlBasicStringDelim", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mlBasicStringDelim", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlBasicBody(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlBasicBody", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlbContent, &chunk->thunks, NULL)) goto L0001; | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlbQuotes, &chunk->thunks, NULL)) goto L0002; | |
{ | |
const size_t p0 = ctx->cur; | |
const size_t n0 = chunk->thunks.len; | |
int i; | |
for (i = 0;; i++) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlbContent, &chunk->thunks, NULL)) goto L0003; | |
if (ctx->cur == p) break; | |
continue; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
if (i < 1) { | |
ctx->cur = p0; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n0); | |
goto L0002; | |
} | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlbQuotes, &chunk->thunks, NULL)) goto L0004; | |
goto L0005; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0005:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlBasicBody", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbContent(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlbContent", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlbChar, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_newline, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlbEscapedNl, &chunk->thunks, NULL)) goto L0004; | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlbContent", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mlbContent", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbChar(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlbChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlbUnescaped, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_escaped, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlbChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mlbChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbQuotes(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlbQuotes", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_quotationMark, &chunk->thunks, NULL)) goto L0002; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_quotationMark, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_quotationMark, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlbQuotes", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mlbQuotes", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbUnescaped(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlbUnescaped", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wschar, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '!' | |
) goto L0003; | |
ctx->cur++; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0004; | |
if (!( | |
(u >= 0x000023 && u <= 0x00005b) | |
)) goto L0004; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0005; | |
if (!( | |
(u >= 0x00005d && u <= 0x00007e) | |
)) goto L0005; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_nonAscii, &chunk->thunks, NULL)) goto L0006; | |
goto L0001; | |
L0006:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlbUnescaped", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mlbUnescaped", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlbEscapedNl(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlbEscapedNl", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_escape, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_newline, &chunk->thunks, NULL)) goto L0000; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wschar, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_newline, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlbEscapedNl", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mlbEscapedNl", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_literalString(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "literalString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_apostrophe, &chunk->thunks, NULL)) goto L0000; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_literalChar, &chunk->thunks, NULL)) goto L0001; | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_apostrophe, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "literalString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "literalString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_apostrophe(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "apostrophe", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '\'' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "apostrophe", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "apostrophe", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_literalChar(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "literalChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '\t' | |
) goto L0002; | |
ctx->cur++; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0003; | |
if (!( | |
(u >= 0x000020 && u <= 0x000026) | |
)) goto L0003; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0004; | |
if (!( | |
(u >= 0x000028 && u <= 0x00007e) | |
)) goto L0004; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_nonAscii, &chunk->thunks, NULL)) goto L0005; | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "literalChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "literalChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlLiteralString(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlLiteralString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlLiteralStringDelim, &chunk->thunks, NULL)) goto L0000; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_newline, &chunk->thunks, NULL)) goto L0001; | |
goto L0002; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0002:; | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlLiteralBody, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mlLiteralStringDelim, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlLiteralString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mlLiteralString", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlLiteralStringDelim(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlLiteralStringDelim", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_apostrophe, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_apostrophe, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_apostrophe, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlLiteralStringDelim", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mlLiteralStringDelim", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mlLiteralBody(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mlLiteralBody", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mllContent, &chunk->thunks, NULL)) goto L0001; | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mllQuotes, &chunk->thunks, NULL)) goto L0002; | |
{ | |
const size_t p0 = ctx->cur; | |
const size_t n0 = chunk->thunks.len; | |
int i; | |
for (i = 0;; i++) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mllContent, &chunk->thunks, NULL)) goto L0003; | |
if (ctx->cur == p) break; | |
continue; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
if (i < 1) { | |
ctx->cur = p0; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n0); | |
goto L0002; | |
} | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mllQuotes, &chunk->thunks, NULL)) goto L0004; | |
goto L0005; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0005:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mlLiteralBody", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mllContent(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mllContent", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_mllChar, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_newline, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mllContent", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mllContent", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mllChar(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mllChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '\t' | |
) goto L0002; | |
ctx->cur++; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0003; | |
if (!( | |
(u >= 0x000020 && u <= 0x000026) | |
)) goto L0003; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0004; | |
if (!( | |
(u >= 0x000028 && u <= 0x00007e) | |
)) goto L0004; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_nonAscii, &chunk->thunks, NULL)) goto L0005; | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mllChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mllChar", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_mllQuotes(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "mllQuotes", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_apostrophe, &chunk->thunks, NULL)) goto L0002; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_apostrophe, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_apostrophe, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "mllQuotes", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "mllQuotes", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_integer(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "integer", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_decInt, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_hexInt, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_octInt, &chunk->thunks, NULL)) goto L0004; | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_binInt, &chunk->thunks, NULL)) goto L0005; | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "integer", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "integer", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_minus(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "minus", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '-' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "minus", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "minus", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_plus(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "plus", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '+' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "plus", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "plus", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_underscore(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "underscore", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '_' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "underscore", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "underscore", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_digit1_9(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "digit1_9", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0000; | |
if (!( | |
(u >= 0x000031 && u <= 0x000039) | |
)) goto L0000; | |
ctx->cur += n; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "digit1_9", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "digit1_9", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_digit0_7(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "digit0_7", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0000; | |
if (!( | |
(u >= 0x000030 && u <= 0x000037) | |
)) goto L0000; | |
ctx->cur += n; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "digit0_7", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "digit0_7", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_digit0_1(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "digit0_1", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0000; | |
if (!( | |
(u >= 0x000030 && u <= 0x000031) | |
)) goto L0000; | |
ctx->cur += n; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "digit0_1", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "digit0_1", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_hexPrefix(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "hexPrefix", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '0' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'x' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "hexPrefix", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "hexPrefix", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_octPrefix(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "octPrefix", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '0' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'o' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "octPrefix", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "octPrefix", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_binPrefix(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "binPrefix", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '0' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'b' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "binPrefix", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "binPrefix", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_decInt(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "decInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_minus, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_plus, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
goto L0005; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0005:; | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_unsignedDecInt, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "decInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "decInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_unsignedDecInt(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "unsignedDecInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_digit1_9, &chunk->thunks, NULL)) goto L0002; | |
{ | |
const size_t p0 = ctx->cur; | |
const size_t n0 = chunk->thunks.len; | |
int i; | |
for (i = 0;; i++) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0005; | |
goto L0004; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_underscore, &chunk->thunks, NULL)) goto L0006; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0006; | |
goto L0004; | |
L0006:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0003; | |
L0004:; | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
if (i < 1) { | |
ctx->cur = p0; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n0); | |
goto L0002; | |
} | |
} | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0007; | |
goto L0001; | |
L0007:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "unsignedDecInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "unsignedDecInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_hexInt(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "hexInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_hexPrefix, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0000; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_underscore, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_HEXDIG, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "hexInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "hexInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_octInt(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "octInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_octPrefix, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_digit0_7, &chunk->thunks, NULL)) goto L0000; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_digit0_7, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_underscore, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_digit0_7, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "octInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "octInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_binInt(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "binInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_binPrefix, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_digit0_1, &chunk->thunks, NULL)) goto L0000; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_digit0_1, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_underscore, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_digit0_1, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "binInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "binInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_float(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "float", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_floatIntPart, &chunk->thunks, NULL)) goto L0002; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_exp, &chunk->thunks, NULL)) goto L0004; | |
goto L0003; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_frac, &chunk->thunks, NULL)) goto L0005; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_exp, &chunk->thunks, NULL)) goto L0006; | |
goto L0007; | |
L0006:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0007:; | |
} | |
goto L0003; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0002; | |
L0003:; | |
} | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_specialFloat, &chunk->thunks, NULL)) goto L0008; | |
goto L0001; | |
L0008:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "float", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "float", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_floatIntPart(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "floatIntPart", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_decInt, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "floatIntPart", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "floatIntPart", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_frac(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "frac", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_decimalPoint, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_zeroPrefixableInt, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "frac", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "frac", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_decimalPoint(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "decimalPoint", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '.' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "decimalPoint", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "decimalPoint", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_zeroPrefixableInt(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "zeroPrefixableInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_underscore, &chunk->thunks, NULL)) goto L0004; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "zeroPrefixableInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "zeroPrefixableInt", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_exp(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "exp", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0000; | |
if (!( | |
u == 0x000065 || | |
u == 0x000045 | |
)) goto L0000; | |
ctx->cur += n; | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_floatExpPart, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "exp", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "exp", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_floatExpPart(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "floatExpPart", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_minus, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_plus, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
goto L0005; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0005:; | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_zeroPrefixableInt, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "floatExpPart", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "floatExpPart", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_specialFloat(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "specialFloat", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_minus, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_plus, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
goto L0005; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0005:; | |
} | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_inf, &chunk->thunks, NULL)) goto L0007; | |
goto L0006; | |
L0007:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_nan, &chunk->thunks, NULL)) goto L0008; | |
goto L0006; | |
L0008:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0006:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "specialFloat", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "specialFloat", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inf(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "inf", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'i' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'n' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'f' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "inf", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "inf", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_nan(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "nan", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'n' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'a' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'n' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "nan", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "nan", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_boolean(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "boolean", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_true, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_false, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "boolean", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "boolean", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_true(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "true", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 't' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'r' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'u' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'e' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "true", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "true", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_false(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "false", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'f' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'a' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'l' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 's' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != 'e' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "false", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "false", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dateTime(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "dateTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_offsetDateTime, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_localDateTime, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_localDate, &chunk->thunks, NULL)) goto L0004; | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_localTime, &chunk->thunks, NULL)) goto L0005; | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "dateTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "dateTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dateFullyear(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "dateFullyear", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "dateFullyear", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "dateFullyear", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dateMonth(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "dateMonth", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "dateMonth", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "dateMonth", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_dateMday(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "dateMday", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "dateMday", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "dateMday", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeDelim(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "timeDelim", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0002; | |
if (!( | |
u == 0x000074 || | |
u == 0x000054 | |
)) goto L0002; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ' ' | |
) goto L0003; | |
ctx->cur++; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "timeDelim", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "timeDelim", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeHour(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "timeHour", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "timeHour", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "timeHour", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeMinute(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "timeMinute", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "timeMinute", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "timeMinute", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeSecond(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "timeSecond", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "timeSecond", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "timeSecond", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeSecfrac(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "timeSecfrac", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '.' | |
) goto L0000; | |
ctx->cur++; | |
{ | |
const size_t p0 = ctx->cur; | |
const size_t n0 = chunk->thunks.len; | |
int i; | |
for (i = 0;; i++) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0001; | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
if (i < 1) { | |
ctx->cur = p0; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n0); | |
goto L0000; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "timeSecfrac", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "timeSecfrac", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeNumoffset(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "timeNumoffset", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '+' | |
) goto L0002; | |
ctx->cur++; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '-' | |
) goto L0003; | |
ctx->cur++; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeHour, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ':' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeMinute, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "timeNumoffset", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "timeNumoffset", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_timeOffset(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "timeOffset", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0002; | |
if (!( | |
u == 0x00007a || | |
u == 0x00005a | |
)) goto L0002; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeNumoffset, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "timeOffset", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "timeOffset", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_partialTime(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "partialTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeHour, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ':' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeMinute, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ':' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeSecond, &chunk->thunks, NULL)) goto L0000; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeSecfrac, &chunk->thunks, NULL)) goto L0001; | |
goto L0002; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0002:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "partialTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "partialTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_fullDate(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "fullDate", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_dateFullyear, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '-' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_dateMonth, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '-' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_dateMday, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "fullDate", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "fullDate", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_fullTime(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "fullTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_partialTime, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeOffset, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "fullTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "fullTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_offsetDateTime(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "offsetDateTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_fullDate, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeDelim, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_fullTime, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "offsetDateTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "offsetDateTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_localDateTime(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "localDateTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_fullDate, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_timeDelim, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_partialTime, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "localDateTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "localDateTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_localDate(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "localDate", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_fullDate, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "localDate", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "localDate", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_localTime(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "localTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_partialTime, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "localTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "localTime", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_array(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "array", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_arrayOpen, &chunk->thunks, NULL)) goto L0000; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_arrayValues, &chunk->thunks, NULL)) goto L0001; | |
goto L0002; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0002:; | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wsCommentNewline, &chunk->thunks, NULL)) goto L0000; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_arrayClose, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "array", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "array", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayOpen(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "arrayOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '[' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "arrayOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "arrayOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayClose(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "arrayClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ']' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "arrayClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "arrayClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayValues(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "arrayValues", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wsCommentNewline, &chunk->thunks, NULL)) goto L0002; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_val, &chunk->thunks, NULL)) goto L0002; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wsCommentNewline, &chunk->thunks, NULL)) goto L0002; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_arraySep, &chunk->thunks, NULL)) goto L0002; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_arrayValues, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wsCommentNewline, &chunk->thunks, NULL)) goto L0003; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_val, &chunk->thunks, NULL)) goto L0003; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wsCommentNewline, &chunk->thunks, NULL)) goto L0003; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_arraySep, &chunk->thunks, NULL)) goto L0004; | |
if (ctx->cur == p) break; | |
continue; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "arrayValues", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "arrayValues", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arraySep(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "arraySep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ',' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "arraySep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "arraySep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_wsCommentNewline(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "wsCommentNewline", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
for (;;) { | |
const size_t p = ctx->cur; | |
const size_t n = chunk->thunks.len; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_wschar, &chunk->thunks, NULL)) goto L0003; | |
goto L0002; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_comment, &chunk->thunks, NULL)) goto L0005; | |
goto L0006; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0006:; | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_newline, &chunk->thunks, NULL)) goto L0004; | |
goto L0002; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0001; | |
L0002:; | |
} | |
if (ctx->cur == p) break; | |
continue; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
break; | |
} | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "wsCommentNewline", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_table(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "table", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_stdTable, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_arrayTable, &chunk->thunks, NULL)) goto L0003; | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "table", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "table", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_stdTable(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "stdTable", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_stdTableOpen, &chunk->thunks, NULL)) goto L0000; | |
{ | |
pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_stdTable_0, 0, 0); | |
thunk->data.leaf.capt0.range.start = chunk->pos; | |
thunk->data.leaf.capt0.range.end = ctx->cur; | |
pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk); | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_key, &chunk->thunks, NULL)) goto L0000; | |
{ | |
pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_stdTable_1, 0, 0); | |
thunk->data.leaf.capt0.range.start = chunk->pos; | |
thunk->data.leaf.capt0.range.end = ctx->cur; | |
pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk); | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_stdTableClose, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "stdTable", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "stdTable", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_stdTableOpen(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "stdTableOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '[' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "stdTableOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "stdTableOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_stdTableClose(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "stdTableClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ']' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "stdTableClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "stdTableClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTable(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "inlineTable", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_inlineTableOpen, &chunk->thunks, NULL)) goto L0000; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_inlineTableKeyvals, &chunk->thunks, NULL)) goto L0001; | |
goto L0002; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0002:; | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_inlineTableClose, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "inlineTable", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "inlineTable", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTableOpen(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "inlineTableOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '{' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "inlineTableOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "inlineTableOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTableClose(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "inlineTableClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '}' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "inlineTableClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "inlineTableClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTableSep(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "inlineTableSep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ',' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "inlineTableSep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "inlineTableSep", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_inlineTableKeyvals(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "inlineTableKeyvals", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_keyval, &chunk->thunks, NULL)) goto L0000; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_inlineTableSep, &chunk->thunks, NULL)) goto L0001; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_inlineTableKeyvals, &chunk->thunks, NULL)) goto L0001; | |
goto L0002; | |
L0001:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
L0002:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "inlineTableKeyvals", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "inlineTableKeyvals", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayTable(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "arrayTable", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_arrayTableOpen, &chunk->thunks, NULL)) goto L0000; | |
{ | |
pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_arrayTable_0, 0, 0); | |
thunk->data.leaf.capt0.range.start = chunk->pos; | |
thunk->data.leaf.capt0.range.end = ctx->cur; | |
pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk); | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_key, &chunk->thunks, NULL)) goto L0000; | |
{ | |
pcc_thunk_t *const thunk = pcc_thunk__create_leaf(ctx->auxil, pcc_action_arrayTable_1, 0, 0); | |
thunk->data.leaf.capt0.range.start = chunk->pos; | |
thunk->data.leaf.capt0.range.end = ctx->cur; | |
pcc_thunk_array__add(ctx->auxil, &chunk->thunks, thunk); | |
} | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_arrayTableClose, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "arrayTable", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "arrayTable", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayTableOpen(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "arrayTableOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '[' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != '[' | |
) goto L0000; | |
ctx->cur++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "arrayTableOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "arrayTableOpen", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_arrayTableClose(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "arrayTableClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_ws, &chunk->thunks, NULL)) goto L0000; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ']' | |
) goto L0000; | |
ctx->cur++; | |
if ( | |
pcc_refill_buffer(ctx, 1) < 1 || | |
ctx->buffer.buf[ctx->cur] != ']' | |
) goto L0000; | |
ctx->cur++; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "arrayTableClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "arrayTableClose", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_ALPHA(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "ALPHA", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0002; | |
if (!( | |
(u >= 0x000041 && u <= 0x00005a) | |
)) goto L0002; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0003; | |
if (!( | |
(u >= 0x000061 && u <= 0x00007a) | |
)) goto L0003; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "ALPHA", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "ALPHA", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_DIGIT(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "DIGIT", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0000; | |
if (!( | |
(u >= 0x000030 && u <= 0x000039) | |
)) goto L0000; | |
ctx->cur += n; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "DIGIT", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "DIGIT", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
static pcc_thunk_chunk_t *pcc_evaluate_rule_HEXDIG(pcc_context_t *ctx) { | |
pcc_thunk_chunk_t *const chunk = pcc_thunk_chunk__create(ctx); | |
chunk->pos = ctx->cur; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_EVALUATE, "HEXDIG", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->buffer.len - chunk->pos)); | |
ctx->level++; | |
{ | |
MARK_VAR_AS_USED | |
const size_t p = ctx->cur; | |
MARK_VAR_AS_USED | |
const size_t n = chunk->thunks.len; | |
if (!pcc_apply_rule(ctx, pcc_evaluate_rule_DIGIT, &chunk->thunks, NULL)) goto L0002; | |
goto L0001; | |
L0002:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0003; | |
if (!( | |
u == 0x000061 || | |
u == 0x000041 | |
)) goto L0003; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0003:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0004; | |
if (!( | |
u == 0x000062 || | |
u == 0x000042 | |
)) goto L0004; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0004:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0005; | |
if (!( | |
u == 0x000063 || | |
u == 0x000043 | |
)) goto L0005; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0005:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0006; | |
if (!( | |
u == 0x000064 || | |
u == 0x000044 | |
)) goto L0006; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0006:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0007; | |
if (!( | |
u == 0x000065 || | |
u == 0x000045 | |
)) goto L0007; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0007:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
{ | |
int u; | |
const size_t n = pcc_get_char_as_utf32(ctx, &u); | |
if (n == 0) goto L0008; | |
if (!( | |
u == 0x000066 || | |
u == 0x000046 | |
)) goto L0008; | |
ctx->cur += n; | |
} | |
goto L0001; | |
L0008:; | |
ctx->cur = p; | |
pcc_thunk_array__revert(ctx->auxil, &chunk->thunks, n); | |
goto L0000; | |
L0001:; | |
} | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_MATCH, "HEXDIG", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
return chunk; | |
L0000:; | |
ctx->level--; | |
PCC_DEBUG(ctx->auxil, PCC_DBG_NOMATCH, "HEXDIG", ctx->level, chunk->pos, (ctx->buffer.buf + chunk->pos), (ctx->cur - chunk->pos)); | |
pcc_thunk_chunk__destroy(ctx, chunk); | |
return NULL; | |
} | |
ptoml_context_t *ptoml_create(struct parserCtx *auxil) { | |
return pcc_context__create(auxil); | |
} | |
int ptoml_parse(ptoml_context_t *ctx, int *ret) { | |
if (pcc_apply_rule(ctx, pcc_evaluate_rule_toml, &ctx->thunks, ret)) | |
pcc_do_action(ctx, &ctx->thunks, ret); | |
else | |
PCC_ERROR(ctx->auxil); | |
pcc_commit_buffer(ctx); | |
pcc_thunk_array__revert(ctx->auxil, &ctx->thunks, 0); | |
return pcc_refill_buffer(ctx, 1) >= 1; | |
} | |
void ptoml_destroy(ptoml_context_t *ctx) { | |
pcc_context__destroy(ctx); | |
} | |
#include "toml_post.h" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* A packrat parser generated by PackCC 2.0.0 */ | |
#ifndef PCC_INCLUDED_TOML_H | |
#define PCC_INCLUDED_TOML_H | |
struct parserCtx; | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
typedef struct ptoml_context_tag ptoml_context_t; | |
ptoml_context_t *ptoml_create(struct parserCtx *auxil); | |
int ptoml_parse(ptoml_context_t *ctx, int *ret); | |
void ptoml_destroy(ptoml_context_t *ctx); | |
#ifdef __cplusplus | |
} | |
#endif | |
#endif /* !PCC_INCLUDED_TOML_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# This file is derived from | |
# | |
# https://github.com/toml-lang/toml/blob/main/toml.abnf | |
# | |
######################################################################## | |
# | |
# The MIT License | |
# | |
# Copyright (c) Tom Preston-Werner | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining a copy | |
# of this software and associated documentation files (the "Software"), to deal | |
# in the Software without restriction, including without limitation the rights | |
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
# copies of the Software, and to permit persons to whom the Software is | |
# furnished to do so, subject to the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be included in | |
# all copies or substantial portions of the Software. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
# THE SOFTWARE. | |
# | |
# (https://github.com/toml-lang/toml/blob/main/LICENSE) | |
# | |
########################################################################## | |
# | |
# Masatake YAMATO converted the abnf to peg for ctags. | |
# | |
########################################################################## | |
%prefix "ptoml" | |
%auxil "struct parserCtx *" | |
%earlysource { | |
#include "general.h" | |
} | |
%header { | |
struct parserCtx; | |
} | |
%source { | |
#include "toml_pre.h" | |
} | |
## Overall Structure | |
toml <- expression ( newline expression )* newline* (!. / .) | |
# the order of elements is arranged for peg'ify. | |
expression <- | |
ws keyval ws comment? | |
/ ws table ws comment? | |
/ ws comment? | |
## Whitespace | |
ws <- wschar* | |
wschar <- ' ' / '\t' | |
## Newline | |
newline <- '\r\n' / '\n' | |
## Comment | |
commentStartSymbol <- '#' | |
nonAscii <- [\u0080-\uD7FF] / [\uE000-\u110FFFF] | |
nonEol <- '\t' / [\u0020-\u007F] / nonAscii | |
comment <- commentStartSymbol nonEol* | |
## Key-Value pairs | |
keyval <- {keyvalStart(auxil, $0s);} key {keyvalKeyEnd(auxil);} keyvalSep val {keyvalValEnd(auxil);} | |
# the order of elements is arranged for peg'ify. | |
key <- dottedKey / simpleKey | |
simpleKey <- <quotedKey / unquotedKey> {queueKey (auxil, $0);} | |
unquotedKey <- ( ALPHA / DIGIT / '-' / '_' )+ | |
quotedKey <- basicString / literalString | |
dottedKey <- simpleKey ( dotSep simpleKey )+ | |
dotSep <- ws '.' ws | |
keyvalSep <- ws '=' ws | |
val <- <string / boolean / array / inlineTable / dateTime / float / integer> {notifyValue(auxil, $0, $0s);} | |
## String | |
string <- mlBasicString / basicString / mlLiteralString / literalString | |
## Basic String | |
basicString <- quotationMark basicChar* quotationMark | |
quotationMark <- '"' | |
basicChar <- basicUnescaped / escaped | |
basicUnescaped <- wschar / '\u0021' / [\u0023-\u005B] / [\u005D-\u007E] / nonAscii | |
escaped <- escape escapeSeqChar | |
escape <- '\u005C' | |
escapeSeqChar <- [\u0022\u005C\u0062\u0066\u006E\u0072\u0074] | |
/ '\u0075' HEXDIG HEXDIG HEXDIG HEXDIG | |
/ '\u0055' HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG | |
## Multiline Basic String | |
mlBasicString <- mlBasicStringDelim newline? mlBasicBody mlBasicStringDelim | |
mlBasicStringDelim <- quotationMark quotationMark quotationMark | |
mlBasicBody <- mlbContent* ( mlbQuotes mlbContent+ )* mlbQuotes? | |
mlbContent <- mlbChar / newline / mlbEscapedNl | |
mlbChar <- mlbUnescaped / escaped | |
mlbQuotes <- quotationMark quotationMark / quotationMark | |
mlbUnescaped <- wschar / '\u0021' / [\u0023-\u005B] / [\u005D-\u007E] / nonAscii | |
mlbEscapedNl <- escape ws newline ( wschar / newline )* | |
## Literal String | |
literalString <- apostrophe literalChar* apostrophe | |
apostrophe <- '\u0027' | |
literalChar <- '\u0009' / [\u0020-\u0026] / [\u0028-\u007E] / nonAscii | |
## Multiline Literal String | |
mlLiteralString <- mlLiteralStringDelim newline? mlLiteralBody | |
mlLiteralStringDelim | |
mlLiteralStringDelim <- apostrophe apostrophe apostrophe | |
mlLiteralBody <- mllContent* ( mllQuotes mllContent+ )* mllQuotes? | |
mllContent <- mllChar / newline | |
mllChar <- '\u0009' / [\u0020-\u0026] / [\u0028-\u007E] / nonAscii | |
mllQuotes <- apostrophe apostrophe / apostrophe | |
## Integer | |
integer <- decInt / hexInt / octInt / binInt | |
minus <- '\u002D' | |
plus <- '\u002B' | |
underscore <- '\u005F' | |
digit1_9 <- [\u0031-\u0039] | |
digit0_7 <- [\u0030-\u0037] | |
digit0_1 <- [\u0030-\u0031] | |
hexPrefix <- '\u0030' '\u0078' | |
octPrefix <- '\u0030' '\u006F' | |
binPrefix <- '\u0030' '\u0062' | |
decInt <- ( minus / plus )? unsignedDecInt | |
# the order of elements is arranged for peg'ify. | |
unsignedDecInt <- digit1_9 ( DIGIT / underscore DIGIT )+ / DIGIT | |
hexInt <- hexPrefix HEXDIG ( HEXDIG / underscore HEXDIG )* | |
octInt <- octPrefix digit0_7 ( digit0_7 / underscore digit0_7 )* | |
binInt <- binPrefix digit0_1 ( digit0_1 / underscore digit0_1 )* | |
## Float | |
float <- floatIntPart ( exp / frac exp? ) / specialFloat | |
floatIntPart <- decInt | |
frac <- decimalPoint zeroPrefixableInt | |
decimalPoint <- '\u002E' | |
zeroPrefixableInt <- DIGIT ( DIGIT / underscore DIGIT )* | |
exp <- [eE] floatExpPart | |
floatExpPart <- ( minus / plus )? zeroPrefixableInt | |
specialFloat <- ( minus / plus )? ( inf / nan ) | |
inf <- '\u0069' '\u006e' '\u0066' | |
nan <- '\u006e' '\u0061' '\u006e' | |
## Boolean | |
boolean <- true / false | |
true <- '\u0074' '\u0072' '\u0075' '\u0065' | |
false <- '\u0066' '\u0061' '\u006C' '\u0073' '\u0065' | |
## Date and Time (as defined in RFC 3339) | |
dateTime <- offsetDateTime / localDateTime / localDate / localTime | |
dateFullyear <- DIGIT DIGIT DIGIT DIGIT | |
dateMonth <- DIGIT DIGIT DIGIT DIGIT | |
dateMday <- DIGIT DIGIT | |
timeDelim <- [tT] / '\u0020' | |
timeHour <- DIGIT DIGIT | |
timeMinute <- DIGIT DIGIT | |
timeSecond <- DIGIT DIGIT | |
timeSecfrac <- "." DIGIT+ | |
timeNumoffset <- ( "+" / "-" ) timeHour ":" timeMinute | |
timeOffset <- [zZ] / timeNumoffset | |
partialTime <- timeHour ":" timeMinute ":" timeSecond timeSecfrac? | |
fullDate <- dateFullyear "-" dateMonth "-" dateMday | |
fullTime <- partialTime timeOffset | |
## Offset Date-Time | |
offsetDateTime <- fullDate timeDelim fullTime | |
## Local Date-Time | |
localDateTime <- fullDate timeDelim partialTime | |
## Local Date | |
localDate <- fullDate | |
## Local Time | |
localTime <- partialTime | |
## Array | |
array <- arrayOpen arrayValues? wsCommentNewline arrayClose | |
arrayOpen <- '\u005B' | |
arrayClose <- '\u005D' | |
arrayValues <- wsCommentNewline val wsCommentNewline arraySep arrayValues | |
/ wsCommentNewline val wsCommentNewline arraySep* | |
arraySep <- '\u002C' | |
wsCommentNewline <- ( wschar / comment? newline )* | |
## Table | |
table <- stdTable / arrayTable | |
## Standard Table | |
stdTable <- stdTableOpen {tableKeyStart(auxil, false, $0s);} key {tableKeyEnd(auxil);} stdTableClose | |
stdTableOpen <- '\u005B' ws | |
stdTableClose <- ws '\u005D' | |
## Inline Table | |
inlineTable <- inlineTableOpen inlineTableKeyvals? inlineTableClose | |
inlineTableOpen <- '\u007B' ws | |
inlineTableClose <- ws '\u007D' | |
inlineTableSep <- ws '\u002C' ws | |
inlineTableKeyvals <- keyval ( inlineTableSep inlineTableKeyvals )? | |
## Array Table | |
arrayTable <- arrayTableOpen {tableKeyStart(auxil, true, $0s);} key {tableKeyEnd(auxil);} arrayTableClose | |
arrayTableOpen <- '\u005B' '\u005B' ws | |
arrayTableClose <- ws '\u005D' '\u005D' | |
## Built-in ABNF terms, reproduced here for clarity | |
ALPHA <- [\u0041-\u005A] / [\u0061-\u007A] | |
DIGIT <- [\u0030-\u0039] | |
HEXDIG <- DIGIT / [aA] / [bB] / [cC] / [dD] / [eE] / [fF] | |
%% | |
#include "toml_post.h" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment