[PDD] Add docs for the Parrot_PMC_push_* and Parrot_PMC_pop_* functions
[parrot.git] / examples / tutorial / 51_if_unless.pir
blob4dd6b5cb44f699f8a040dd9bb7ef534e6eff3951
1 # Copyright (C) 2007-2009, Parrot Foundation.
2 # $Id$
4 =head1 if and unless
6 Both the if and unless conditionals are supported in PIR.  When the
7 tested condition matches the sense of the conditional (true for if,
8 false for unless), then the following C<goto> statement is executed.
10 Truth is fairly simple to determine, depending on the data type being
11 considered.
13 =over 4
15 =item Integers
17 0 is false, any other number is true.
19 =item Strings
21 The empty string is false, all other strings are true.
23 =item Numbers
25 0.0 is false, whether it is positive or negative.  All other numbers
26 are true, including NaN. NaN is the value you get if you try to divide
27 by zero, or do other illegal operations.
29 =item PMCs
31 The "truthiness" of a PMC depends on how it implements its vtable
32 method C<get_boolean>. This changes for each different type of PMC,
33 but is usually straight-forward.
35 =back
37 =cut
39 .sub main :main
41     say "before if"
42     $I0 = 1
44     if $I0 goto branch_to_here
45       say "never printed"
46   branch_to_here:
48     say "after if\n"
50     say "before unless"
52     unless $I0 goto dont_branch_to_here
53       say "is printed"
54   dont_branch_to_here:
56     say "after unless"
58     $N0 = -0.0
59     if $N0 goto branch1
60     say "-0.0 was false"
61     branch1:
63     $N0 = 'NaN'
64     if $N0 goto branch2
65     say "NaN was false"
66     branch2:
68 .end
70 # Local Variables:
71 #   mode: pir
72 #   fill-column: 100
73 # End:
74 # vim: expandtab shiftwidth=4 ft=pir: