#define PSI_PREDEF_STRUCT_MEMBERS 32
typedef struct psi_predef_struct {
const char *name;
+ size_t size;
psi_predef_struct_member members[PSI_PREDEF_STRUCT_MEMBERS];
} psi_predef_struct;
static const psi_predef_struct psi_predef_structs[] = {
}
if (!(*dlopened = dlopen(ptr, RTLD_LAZY|RTLD_LOCAL))) {
data->error(PSI_WARNING, "Could not open library '%s': %s.",
- data->psi.file.fn, dlerror());
+ data->psi.file.ln, dlerror());
return 0;
}
return 1;
return 0;
}
- ZEND_ASSERT(!darg->var->arg);
+ ZEND_ASSERT(!darg->var->arg || darg->var->arg == darg);
darg->var->arg = darg;
if (!darg->layout) {
#endif
decl->dlptr = dlsym(dl ?: RTLD_NEXT, func->var->name);
if (!decl->dlptr) {
- data->error(PSI_WARNING, "Failed to located symbol '%s': %s",
+ data->error(PSI_WARNING, "Failed to locate symbol '%s': %s",
func->var->name, dlerror());
}
return 1;
}
return 1;
}
-
+static inline int validate_set_value(PSI_Data *data, set_value *set) {
+ set->
+}
static inline decl *locate_impl_decl(decls *decls, return_stmt *ret) {
size_t i;
}
return 0;
}
+ if (!validate_impl_set_value(data, impl->stmts->ret.list[0]->set)) {
+ return 0;
+ }
if (!(impl->decl = locate_impl_decl(data->decls, impl->stmts->ret.list[0]))) {
data->error(PSI_WARNING, "Missing declaration for implementation %s",
impl->func->name);
}
dstruct = init_decl_struct(pre->name, dargs);
+ dstruct->size = pre->size;
T.structs = add_decl_struct(T.structs, dstruct);
}