[PDD] Add docs for the Parrot_PMC_push_* and Parrot_PMC_pop_* functions
[parrot.git] / examples / tutorial / 56_defined.pir
blob2512c00fff4902745bb1308b59280ca7bd47efe8
1 # Copyright (C) 2007-2009, Parrot Foundation.
2 # $Id$
4 =head1 defined
6 The C<defined> opcode tells you if the contents of a PMC is defined or not.
7 Using C<defined> on a C<int>, C<num>, or C<string> register may generate
8 an error if the register has been used before and freed or is newly created.
10 C<defined> is a great way to test a PMC to ensure it's been set to a proper
11 value before attempting to use it. Attempting to use a PMC that has not
12 been defined may throw an exception or cause a bigger problem.
14 =cut
16 .sub main :main
18     $P1 = new ['String']
19     $I0 = defined $P1
20     if $I0 goto defined_P1
21         say "$P1 is undefined"
22         goto end_defined_P1
23   defined_P1:
24     say "$P1 is defined"
26 =pod
28 Most PMC's, but not all, should return true for C<defined>.  It all
29 depends on how the PMC implements its vtable method for C<defined>.
30 For example the C<Undef> PMC always returns false (0) for C<defined>.
32 =cut
34   end_defined_P1:
35     $P3 = new ['Undef']
36     $I0 = defined $P3
37     if $I0 goto defined_P3
38         say "$P3 is undefined"
39         goto end_defined_P3
40   defined_P3:
41     say "$P3 is defined"
42   end_defined_P3:
45 .end
47 # Local Variables:
48 #   mode: pir
49 #   fill-column: 100
50 # End:
51 # vim: expandtab shiftwidth=4 ft=pir: