projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
fix varargs support
[m6w6/ext-psi]
/
src
/
engine.c
diff --git
a/src/engine.c
b/src/engine.c
index 447e0d7f2b8983d6d4092401c9b7389e88b09408..aa4feeb87d1e0e5ef66e0cede6d1fe1c76bf2ab3 100644
(file)
--- a/
src/engine.c
+++ b/
src/engine.c
@@
-449,7
+449,8
@@
static inline impl_vararg *psi_do_varargs(impl *impl) {
for (i = 0, j = 0; i < vacount; ++i) {
impl_arg *vaarg = va->args->args[i];
void *to_free = NULL;
for (i = 0, j = 0; i < vacount; ++i) {
impl_arg *vaarg = va->args->args[i];
void *to_free = NULL;
- token_t let_fn, vatype = va->name->type->type;
+ token_t vatype = va->name->type->type;
+ let_func_handler let_fn;
if (vatype == PSI_T_MIXED) {
switch (Z_TYPE_P(vaarg->_zv)) {
if (vatype == PSI_T_MIXED) {
switch (Z_TYPE_P(vaarg->_zv)) {
@@
-463,17
+464,19
@@
static inline impl_vararg *psi_do_varargs(impl *impl) {
switch (vatype) {
switch (vatype) {
- case PSI_T_BOOL: let_fn =
PSI_T_BOOLVAL;
break;
- case PSI_T_INT: let_fn =
PSI_T_INTVAL;
break;
+ case PSI_T_BOOL: let_fn =
psi_let_boolval;
break;
+ case PSI_T_INT: let_fn =
psi_let_intval;
break;
case PSI_T_FLOAT:
case PSI_T_FLOAT:
- case PSI_T_DOUBLE: let_fn =
PSI_T_FLOATVAL;
break;
- case PSI_T_STRING: let_fn =
PSI_T_STRVAL;
break;
+ case PSI_T_DOUBLE: let_fn =
psi_let_floatval;
break;
+ case PSI_T_STRING: let_fn =
psi_let_strval;
break;
EMPTY_SWITCH_DEFAULT_CASE();
}
va->types[i] = vatype;
EMPTY_SWITCH_DEFAULT_CASE();
}
va->types[i] = vatype;
+
/* FIXME: varargs with struct-by-value :) */
/* FIXME: varargs with struct-by-value :) */
- if (!psi_let_val(let_fn, vaarg, &va->values[i], NULL, &to_free)) {
+ //if (!psi_let_val(let_fn, vaarg, &va->values[i], NULL, &to_free)) {
+ if (!let_fn(&va->values[i], NULL, vaarg, &to_free)) {
return NULL;
}
return NULL;
}