# Copyright (C) 2007-2009, Parrot Foundation.
# $Id: 81_continuation.pir 39674 2009-06-20 14:09:03Z cotto $

=head1 Continuations

Continuations are tricky and amazing things. Parrot uses continuations for
all sorts of things internally and you can use them too if you want. A
continuation is like a snapshot of the current execution environment.
If you invoke a continuation like a subroutine, it returns you to the
point where you created the continuation. Also, you can set the address
in the continuation to any label, so you can return to any arbitrary
point in your code that you want by invoking it.

=cut

.sub main :main
    .local pmc cont
    cont = new ['Continuation']
    set_addr cont, continued

    test_call(4, cont)
    say "should never be printed"
continued:
    say "continuation called"
.end

.sub test_call
    .param pmc argument
    .param pmc cont
    print "got argument: "
    say argument
    cont()
.end

# Local Variables:
#   mode: pir
#   fill-column: 100
# End:
# vim: expandtab shiftwidth=4 ft=pir:

