compile fixes

This commit is contained in:
anon 2023-08-28 15:43:25 +02:00
parent 291e115016
commit aa89deff8d

View File

@ -265,6 +265,20 @@ static int escape_1_to_N(const char c, compiler_state * cs) {
return 0;
}
static int escape_to_negative(const char c,
compiler_state * cs) {
switch (c) {
case 'D': {
const char digit_chars[] = "0123456789";
strcpy(cs->blacklist, digit_chars);
*cs->is_negative = true;
return sizeof(digit_chars)-1;
};
}
return 0;
}
//static int compile_hologram(char * hologram, char * whitelist) {
// if (hologram[0] == '\\') {
// switch (hologram[1]) {
@ -280,14 +294,30 @@ static int escape_1_to_N(const char c, compiler_state * cs) {
// }
//}
static int compile_dot(compiler_state * cs) {
*cs->do_catch = true;
return true;
}
static int compile_escape(const char c,
compiler_state * cs) {
return escape_1_to_1(c, cs)
|| escape_1_to_N(c, cs)
|| escape_to_negative(c, cs)
//|| compile_hologram(*s, whitelist)
;
}
static int compile_range(const char * const range,
char * whitelist,
bool * is_negative) {
compiler_state * cs) {
assert((range[0] == '[') && "Not a range.");
char * target_list = (*cs->is_negative) ? cs->blacklist : cs->whitelist;
const char * s;
if (range[1] == '^') {
*is_negative = true;
*cs->is_negative = true;
s = range + 2;
} else {
s = range + 1;
@ -494,7 +524,7 @@ static bool catch_(const regex_t * const regex,
static int regex_assert(const regex_t * const regex,
const char * const string,
int state,
int * width) {
int width) {
for (const char * s = string; *s != '\00'; s++) {
// delta
for (size_t i = 0; i < regex->delta_table.element_count; i++) {
@ -509,6 +539,7 @@ static int regex_assert(const regex_t * const regex,
}
if (catch_(regex, &state)) {
width += 1;
continue;
}