projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
glob
[m6w6/ext-psi]
/
src
/
parser.h
diff --git
a/src/parser.h
b/src/parser.h
index 67252e24855b9aa5cae8c0a68c01def1e2587d3b..9309ab10211ac9951da14ffe0718e6174e4e2447 100644
(file)
--- a/
src/parser.h
+++ b/
src/parser.h
@@
-234,7
+234,12
@@
typedef struct decl {
decl_abi *abi;
decl_arg *func;
decl_args *args;
decl_abi *abi;
decl_arg *func;
decl_args *args;
- void *dlptr;
+ struct impl *impl;
+ struct {
+ void *sym;
+ void *info;
+ void **args;
+ } call;
} decl;
static inline decl* init_decl(decl_abi *abi, decl_arg *func, decl_args *args) {
} decl;
static inline decl* init_decl(decl_abi *abi, decl_arg *func, decl_args *args) {
@@
-346,7
+351,7
@@
typedef union impl_val {
static inline impl_val *deref_impl_val(impl_val *ret_val, decl_var *var) {
unsigned i;
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;
ret_val = *(void **) ret_val;
}
return ret_val;
@@
-359,7
+364,7
@@
static inline impl_val *enref_impl_val(void *ptr, decl_var *var) {
if (!var->pointer_level && real_decl_type(var->arg->type)->type != PSI_T_STRUCT) {
return ptr;
}
if (!var->pointer_level && real_decl_type(var->arg->type)->type != PSI_T_STRUCT) {
return ptr;
}
- val = val_ptr = calloc(var->pointer_level, sizeof(void *));
+ val = val_ptr = calloc(var->pointer_level
+ 1
, sizeof(void *));
for (i = 1; i < var->pointer_level; ++i) {
val_ptr->ptr = (void **) val_ptr + 1;
val_ptr = val_ptr->ptr;
for (i = 1; i < var->pointer_level; ++i) {
val_ptr->ptr = (void **) val_ptr + 1;
val_ptr = val_ptr->ptr;
@@
-590,7
+595,7
@@
struct set_value;
typedef struct set_func {
token_t type;
char *name;
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) {
} set_func;
static inline set_func *init_set_func(token_t type, const char *name) {
@@
-608,6
+613,10
@@
static inline void free_set_func(set_func *func) {
typedef struct set_value {
set_func *func;
decl_vars *vars;
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;
struct set_value **inner;
size_t count;
} set_value;