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

Reply via email to