1
0
Fork 0
forked from fun/fun

Fixed the code style in *.c files to two spaces indentation and add a linter named funstx to Fun. (0.39.0)

This commit is contained in:
Johannes Findeisen 2026-03-18 20:52:00 +01:00
commit 03b2532474
237 changed files with 17550 additions and 13911 deletions

View file

@ -12,89 +12,95 @@
/* PCRE2_FINDALL */
case OP_PCRE2_FINDALL: {
#ifdef FUN_WITH_PCRE2
Value vflags = pop_value(vm);
Value vtext = pop_value(vm);
Value vpat = pop_value(vm);
int flags = 0;
if (vflags.type == VAL_INT || vflags.type == VAL_BOOL) flags = (int)vflags.i;
char *pattern = value_to_string_alloc(&vpat);
char *subject = value_to_string_alloc(&vtext);
free_value(vflags);
free_value(vtext);
free_value(vpat);
if (!pattern || !subject) {
if (pattern) free(pattern);
if (subject) free(subject);
push_value(vm, make_array_from_values(NULL, 0));
break;
}
#ifndef PCRE2_CODE_UNIT_WIDTH
#define PCRE2_CODE_UNIT_WIDTH 8
#endif
#include <pcre2.h>
int errorcode; PCRE2_SIZE erroff;
uint32_t opt = 0;
if (flags & 1) opt |= PCRE2_CASELESS; /* I */
if (flags & 2) opt |= PCRE2_MULTILINE; /* M */
if (flags & 4) opt |= PCRE2_DOTALL; /* S */
if (flags & 8) opt |= PCRE2_UTF; /* U */
if (flags & 16) opt |= PCRE2_EXTENDED; /* X */
pcre2_code *re = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, opt, &errorcode, &erroff, NULL);
if (!re) {
free(pattern); free(subject);
push_value(vm, make_array_from_values(NULL, 0));
break;
}
pcre2_match_data *mdata = pcre2_match_data_create_from_pattern(re, NULL);
Value out = make_array_from_values(NULL, 0);
size_t subj_len = strlen(subject);
size_t start_off = 0;
int gcount = 0;
while (1) {
int rc = pcre2_match(re, (PCRE2_SPTR)subject, (PCRE2_SIZE)subj_len, start_off, 0, mdata, NULL);
if (rc <= 0) break;
PCRE2_SIZE *ov = pcre2_get_ovector_pointer(mdata);
int s0 = (int)ov[0];
int e0 = (int)ov[1];
/* result map for this match */
Value res = make_map_empty();
char *full = string_substr(subject, s0, e0 - s0);
(void)map_set(&res, "full", make_string(full ? full : ""));
if (full) free(full);
(void)map_set(&res, "start", make_int(s0));
(void)map_set(&res, "end", make_int(e0));
Value groups = make_array_from_values(NULL, 0);
for (int i = 1; i < rc; ++i) {
int s = (int)ov[2*i];
int e = (int)ov[2*i+1];
char *gstr = (s >= 0 && e >= s) ? string_substr(subject, s, e - s) : NULL;
Value gv = make_string(gstr ? gstr : "");
if (gstr) free(gstr);
(void)array_push(&groups, gv);
}
(void)map_set(&res, "groups", groups);
(void)array_push(&out, res);
/* advance start offset; guard against empty match */
if (e0 == s0) {
if ((size_t)e0 < subj_len) {
start_off = e0 + 1;
} else {
break;
}
} else {
start_off = e0;
}
gcount = rc;
}
pcre2_match_data_free(mdata);
pcre2_code_free(re);
free(pattern); free(subject);
push_value(vm, out);
#else
Value a = pop_value(vm); free_value(a);
Value b = pop_value(vm); free_value(b);
Value c = pop_value(vm); free_value(c);
Value vflags = pop_value(vm);
Value vtext = pop_value(vm);
Value vpat = pop_value(vm);
int flags = 0;
if (vflags.type == VAL_INT || vflags.type == VAL_BOOL) flags = (int)vflags.i;
char *pattern = value_to_string_alloc(&vpat);
char *subject = value_to_string_alloc(&vtext);
free_value(vflags);
free_value(vtext);
free_value(vpat);
if (!pattern || !subject) {
if (pattern) free(pattern);
if (subject) free(subject);
push_value(vm, make_array_from_values(NULL, 0));
#endif
break;
}
#ifndef PCRE2_CODE_UNIT_WIDTH
#define PCRE2_CODE_UNIT_WIDTH 8
#endif
#include <pcre2.h>
int errorcode;
PCRE2_SIZE erroff;
uint32_t opt = 0;
if (flags & 1) opt |= PCRE2_CASELESS; /* I */
if (flags & 2) opt |= PCRE2_MULTILINE; /* M */
if (flags & 4) opt |= PCRE2_DOTALL; /* S */
if (flags & 8) opt |= PCRE2_UTF; /* U */
if (flags & 16) opt |= PCRE2_EXTENDED; /* X */
pcre2_code *re = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, opt, &errorcode, &erroff, NULL);
if (!re) {
free(pattern);
free(subject);
push_value(vm, make_array_from_values(NULL, 0));
break;
}
pcre2_match_data *mdata = pcre2_match_data_create_from_pattern(re, NULL);
Value out = make_array_from_values(NULL, 0);
size_t subj_len = strlen(subject);
size_t start_off = 0;
int gcount = 0;
while (1) {
int rc = pcre2_match(re, (PCRE2_SPTR)subject, (PCRE2_SIZE)subj_len, start_off, 0, mdata, NULL);
if (rc <= 0) break;
PCRE2_SIZE *ov = pcre2_get_ovector_pointer(mdata);
int s0 = (int)ov[0];
int e0 = (int)ov[1];
/* result map for this match */
Value res = make_map_empty();
char *full = string_substr(subject, s0, e0 - s0);
(void)map_set(&res, "full", make_string(full ? full : ""));
if (full) free(full);
(void)map_set(&res, "start", make_int(s0));
(void)map_set(&res, "end", make_int(e0));
Value groups = make_array_from_values(NULL, 0);
for (int i = 1; i < rc; ++i) {
int s = (int)ov[2 * i];
int e = (int)ov[2 * i + 1];
char *gstr = (s >= 0 && e >= s) ? string_substr(subject, s, e - s) : NULL;
Value gv = make_string(gstr ? gstr : "");
if (gstr) free(gstr);
(void)array_push(&groups, gv);
}
(void)map_set(&res, "groups", groups);
(void)array_push(&out, res);
/* advance start offset; guard against empty match */
if (e0 == s0) {
if ((size_t)e0 < subj_len) {
start_off = e0 + 1;
} else {
break;
}
} else {
start_off = e0;
}
gcount = rc;
}
pcre2_match_data_free(mdata);
pcre2_code_free(re);
free(pattern);
free(subject);
push_value(vm, out);
#else
Value a = pop_value(vm);
free_value(a);
Value b = pop_value(vm);
free_value(b);
Value c = pop_value(vm);
free_value(c);
push_value(vm, make_array_from_values(NULL, 0));
#endif
break;
}

View file

@ -12,78 +12,85 @@
/* PCRE2_MATCH */
case OP_PCRE2_MATCH: {
#ifdef FUN_WITH_PCRE2
Value vflags = pop_value(vm);
Value vtext = pop_value(vm);
Value vpat = pop_value(vm);
int flags = 0;
if (vflags.type == VAL_INT || vflags.type == VAL_BOOL) flags = (int)vflags.i;
char *pattern = value_to_string_alloc(&vpat);
char *subject = value_to_string_alloc(&vtext);
free_value(vflags);
free_value(vtext);
free_value(vpat);
if (!pattern || !subject) {
if (pattern) free(pattern);
if (subject) free(subject);
push_value(vm, make_nil());
break;
}
#ifndef PCRE2_CODE_UNIT_WIDTH
#define PCRE2_CODE_UNIT_WIDTH 8
#endif
#include <pcre2.h>
int errorcode; PCRE2_SIZE erroff;
uint32_t opt = 0;
if (flags & 1) opt |= PCRE2_CASELESS; /* I */
if (flags & 2) opt |= PCRE2_MULTILINE; /* M */
if (flags & 4) opt |= PCRE2_DOTALL; /* S */
if (flags & 8) opt |= PCRE2_UTF; /* U */
if (flags & 16) opt |= PCRE2_EXTENDED; /* X */
pcre2_code *re = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, opt, &errorcode, &erroff, NULL);
if (!re) {
free(pattern); free(subject);
push_value(vm, make_nil());
break;
}
pcre2_match_data *mdata = pcre2_match_data_create_from_pattern(re, NULL);
int rc = pcre2_match(re, (PCRE2_SPTR)subject, (PCRE2_SIZE)strlen(subject), 0, 0, mdata, NULL);
if (rc <= 0) {
pcre2_match_data_free(mdata);
pcre2_code_free(re);
free(pattern); free(subject);
push_value(vm, make_nil());
break;
}
PCRE2_SIZE *ov = pcre2_get_ovector_pointer(mdata);
/* Build result map */
Value res = make_map_empty();
int start0 = (int)ov[0];
int end0 = (int)ov[1];
char *full = string_substr(subject, start0, end0 - start0);
(void)map_set(&res, "full", make_string(full ? full : ""));
if (full) free(full);
(void)map_set(&res, "start", make_int(start0));
(void)map_set(&res, "end", make_int(end0));
/* groups array (excluding group 0) */
Value groups = make_array_from_values(NULL, 0);
for (int i = 1; i < rc; ++i) {
int s = (int)ov[2*i];
int e = (int)ov[2*i+1];
char *gstr = (s >= 0 && e >= s) ? string_substr(subject, s, e - s) : NULL;
Value gv = make_string(gstr ? gstr : "");
if (gstr) free(gstr);
(void)array_push(&groups, gv);
}
(void)map_set(&res, "groups", groups);
Value vflags = pop_value(vm);
Value vtext = pop_value(vm);
Value vpat = pop_value(vm);
int flags = 0;
if (vflags.type == VAL_INT || vflags.type == VAL_BOOL) flags = (int)vflags.i;
char *pattern = value_to_string_alloc(&vpat);
char *subject = value_to_string_alloc(&vtext);
free_value(vflags);
free_value(vtext);
free_value(vpat);
if (!pattern || !subject) {
if (pattern) free(pattern);
if (subject) free(subject);
push_value(vm, make_nil());
break;
}
#ifndef PCRE2_CODE_UNIT_WIDTH
#define PCRE2_CODE_UNIT_WIDTH 8
#endif
#include <pcre2.h>
int errorcode;
PCRE2_SIZE erroff;
uint32_t opt = 0;
if (flags & 1) opt |= PCRE2_CASELESS; /* I */
if (flags & 2) opt |= PCRE2_MULTILINE; /* M */
if (flags & 4) opt |= PCRE2_DOTALL; /* S */
if (flags & 8) opt |= PCRE2_UTF; /* U */
if (flags & 16) opt |= PCRE2_EXTENDED; /* X */
pcre2_code *re = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, opt, &errorcode, &erroff, NULL);
if (!re) {
free(pattern);
free(subject);
push_value(vm, make_nil());
break;
}
pcre2_match_data *mdata = pcre2_match_data_create_from_pattern(re, NULL);
int rc = pcre2_match(re, (PCRE2_SPTR)subject, (PCRE2_SIZE)strlen(subject), 0, 0, mdata, NULL);
if (rc <= 0) {
pcre2_match_data_free(mdata);
pcre2_code_free(re);
free(pattern); free(subject);
push_value(vm, res);
#else
Value a = pop_value(vm); free_value(a);
Value b = pop_value(vm); free_value(b);
Value c = pop_value(vm); free_value(c);
free(pattern);
free(subject);
push_value(vm, make_nil());
#endif
break;
}
PCRE2_SIZE *ov = pcre2_get_ovector_pointer(mdata);
/* Build result map */
Value res = make_map_empty();
int start0 = (int)ov[0];
int end0 = (int)ov[1];
char *full = string_substr(subject, start0, end0 - start0);
(void)map_set(&res, "full", make_string(full ? full : ""));
if (full) free(full);
(void)map_set(&res, "start", make_int(start0));
(void)map_set(&res, "end", make_int(end0));
/* groups array (excluding group 0) */
Value groups = make_array_from_values(NULL, 0);
for (int i = 1; i < rc; ++i) {
int s = (int)ov[2 * i];
int e = (int)ov[2 * i + 1];
char *gstr = (s >= 0 && e >= s) ? string_substr(subject, s, e - s) : NULL;
Value gv = make_string(gstr ? gstr : "");
if (gstr) free(gstr);
(void)array_push(&groups, gv);
}
(void)map_set(&res, "groups", groups);
pcre2_match_data_free(mdata);
pcre2_code_free(re);
free(pattern);
free(subject);
push_value(vm, res);
#else
Value a = pop_value(vm);
free_value(a);
Value b = pop_value(vm);
free_value(b);
Value c = pop_value(vm);
free_value(c);
push_value(vm, make_nil());
#endif
break;
}

View file

@ -12,51 +12,57 @@
/* PCRE2_TEST */
case OP_PCRE2_TEST: {
#ifdef FUN_WITH_PCRE2
Value vflags = pop_value(vm);
Value vtext = pop_value(vm);
Value vpat = pop_value(vm);
int flags = 0;
if (vflags.type == VAL_INT || vflags.type == VAL_BOOL) flags = (int)vflags.i;
char *pattern = value_to_string_alloc(&vpat);
char *subject = value_to_string_alloc(&vtext);
free_value(vflags);
free_value(vtext);
free_value(vpat);
if (!pattern || !subject) {
if (pattern) free(pattern);
if (subject) free(subject);
push_value(vm, make_int(0));
break;
}
#ifndef PCRE2_CODE_UNIT_WIDTH
#define PCRE2_CODE_UNIT_WIDTH 8
#endif
#include <pcre2.h>
int errorcode; PCRE2_SIZE erroff;
uint32_t opt = 0;
if (flags & 1) opt |= PCRE2_CASELESS; /* I */
if (flags & 2) opt |= PCRE2_MULTILINE; /* M */
if (flags & 4) opt |= PCRE2_DOTALL; /* S */
if (flags & 8) opt |= PCRE2_UTF; /* U */
if (flags & 16) opt |= PCRE2_EXTENDED; /* X */
pcre2_code *re = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, opt, &errorcode, &erroff, NULL);
if (!re) {
free(pattern); free(subject);
push_value(vm, make_int(0));
break;
}
pcre2_match_data *mdata = pcre2_match_data_create_from_pattern(re, NULL);
int rc = pcre2_match(re, (PCRE2_SPTR)subject, (PCRE2_SIZE)strlen(subject), 0, 0, mdata, NULL);
pcre2_match_data_free(mdata);
pcre2_code_free(re);
free(pattern); free(subject);
push_value(vm, make_int(rc >= 0 ? 1 : 0));
#else
/* pop args and return 0 when PCRE2 disabled */
Value a = pop_value(vm); free_value(a);
Value b = pop_value(vm); free_value(b);
Value c = pop_value(vm); free_value(c);
Value vflags = pop_value(vm);
Value vtext = pop_value(vm);
Value vpat = pop_value(vm);
int flags = 0;
if (vflags.type == VAL_INT || vflags.type == VAL_BOOL) flags = (int)vflags.i;
char *pattern = value_to_string_alloc(&vpat);
char *subject = value_to_string_alloc(&vtext);
free_value(vflags);
free_value(vtext);
free_value(vpat);
if (!pattern || !subject) {
if (pattern) free(pattern);
if (subject) free(subject);
push_value(vm, make_int(0));
#endif
break;
}
#ifndef PCRE2_CODE_UNIT_WIDTH
#define PCRE2_CODE_UNIT_WIDTH 8
#endif
#include <pcre2.h>
int errorcode;
PCRE2_SIZE erroff;
uint32_t opt = 0;
if (flags & 1) opt |= PCRE2_CASELESS; /* I */
if (flags & 2) opt |= PCRE2_MULTILINE; /* M */
if (flags & 4) opt |= PCRE2_DOTALL; /* S */
if (flags & 8) opt |= PCRE2_UTF; /* U */
if (flags & 16) opt |= PCRE2_EXTENDED; /* X */
pcre2_code *re = pcre2_compile((PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, opt, &errorcode, &erroff, NULL);
if (!re) {
free(pattern);
free(subject);
push_value(vm, make_int(0));
break;
}
pcre2_match_data *mdata = pcre2_match_data_create_from_pattern(re, NULL);
int rc = pcre2_match(re, (PCRE2_SPTR)subject, (PCRE2_SIZE)strlen(subject), 0, 0, mdata, NULL);
pcre2_match_data_free(mdata);
pcre2_code_free(re);
free(pattern);
free(subject);
push_value(vm, make_int(rc >= 0 ? 1 : 0));
#else
/* pop args and return 0 when PCRE2 disabled */
Value a = pop_value(vm);
free_value(a);
Value b = pop_value(vm);
free_value(b);
Value c = pop_value(vm);
free_value(c);
push_value(vm, make_int(0));
#endif
break;
}