(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 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;
} }