decl_arg *arg = calloc(1, sizeof(*arg));
arg->type = type;
arg->var = var;
+ var->arg = arg;
return arg;
}
typedef union impl_val {
char cval;
int8_t i8;
+ uint8_t u8;
short sval;
int16_t i16;
+ uint16_t u16;
int ival;
int32_t i32;
+ uint32_t u32;
long lval;
int64_t i64;
+ uint64_t u64;
float fval;
double dval;
union {
static inline impl_val *deref_impl_val(impl_val *ret_val, decl_var *var) {
unsigned i;
- if (var->arg->var != var) for (i = 0; i < var->pointer_level; ++i) {
+ if (var->arg->var != var) for (i = 1; i < var->pointer_level; ++i) {
ret_val = *(void **) ret_val;
}
return ret_val;
typedef struct set_func {
token_t type;
char *name;
- void (*handler)(zval *, token_t, impl_val *, struct set_value *set, decl_var *);
+ void (*handler)(zval *, struct set_value *set, impl_val *ret_val);
} set_func;
static inline set_func *init_set_func(token_t type, const char *name) {
typedef struct set_value {
set_func *func;
decl_vars *vars;
+ struct {
+ struct set_value *set;
+ impl_val *val;
+ } outer;
struct set_value **inner;
size_t count;
} set_value;
PSI_Token *T;
size_t token_len;
- if (P->cur <= P->tok) {
+ if (P->cur < P->tok) {
return NULL;
}