The PerlInt logical-or is using get_integer instead of get_bool for logical operations. This patch corrects that.
Perlnum and perlstring have working get_bool's, so the default logical_or and logical_and should be sufficient. The empty methods are pointed to the default logical_or. Index: classes/perlint.pmc =================================================================== RCS file: /home/perlcvs/parrot/classes/perlint.pmc,v retrieving revision 1.10 diff -u -r1.10 perlint.pmc --- classes/perlint.pmc 27 Dec 2001 18:32:22 -0000 1.10 +++ classes/perlint.pmc 3 Jan 2002 14:14:03 -0000 @@ -486,14 +486,14 @@ /* No set_bool :( */ dest->vtable->set_integer_native(INTERP, dest, SELF->cache.int_val || - value->vtable->get_integer(INTERP, value) + value->vtable->get_bool(INTERP, value) ); } void logical_and (PMC* value, PMC* dest) { dest->vtable->set_integer_native(INTERP, dest, SELF->cache.int_val && - value->vtable->get_integer(INTERP, value) + value->vtable->get_bool(INTERP, value) ); } Index: classes/perlnum.pmc =================================================================== RCS file: /home/perlcvs/parrot/classes/perlnum.pmc,v retrieving revision 1.11 diff -u -r1.11 perlnum.pmc --- classes/perlnum.pmc 27 Dec 2001 18:32:22 -0000 1.11 +++ classes/perlnum.pmc 3 Jan 2002 14:14:03 -0000 @@ -416,9 +416,7 @@ void logical_and (PMC* value, PMC* dest) = default; - void logical_not (PMC* value) { -fprintf(stderr,"logical_not not implemented\n"); - } + void logical_not (PMC* value) = default; void match (PMC * value,REGEX* re) { fprintf(stderr,"match not implemented\n"); Index: classes/perlstring.pmc =================================================================== RCS file: /home/perlcvs/parrot/classes/perlstring.pmc,v retrieving revision 1.11 diff -u -r1.11 perlstring.pmc --- classes/perlstring.pmc 30 Dec 2001 12:04:56 -0000 1.11 +++ classes/perlstring.pmc 3 Jan 2002 14:14:04 -0000 @@ -419,14 +419,11 @@ BOOLVAL is_equal (PMC* value) { } - void logical_or (PMC* value, PMC* dest) { - } + void logical_or (PMC* value, PMC* dest) = default; - void logical_and (PMC* value, PMC* dest) { - } + void logical_and (PMC* value, PMC* dest) = default; - void logical_not (PMC* value) { - } + void logical_not (PMC* value) = default; void match (PMC * value,REGEX* re) { } -- Jason