1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-12 14:14:48 +02:00

core: move the extra_vars_eval argument after extra_vars

This commit is contained in:
Sébastien Helleu
2016-08-18 21:42:13 +02:00
parent c6b3c9d79b
commit c74c55759a
+48 -46
View File
@@ -50,9 +50,8 @@ char *comparisons[EVAL_NUM_COMPARISONS] =
{ "=~", "!~", "==", "!=", "<=", "<", ">=", ">" };
char *eval_replace_vars (const char *expr, struct t_hashtable *pointers,
struct t_hashtable *extra_vars,
struct t_hashtable *extra_vars, int extra_vars_eval,
const char *prefix, const char *suffix,
int extra_vars_eval,
struct t_eval_regex *eval_regex);
@@ -256,7 +255,7 @@ eval_replace_vars_cb (void *data, const char *text)
const char *prefix, *suffix, *ptr_value, *ptr_arguments, *ptr_string;
struct t_hdata *hdata;
void *pointer;
int extra_vars_eval, i, length_hide_char, length, index, rc;
int i, length_hide_char, length, index, rc, extra_vars_eval;
long number;
long unsigned int ptr;
time_t date;
@@ -264,9 +263,9 @@ eval_replace_vars_cb (void *data, const char *text)
pointers = (struct t_hashtable *)(((void **)data)[0]);
extra_vars = (struct t_hashtable *)(((void **)data)[1]);
prefix = (const char *)(((void **)data)[2]);
suffix = (const char *)(((void **)data)[3]);
extra_vars_eval = *(int *)(((void **)data)[4]);
extra_vars_eval = *(int *)(((void **)data)[2]);
prefix = (const char *)(((void **)data)[3]);
suffix = (const char *)(((void **)data)[4]);
eval_regex = (struct t_eval_regex *)(((void **)data)[5]);
/* 1. variable in hashtable "extra_vars" */
@@ -277,12 +276,15 @@ eval_replace_vars_cb (void *data, const char *text)
{
if (extra_vars_eval)
{
return eval_replace_vars (ptr_value, pointers, extra_vars,
prefix, suffix, extra_vars_eval,
return eval_replace_vars (ptr_value, pointers,
extra_vars, extra_vars_eval,
prefix, suffix,
eval_regex);
}
else
{
return strdup (ptr_value);
}
}
}
@@ -292,8 +294,9 @@ eval_replace_vars_cb (void *data, const char *text)
*/
if (strncmp (text, "eval:", 5) == 0)
{
return eval_replace_vars (text + 5, pointers, extra_vars,
prefix, suffix, extra_vars_eval,
return eval_replace_vars (text + 5, pointers,
extra_vars, extra_vars_eval,
prefix, suffix,
eval_regex);
}
@@ -528,18 +531,17 @@ end:
char *
eval_replace_vars (const char *expr, struct t_hashtable *pointers,
struct t_hashtable *extra_vars,
struct t_hashtable *extra_vars, int extra_vars_eval,
const char *prefix, const char *suffix,
int extra_vars_eval,
struct t_eval_regex *eval_regex)
{
const void *ptr[6];
ptr[0] = pointers;
ptr[1] = extra_vars;
ptr[2] = prefix;
ptr[3] = suffix;
ptr[4] = &extra_vars_eval;
ptr[2] = &extra_vars_eval;
ptr[3] = prefix;
ptr[4] = suffix;
ptr[5] = eval_regex;
return string_replace_with_callback (expr, prefix, suffix,
@@ -705,9 +707,9 @@ char *
eval_expression_condition (const char *expr,
struct t_hashtable *pointers,
struct t_hashtable *extra_vars,
int extra_vars_eval,
const char *prefix,
const char *suffix,
int extra_vars_eval)
const char *suffix)
{
int logic, comp, length, level, rc;
const char *pos, *pos_end;
@@ -761,9 +763,8 @@ eval_expression_condition (const char *expr,
if (!sub_expr)
goto end;
tmp_value = eval_expression_condition (sub_expr, pointers,
extra_vars,
prefix, suffix,
extra_vars_eval);
extra_vars, extra_vars_eval,
prefix, suffix);
free (sub_expr);
rc = eval_is_true (tmp_value);
if (tmp_value)
@@ -783,9 +784,9 @@ eval_expression_condition (const char *expr,
{
pos++;
}
tmp_value = eval_expression_condition (pos, pointers, extra_vars,
prefix, suffix,
extra_vars_eval);
tmp_value = eval_expression_condition (pos, pointers,
extra_vars, extra_vars_eval,
prefix, suffix);
rc = eval_is_true (tmp_value);
if (tmp_value)
free (tmp_value);
@@ -824,14 +825,12 @@ eval_expression_condition (const char *expr,
{
/* for regex: just replace vars in both expressions */
tmp_value = eval_replace_vars (sub_expr, pointers,
extra_vars,
extra_vars, extra_vars_eval,
prefix, suffix,
extra_vars_eval,
NULL);
tmp_value2 = eval_replace_vars (pos, pointers,
extra_vars,
extra_vars, extra_vars_eval,
prefix, suffix,
extra_vars_eval,
NULL);
}
else
@@ -839,12 +838,12 @@ eval_expression_condition (const char *expr,
/* other comparison: fully evaluate both expressions */
tmp_value = eval_expression_condition (sub_expr, pointers,
extra_vars,
prefix, suffix,
extra_vars_eval);
extra_vars_eval,
prefix, suffix);
tmp_value2 = eval_expression_condition (pos, pointers,
extra_vars,
prefix, suffix,
extra_vars_eval);
extra_vars_eval,
prefix, suffix);
}
free (sub_expr);
value = eval_compare (tmp_value, comp, tmp_value2);
@@ -882,8 +881,9 @@ eval_expression_condition (const char *expr,
sub_expr = string_strndup (expr2 + 1, pos - expr2 - 1);
if (!sub_expr)
goto end;
tmp_value = eval_expression_condition (sub_expr, pointers, extra_vars,
prefix, suffix, extra_vars_eval);
tmp_value = eval_expression_condition (sub_expr, pointers,
extra_vars, extra_vars_eval,
prefix, suffix);
free (sub_expr);
if (!pos[1])
{
@@ -918,8 +918,8 @@ eval_expression_condition (const char *expr,
* at this point, there is no more logical operator neither comparison,
* so we just replace variables in string and return the result
*/
value = eval_replace_vars (expr2, pointers, extra_vars, prefix, suffix,
extra_vars_eval, NULL);
value = eval_replace_vars (expr2, pointers, extra_vars, extra_vars_eval,
prefix, suffix, NULL);
end:
if (expr2)
@@ -955,9 +955,8 @@ end:
char *
eval_replace_regex (const char *string, regex_t *regex, const char *replace,
struct t_hashtable *pointers,
struct t_hashtable *extra_vars,
const char *prefix, const char *suffix,
int extra_vars_eval)
struct t_hashtable *extra_vars, int extra_vars_eval,
const char *prefix, const char *suffix)
{
char *result, *result2, *str_replace;
int length, length_replace, start_offset, i, rc, end;
@@ -1010,8 +1009,9 @@ eval_replace_regex (const char *string, regex_t *regex, const char *replace,
eval_regex.result = result;
str_replace = eval_replace_vars (replace, pointers, extra_vars,
prefix, suffix, extra_vars_eval,
str_replace = eval_replace_vars (replace, pointers,
extra_vars, extra_vars_eval,
prefix, suffix,
&eval_regex);
length_replace = (str_replace) ? strlen (str_replace) : 0;
@@ -1200,8 +1200,9 @@ eval_expression (const char *expr, struct t_hashtable *pointers,
if (condition)
{
/* evaluate as condition (return a boolean: "0" or "1") */
value = eval_expression_condition (expr, pointers, extra_vars,
prefix, suffix, extra_vars_eval);
value = eval_expression_condition (expr, pointers,
extra_vars, extra_vars_eval,
prefix, suffix);
rc = eval_is_true (value);
if (value)
free (value);
@@ -1213,14 +1214,15 @@ eval_expression (const char *expr, struct t_hashtable *pointers,
{
/* replace with regex */
value = eval_replace_regex (expr, regex, regex_replace,
pointers, extra_vars,
prefix, suffix, extra_vars_eval);
pointers, extra_vars, extra_vars_eval,
prefix, suffix);
}
else
{
/* only replace variables in expression */
value = eval_replace_vars (expr, pointers, extra_vars,
prefix, suffix, extra_vars_eval, NULL);
value = eval_replace_vars (expr, pointers,
extra_vars, extra_vars_eval,
prefix, suffix, NULL);
}
}