(libretro-db/query.c) No anon unions

This commit is contained in:
twinaphex 2015-09-18 07:03:40 +02:00
parent aed85c1617
commit cd878f81d1
1 changed files with 32 additions and 32 deletions

View File

@ -43,7 +43,7 @@ struct argument
{
struct rmsgpack_dom_value value;
struct invocation invocation;
};
} arg;
};
struct query
@ -170,12 +170,12 @@ static void argument_free(struct argument *arg)
if (arg->type != AT_FUNCTION)
{
rmsgpack_dom_value_free(&arg->value);
rmsgpack_dom_value_free(&arg->arg.value);
return;
}
for (i = 0; i < arg->invocation.argc; i++)
argument_free(&arg->invocation.argv[i]);
for (i = 0; i < arg->arg.invocation.argc; i++)
argument_free(&arg->arg.invocation.argv[i]);
}
static struct buffer parse_argument(struct buffer buff, struct argument *arg,
@ -215,12 +215,12 @@ static struct rmsgpack_dom_value equals(struct rmsgpack_dom_value input,
res.val.bool_ = 0;
else
{
if (input.type == RDT_UINT && arg.value.type == RDT_INT)
if (input.type == RDT_UINT && arg.arg.value.type == RDT_INT)
{
arg.value.type = RDT_UINT;
arg.value.val.uint_ = arg.value.val.int_;
arg.arg.value.type = RDT_UINT;
arg.arg.value.val.uint_ = arg.arg.value.val.int_;
}
res.val.bool_ = (rmsgpack_dom_value_cmp(&input, &arg.value) == 0);
res.val.bool_ = (rmsgpack_dom_value_cmp(&input, &arg.arg.value) == 0);
}
}
return res;
@ -241,9 +241,9 @@ static struct rmsgpack_dom_value operator_or(struct rmsgpack_dom_value input,
res = equals(input, 1, &argv[i]);
else
{
res = is_true(argv[i].invocation.func(input,
argv[i].invocation.argc,
argv[i].invocation.argv
res = is_true(argv[i].arg.invocation.func(input,
argv[i].arg.invocation.argc,
argv[i].arg.invocation.argv
), 0, NULL);
}
@ -269,16 +269,16 @@ static struct rmsgpack_dom_value between(struct rmsgpack_dom_value input,
return res;
if (argv[0].type != AT_VALUE || argv[1].type != AT_VALUE)
return res;
if (argv[0].value.type != RDT_INT || argv[1].value.type != RDT_INT)
if (argv[0].arg.value.type != RDT_INT || argv[1].arg.value.type != RDT_INT)
return res;
switch (input.type)
{
case RDT_INT:
res.val.bool_ = input.val.int_ >= argv[0].value.val.int_ && input.val.int_ <= argv[1].value.val.int_;
res.val.bool_ = (input.val.int_ >= argv[0].arg.value.val.int_) && (input.val.int_ <= argv[1].arg.value.val.int_);
break;
case RDT_UINT:
res.val.bool_ = input.val.int_ >= argv[0].value.val.uint_ && input.val.int_ <= argv[1].value.val.int_;
res.val.bool_ = (input.val.int_ >= argv[0].arg.value.val.uint_) && (input.val.int_ <= argv[1].arg.value.val.int_);
break;
default:
return res;
@ -303,9 +303,9 @@ static struct rmsgpack_dom_value operator_and(struct rmsgpack_dom_value input,
else
{
res = is_true(
argv[i].invocation.func(input,
argv[i].invocation.argc,
argv[i].invocation.argv
argv[i].arg.invocation.func(input,
argv[i].arg.invocation.argc,
argv[i].arg.invocation.argv
),
0, NULL);
}
@ -329,12 +329,12 @@ static struct rmsgpack_dom_value q_glob(struct rmsgpack_dom_value input,
if (argc != 1)
return res;
if (argv[0].type != AT_VALUE || argv[0].value.type != RDT_STRING)
if (argv[0].type != AT_VALUE || argv[0].arg.value.type != RDT_STRING)
return res;
if (input.type != RDT_STRING)
return res;
res.val.bool_ = rl_fnmatch(
argv[0].value.val.string.buff,
argv[0].arg.value.val.string.buff,
input.val.string.buff,
0
) == 0;
@ -371,7 +371,7 @@ static struct rmsgpack_dom_value all_map(struct rmsgpack_dom_value input,
res.val.bool_ = 0;
return res;
}
value = rmsgpack_dom_value_map_value(&input, &arg.value);
value = rmsgpack_dom_value_map_value(&input, &arg.arg.value);
if (!value) /* All missing fields are nil */
value = &nil_value;
arg = argv[i + 1];
@ -379,10 +379,10 @@ static struct rmsgpack_dom_value all_map(struct rmsgpack_dom_value input,
res = equals(*value, 1, &arg);
else
{
res = is_true(arg.invocation.func(
res = is_true(arg.arg.invocation.func(
*value,
arg.invocation.argc,
arg.invocation.argv
arg.arg.invocation.argc,
arg.arg.invocation.argv
), 0, NULL);
value = NULL;
}
@ -727,25 +727,25 @@ static struct buffer parse_table(struct buffer buff,
if (!*error)
{
args[argi].value.type = RDT_STRING;
args[argi].value.val.string.len = ident_len;
args[argi].value.val.string.buff = (char*)calloc(
args[argi].arg.value.type = RDT_STRING;
args[argi].arg.value.val.string.len = ident_len;
args[argi].arg.value.val.string.buff = (char*)calloc(
ident_len + 1,
sizeof(char)
);
if (!args[argi].value.val.string.buff)
if (!args[argi].arg.value.val.string.buff)
goto error;
strncpy(
args[argi].value.val.string.buff,
args[argi].arg.value.val.string.buff,
ident_name,
ident_len
);
}
}
else
buff = parse_string(buff, &args[argi].value, error);
buff = parse_string(buff, &args[argi].arg.value, error);
if (*error)
goto error;
@ -823,17 +823,17 @@ static struct buffer parse_argument(struct buffer buff,
)
{
arg->type = AT_FUNCTION;
buff = parse_method_call(buff, &arg->invocation, error);
buff = parse_method_call(buff, &arg->arg.invocation, error);
}
else if (peek(buff, "{"))
{
arg->type = AT_FUNCTION;
buff = parse_table(buff, &arg->invocation, error);
buff = parse_table(buff, &arg->arg.invocation, error);
}
else
{
arg->type = AT_VALUE;
buff = parse_value(buff, &arg->value, error);
buff = parse_value(buff, &arg->arg.value, error);
}
return buff;
}