# New Ticket Created by Colin Kuskie # Please include the string: [perl #45185] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=45185 >
This patch adds tutorial information about exists. It was written completely from scratch, and it would be good for some of the PIR-knowledgeable guys to review it before it is applied, to make sure that all the semantics are correct.
Index: examples/tutorial/57_exists.pir =================================================================== --- examples/tutorial/57_exists.pir (revision 0) +++ examples/tutorial/57_exists.pir (revision 0) @@ -0,0 +1,48 @@ +=head1 exists + +The C<exists> opcode tells you if the contents of a PMC, such as an array or +hash, exists. It differs from C<defined>, because C<defined> will return false +on undefined values, which are valid entries. + +In the example below, C<my_array[0]> exists and is defined, but C<my_array[1]> only +exists. Similar to C<defined>, the behavior of C<exists> for a given PMC depends +on how that PMC implements vtable functions. + +=cut + +.sub main :main + + .local pmc my_array + my_array = new 'ResizablePMCArray' + $P0 = new 'String' + $P0 = "Hello" + $P1 = new 'Undef' + push my_array, $P0 + push my_array, $P1 + + $I0 = defined my_array[0] + $I1 = exists my_array[0] + $I2 = $I0 && I1 + + unless $I2 goto not_def_not_exists + say "my_array[0] is defined and it exists" + not_def_not_exists: + + $I0 = defined my_array[1] + $I1 = exists my_array[1] + + unless $I0 goto not_def + say "my_array[1] is defined" + not_def: + unless $I1 goto not_exists + say "my_array[1] exists" + not_exists: + +.end + +# Local Variables: +# mode: pir +# fill-column: 100 +# End: +# vim: expandtab shiftwidth=4: + Index: t/examples/tutorial.t =================================================================== --- t/examples/tutorial.t (revision 21079) +++ t/examples/tutorial.t (working copy) @@ -7,7 +7,7 @@ use lib qw( . lib ../lib ../../lib ); use Test::More; -use Parrot::Test tests => 34; +use Parrot::Test tests => 35; use Parrot::Config; =head1 NAME @@ -81,6 +81,7 @@ '22_string_ops_length.pir' => << 'END_EXPECTED', 5 +13 END_EXPECTED '23_string_ops_substr.pir' => << 'END_EXPECTED', @@ -164,6 +165,11 @@ $P3 is undefined END_EXPECTED + '57_exists.pir' => << 'END_EXPECTED', +my_array[0] is defined and it exists +my_array[1] exists +END_EXPECTED + '60_subroutines.pir' => << 'END_EXPECTED', Hello, Zaphod END_EXPECTED