Author: pmichaud
Date: Thu Oct 13 06:33:57 2005
New Revision: 9477
Modified:
trunk/classes/parrotobject.pmc
trunk/t/pmc/object-meths.t
Log:
Added other *_keyed_int methods for parrot objects.
Modified: trunk/classes/parrotobject.pmc
==============================================================================
--- trunk/classes/parrotobject.pmc (original)
+++ trunk/classes/parrotobject.pmc Thu Oct 13 06:33:57 2005
@@ -189,8 +189,14 @@ Return the class of this object.
=item C<void set_pmc_keyed_int (INTVAL key, PMC* value)>
-These methods have default implmentations in F<classes/default.pmc>
-which redirct to PMC keys. Test if a specialized method exists, else
+=item C<void delete_keyed_int(INTVAL key)>
+
+=item C<INTVAL defined_keyed_int(INTVAL key)>
+
+=item C<INTVAL exists_keyed_int(INTVAL key)>
+
+These methods have default implementations in F<classes/default.pmc>
+which redirect to PMC keys. Test if a specialized method exists, else
use fallback.
=cut
@@ -285,6 +291,39 @@ use fallback.
SUPER(key, value);
}
+ void delete_keyed_int (INTVAL key) {
+ STRING *meth = CONST_STRING(interpreter, "__delete_keyed_int");
+ PMC *sub = find_meth(interpreter, pmc, meth);
+ if (sub) {
+ (void) Parrot_run_meth_fromc_args(interpreter, sub,
+ pmc, meth, "vI", key);
+ }
+ else
+ SUPER(key);
+ }
+
+ INTVAL defined_keyed_int (INTVAL key) {
+ STRING *meth = CONST_STRING(interpreter, "__defined_keyed_int");
+ PMC *sub = find_meth(interpreter, pmc, meth);
+ if (sub) {
+ (void) Parrot_run_meth_fromc_args_reti(interpreter, sub,
+ pmc, meth, "II", key);
+ }
+ else
+ SUPER(key);
+ }
+
+ INTVAL exists_keyed_int (INTVAL key) {
+ STRING *meth = CONST_STRING(interpreter, "__exists_keyed_int");
+ PMC *sub = find_meth(interpreter, pmc, meth);
+ if (sub) {
+ (void) Parrot_run_meth_fromc_args_reti(interpreter, sub,
+ pmc, meth, "II", key);
+ }
+ else
+ SUPER(key);
+ }
+
/*
=item C<void visit(visit_info *info)>
Modified: trunk/t/pmc/object-meths.t
==============================================================================
--- trunk/t/pmc/object-meths.t (original)
+++ trunk/t/pmc/object-meths.t Thu Oct 13 06:33:57 2005
@@ -1019,6 +1019,12 @@ pir_output_is(<<'CODE', <<'OUTPUT', "del
$S0 = "foo"
o[$I0] = 42
o[$S0] = 42
+ delete o[$I0]
+ delete o[$S0]
+ $I1 = defined o[$I0]
+ $I1 = defined o[$S0]
+ $I1 = exists o[$I0]
+ $I1 = exists o[$S0]
.end
.namespace ["MyClass"]
@@ -1035,9 +1041,49 @@ pir_output_is(<<'CODE', <<'OUTPUT', "del
print "skey\n"
.end
+.sub __delete_keyed_int :method
+ .param int key
+ print "del_ikey\n"
+.end
+
+.sub __delete_keyed :method
+ .param string key
+ print "del_skey\n"
+.end
+
+.sub __defined_keyed_int :method
+ .param int key
+ print "def_ikey\n"
+ .return (0)
+.end
+
+.sub __defined_keyed :method
+ .param string key
+ print "def_skey\n"
+ .return (0)
+.end
+
+.sub __exists_keyed_int :method
+ .param int key
+ print "exists_ikey\n"
+ .return (0)
+.end
+
+.sub __exists_keyed :method
+ .param string key
+ print "exists_skey\n"
+ .return (0)
+.end
+
CODE
ikey
skey
+del_ikey
+del_skey
+def_ikey
+def_skey
+exists_ikey
+exists_skey
OUTPUT
pir_output_is(<<'CODE', <<'OUTPUT', "delegate keyed_int PMC derived");