The enclosed patch allows one to use the if op with a PerlArray, as in:
new P0, PerlArray if P0, TRUE print "false\n" end TRUE: print "true\n" end Currently, this works the same way that if(@array) does in Perl, ie it's false if and only if the array has a length of zero. Patch also includes the appropriate regression test. It should be straightforward to add this to PerlHash as well, but my attempt to do so seems to have brought some bugs to light - currently investigating this. Simon --- default.pmc.old Sat Jan 5 08:00:01 2002 +++ default.pmc Thu Jan 10 15:39:11 2002 @@ -69,10 +69,10 @@ } BOOLVAL get_bool () { - /* Everything has to be true */ + /* Everything has to be false */ if ( SELF->vtable->get_integer(INTERP, SELF) == 0 && SELF->vtable->get_number(INTERP, SELF) == 0.0 - && string_bool(SELF->vtable->get_string(INTERP, SELF)) + && string_bool(SELF->vtable->get_string(INTERP, SELF)) == 0 ) { return 0; --- perlarray.pmc.old Thu Jan 10 02:00:02 2002 +++ perlarray.pmc Thu Jan 10 15:38:08 2002 @@ -86,8 +86,7 @@ return key_pair->cache.struct_val; } - BOOLVAL get_bool () { - } + BOOLVAL get_bool () = default; void* get_value () { return &SELF->cache; --- pmc_perlarray.t.old Thu Jan 10 15:41:40 2002 +++ pmc_perlarray.t Thu Jan 10 16:06:30 2002 @@ -1,6 +1,6 @@ #! perl -w -use Parrot::Test tests => 3; +use Parrot::Test tests => 4; output_is(<<'CODE', <<'OUTPUT', "size of the array"); new P0,PerlArray @@ -76,5 +76,38 @@ hey OUTPUT +output_is(<<'CODE', <<'OUTPUT', "If P"); + new P0, PerlArray + if P0, TR + print "false\n" + branch NEXT +TR: print "true\n" + +NEXT: set P0, 1, 0 + if P0, TR2 + print "false\n" + branch NEXT2 +TR2: print "true\n" + +NEXT2: new P1, PerlArray + set P1, 1 + if P1, TR3 + print "false\n" + branch NEXT3 +TR3: print "true\n" + +NEXT3: set P1, 0 + if P1, TR4 + print "false\n" + end +TR4: print "true\n" + end + +CODE +false +true +true +false +OUTPUT 1;