static int get_delegation_indirect(const type_t *iface, const type_t ** delegate_to) { const type_t * cur_iface; for (cur_iface = iface; cur_iface != NULL; cur_iface = type_iface_get_inherit(cur_iface)) if (need_delegation(cur_iface)) { if(delegate_to) *delegate_to = type_iface_get_inherit(cur_iface); return 1; } return 0; }
static int compute_method_indexes(type_t *iface) { int idx; statement_t *stmt; if (!iface->details.iface) return 0; if (type_iface_get_inherit(iface)) idx = compute_method_indexes(type_iface_get_inherit(iface)); else idx = 0; STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) ) { var_t *func = stmt->u.var; if (!is_callas(func->attrs)) func->type->details.function->idx = idx++; }
static int need_delegation(const type_t *iface) { const type_t *parent = type_iface_get_inherit( iface ); return parent && type_iface_get_inherit(parent) && (parent->ignore || is_local( parent->attrs )); }
static int need_delegation(const type_t *iface) { return type_iface_get_inherit(iface) && type_iface_get_inherit(type_iface_get_inherit(iface)) && type_iface_get_inherit(iface)->ignore; }