[PDD] Add docs for the Parrot_PMC_push_* and Parrot_PMC_pop_* functions
[parrot.git] / examples / subs / coroutine.pasm
blob2b0c452a5036a70952d7e8d1a484db358e0867bf
1 # Copyright (C) 2001-2005, Parrot Foundation.
2 # $Id$
4 =head1 NAME
6 examples/pasm/coroutine.pasm - Sample co-routines in Parrot
8 =head1 SYNOPSIS
10     % ./parrot examples/pasm/coroutine.pasm
12 =head1 DESCRIPTION
14 This shows you how to create two coroutines and C<invoke> them.
16 =head1 SEE ALSO
18 F<docs/ops/core.pod>
19 F<docs/pdds/pdd03_calling_conventions.pod>
21 =cut
23 # create a coro and save it on the user stack
24 .const 'Sub' P0 =  "MYCOROUTINE"
25 # a coroutine carries state - clone it
26 clone P0, P0
28 # create a second coro
29 clone P1, P0
31 # Calling convention says P0 will contain the sub so..
32 print "Calling 1st co-routine\n"
33 invokecc P0
34 invokecc P0
35 invokecc P0
37 print "Calling 2nd co-routine\n"
38 invokecc P1
39 invokecc P1
40 invokecc P1
42 end
44 # A coroutine
45 .pcc_sub MYCOROUTINE:
46     print "Entry\n"
47     yield
48     print "Resumed\n"
49     yield
50     print "Done\n"
51     yield
53 # Local Variables:
54 #   mode: pir
55 #   fill-column: 100
56 # End:
57 # vim: expandtab shiftwidth=4 ft=pir: