Changeset b60ed54


Ignore:
Timestamp:
Jun 23, 2019, 11:42:59 PM (2 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
arm-eh, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr
Children:
e764ee1
Parents:
8f079f0
Message:

fix error and formatting

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/papers/concurrency/examples/Fib.cfa

    r8f079f0 rb60ed54  
    1313}
    1414
    15 #define FibCtor { 0, 1 }
    16 typedef struct { int fn, fn1; } Fib;
    17 int fib_state( Fib & f ) with( f ) {
    18         int fn0 = fn1 + fn2;  fn2 = fn1;  fn = fn0;
    19         return fn1;
     15#define FibCtor { 1, 0 }
     16typedef struct { int fn1, fn; } Fib;
     17int fib_state( Fib & f ) with(f) {
     18        int ret = fn; fn = fn1; fn1 = fn + ret;
     19        return ret;
    2020}
    2121
     
    3232coroutine Fib2 { int fn; };                                             // used for communication
    3333void main( Fib2 & fib ) with( fib ) {                   // called on first resume
    34         int fn1 = 1, fn2 = 0;                                           // precompute first two states
     34        int fn1;                                                                        // precompute first two states
     35        [fn1, fn] = [1, 0];
    3536        for () {
    36                 fn = fn1 + fn2;  fn2 = fn1;  fn1 = fn;  // general case
    3737                suspend();                                                              // restart last resume
     38                [fn1, fn] = [fn, fn + fn1];
    3839        }
    3940}
    40 int ?()( Fib2 & fib ) with( fib ) {
     41int ?()( Fib2 & fib ) {                                                 // function-call interface
    4142        return resume( fib ).fn;                                        // restart last suspend
    4243}
    43 int ?()( Fib2 & fib, int N ) with( fib ) {
    44         for ( N - 1 ) fib();
     44int ?()( Fib2 & fib, int N ) {                                  // skip N values
     45        for ( N - 1 ) fib();                                            // use function-call interface
    4546        return fib();
    4647}
    47 double ?()( Fib2 & fib ) with( fib ) {
    48         return (int)(fib()) / 3.14159;                                          // restart last suspend
     48double ?()( Fib2 & fib ) {                                              // different return type
     49        return (int)(fib()) / 3.14159;                          // cast prevents recursive call
    4950}
    5051
Note: See TracChangeset for help on using the changeset viewer.