(libretro-db/query.c) No anon unions
This commit is contained in:
parent
aed85c1617
commit
cd878f81d1
|
@ -43,7 +43,7 @@ struct argument
|
||||||
{
|
{
|
||||||
struct rmsgpack_dom_value value;
|
struct rmsgpack_dom_value value;
|
||||||
struct invocation invocation;
|
struct invocation invocation;
|
||||||
};
|
} arg;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct query
|
struct query
|
||||||
|
@ -170,12 +170,12 @@ static void argument_free(struct argument *arg)
|
||||||
|
|
||||||
if (arg->type != AT_FUNCTION)
|
if (arg->type != AT_FUNCTION)
|
||||||
{
|
{
|
||||||
rmsgpack_dom_value_free(&arg->value);
|
rmsgpack_dom_value_free(&arg->arg.value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < arg->invocation.argc; i++)
|
for (i = 0; i < arg->arg.invocation.argc; i++)
|
||||||
argument_free(&arg->invocation.argv[i]);
|
argument_free(&arg->arg.invocation.argv[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct buffer parse_argument(struct buffer buff, struct argument *arg,
|
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;
|
res.val.bool_ = 0;
|
||||||
else
|
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.arg.value.type = RDT_UINT;
|
||||||
arg.value.val.uint_ = arg.value.val.int_;
|
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;
|
return res;
|
||||||
|
@ -241,9 +241,9 @@ static struct rmsgpack_dom_value operator_or(struct rmsgpack_dom_value input,
|
||||||
res = equals(input, 1, &argv[i]);
|
res = equals(input, 1, &argv[i]);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res = is_true(argv[i].invocation.func(input,
|
res = is_true(argv[i].arg.invocation.func(input,
|
||||||
argv[i].invocation.argc,
|
argv[i].arg.invocation.argc,
|
||||||
argv[i].invocation.argv
|
argv[i].arg.invocation.argv
|
||||||
), 0, NULL);
|
), 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,16 +269,16 @@ static struct rmsgpack_dom_value between(struct rmsgpack_dom_value input,
|
||||||
return res;
|
return res;
|
||||||
if (argv[0].type != AT_VALUE || argv[1].type != AT_VALUE)
|
if (argv[0].type != AT_VALUE || argv[1].type != AT_VALUE)
|
||||||
return res;
|
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;
|
return res;
|
||||||
|
|
||||||
switch (input.type)
|
switch (input.type)
|
||||||
{
|
{
|
||||||
case RDT_INT:
|
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;
|
break;
|
||||||
case RDT_UINT:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
return res;
|
return res;
|
||||||
|
@ -303,9 +303,9 @@ static struct rmsgpack_dom_value operator_and(struct rmsgpack_dom_value input,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res = is_true(
|
res = is_true(
|
||||||
argv[i].invocation.func(input,
|
argv[i].arg.invocation.func(input,
|
||||||
argv[i].invocation.argc,
|
argv[i].arg.invocation.argc,
|
||||||
argv[i].invocation.argv
|
argv[i].arg.invocation.argv
|
||||||
),
|
),
|
||||||
0, NULL);
|
0, NULL);
|
||||||
}
|
}
|
||||||
|
@ -329,12 +329,12 @@ static struct rmsgpack_dom_value q_glob(struct rmsgpack_dom_value input,
|
||||||
|
|
||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
return res;
|
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;
|
return res;
|
||||||
if (input.type != RDT_STRING)
|
if (input.type != RDT_STRING)
|
||||||
return res;
|
return res;
|
||||||
res.val.bool_ = rl_fnmatch(
|
res.val.bool_ = rl_fnmatch(
|
||||||
argv[0].value.val.string.buff,
|
argv[0].arg.value.val.string.buff,
|
||||||
input.val.string.buff,
|
input.val.string.buff,
|
||||||
0
|
0
|
||||||
) == 0;
|
) == 0;
|
||||||
|
@ -371,7 +371,7 @@ static struct rmsgpack_dom_value all_map(struct rmsgpack_dom_value input,
|
||||||
res.val.bool_ = 0;
|
res.val.bool_ = 0;
|
||||||
return res;
|
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 */
|
if (!value) /* All missing fields are nil */
|
||||||
value = &nil_value;
|
value = &nil_value;
|
||||||
arg = argv[i + 1];
|
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);
|
res = equals(*value, 1, &arg);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res = is_true(arg.invocation.func(
|
res = is_true(arg.arg.invocation.func(
|
||||||
*value,
|
*value,
|
||||||
arg.invocation.argc,
|
arg.arg.invocation.argc,
|
||||||
arg.invocation.argv
|
arg.arg.invocation.argv
|
||||||
), 0, NULL);
|
), 0, NULL);
|
||||||
value = NULL;
|
value = NULL;
|
||||||
}
|
}
|
||||||
|
@ -727,25 +727,25 @@ static struct buffer parse_table(struct buffer buff,
|
||||||
|
|
||||||
if (!*error)
|
if (!*error)
|
||||||
{
|
{
|
||||||
args[argi].value.type = RDT_STRING;
|
args[argi].arg.value.type = RDT_STRING;
|
||||||
args[argi].value.val.string.len = ident_len;
|
args[argi].arg.value.val.string.len = ident_len;
|
||||||
args[argi].value.val.string.buff = (char*)calloc(
|
args[argi].arg.value.val.string.buff = (char*)calloc(
|
||||||
ident_len + 1,
|
ident_len + 1,
|
||||||
sizeof(char)
|
sizeof(char)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!args[argi].value.val.string.buff)
|
if (!args[argi].arg.value.val.string.buff)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
strncpy(
|
strncpy(
|
||||||
args[argi].value.val.string.buff,
|
args[argi].arg.value.val.string.buff,
|
||||||
ident_name,
|
ident_name,
|
||||||
ident_len
|
ident_len
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
buff = parse_string(buff, &args[argi].value, error);
|
buff = parse_string(buff, &args[argi].arg.value, error);
|
||||||
|
|
||||||
if (*error)
|
if (*error)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -823,17 +823,17 @@ static struct buffer parse_argument(struct buffer buff,
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
arg->type = AT_FUNCTION;
|
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, "{"))
|
else if (peek(buff, "{"))
|
||||||
{
|
{
|
||||||
arg->type = AT_FUNCTION;
|
arg->type = AT_FUNCTION;
|
||||||
buff = parse_table(buff, &arg->invocation, error);
|
buff = parse_table(buff, &arg->arg.invocation, error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
arg->type = AT_VALUE;
|
arg->type = AT_VALUE;
|
||||||
buff = parse_value(buff, &arg->value, error);
|
buff = parse_value(buff, &arg->arg.value, error);
|
||||||
}
|
}
|
||||||
return buff;
|
return buff;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue