Skip to content

Commit

Permalink
Fix some thinkos; drop using a get_bool v-table override as the way w…
Browse files Browse the repository at this point in the history
…e implement 6modelobject's get_bool v-table.
  • Loading branch information
jnthn committed Sep 3, 2011
1 parent ca42584 commit 5d6850e
Showing 1 changed file with 8 additions and 22 deletions.
30 changes: 8 additions & 22 deletions src/pmc/sixmodelobject.pmc
Original file line number Diff line number Diff line change
Expand Up @@ -204,46 +204,32 @@ pmclass SixModelObject manual_attrs dynpmc group nqp {
old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
cappy = Parrot_pmc_new(interp, enum_class_CallContext);
VTABLE_push_pmc(interp, cappy, SELF);
Parrot_pcc_invoke_from_sig_object(interp, STABLE(SELF)->boolification_spec->method, cappy);
Parrot_pcc_invoke_from_sig_object(interp, STABLE(decont)->boolification_spec->method, cappy);
cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx);
return VTABLE_get_bool(interp, VTABLE_get_pmc_keyed_int(interp, cappy, 0));
case BOOL_MODE_UNBOX_INT:
return REPR(decont)->get_int(interp, SELF);
return REPR(decont)->get_int(interp, decont);
case BOOL_MODE_UNBOX_NUM:
unnum = REPR(decont)->get_num(interp, SELF);
unnum = REPR(decont)->get_num(interp, decont);
return unnum != 0.0;
case BOOL_MODE_UNBOX_STR_NOT_EMPTY:
unstr = REPR(decont)->get_str(interp, SELF);
unstr = REPR(decont)->get_str(interp, decont);
return !STRING_IS_NULL(unstr) &&
!Parrot_str_equal(interp, unstr, CONST_STRING(interp, ""));
case BOOL_MODE_UNBOX_STR_NOT_EMPTY_OR_ZERO:
unstr = REPR(decont)->get_str(interp, SELF);
unstr = REPR(decont)->get_str(interp, decont);
return !STRING_IS_NULL(unstr) &&
!Parrot_str_equal(interp, unstr, CONST_STRING(interp, "")) &&
!Parrot_str_equal(interp, unstr, CONST_STRING(interp, "0"));
case BOOL_MODE_NOT_TYPE_OBJECT:
return REPR(decont)->defined(interp, SELF);
return REPR(decont)->defined(interp, decont);
default:
return SUPER();
}
}
else {
/* XXX This goes away once everything uses new boolification stuff. */
PMC **vt = STABLE(decont)->parrot_vtable_mapping;
PMC *meth;
if (vt && !PMC_IS_NULL(meth = vt[PARROT_VTABLE_SLOT_GET_BOOL])) {
PMC *old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
PMC *cappy = Parrot_pmc_new(interp, enum_class_CallContext);
VTABLE_push_pmc(interp, cappy, decont);
Parrot_pcc_invoke_from_sig_object(interp, meth, cappy);
cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx);
return VTABLE_get_bool(interp, VTABLE_get_pmc_keyed_int(interp, cappy, 0));
}
else
return SUPER();
}
else
return SUPER();
}

VTABLE PMC * get_pmc_keyed(PMC *key) {
Expand Down

0 comments on commit 5d6850e

Please sign in to comment.