Changes in src/tests/coroutine.c [5c81105:d9c44c3]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/tests/coroutine.c
r5c81105 rd9c44c3 3 3 4 4 struct Fibonacci { 5 coroutine c; 6 coVtable v; 5 7 int fn; // used for communication 6 covptr_t v;7 coroutine c;8 8 }; 9 9 10 coroutine* this_coroutine(Fibonacci* this); 10 11 void co_main(Fibonacci* this); 11 co vptr_t* vtable(Fibonacci* this);12 coVtable* vtable(Fibonacci* this); 12 13 13 //GENERATED in proposal for virtuals14 14 void co_main_fib(void* this) { 15 15 co_main( (Fibonacci*) this ); 16 16 } 17 17 18 //GENERATED in proposal for virtuals 19 static coVtable_t FibonacciVtable = { 20 co_main_fib, 21 VPTR_OFFSET(Fibonacci, v, c), 22 VPTR_OFFSET(Fibonacci, v, fn) 23 }; 18 coroutine* this_coroutine_fib(void* this) { 19 return this_coroutine( (Fibonacci*) this); 20 } 24 21 25 22 void ?{}(Fibonacci* this) { 26 23 this->fn = 0; 27 this->v = &FibonacciVtable; //GENERATED in proposal for virtuals 28 (&this->c) { &this->v }; 24 this->v.main = co_main_fib; 25 this->v.this_coroutine = this_coroutine_fib; 26 start(this); 29 27 } 30 28 … … 32 30 #ifdef MORE_DEBUG 33 31 sout | "Starting main of coroutine " | this | endl; 34 sout | "Started from " | this ->c.last | endl;32 sout | "Started from " | this_coroutine(this)->last | endl; 35 33 #endif 36 34 int fn1, fn2; // retained between resumes … … 57 55 } 58 56 59 covptr_t* vtable(Fibonacci* this) { 57 coroutine* this_coroutine(Fibonacci* this) { 58 return &this->c; 59 } 60 61 coVtable* vtable(Fibonacci* this) { 60 62 return &this->v; 61 63 } … … 64 66 Fibonacci f1, f2; 65 67 #ifdef MORE_DEBUG 66 Fibonacci *pf1 = &f1, *pf2 = &f2; 67 coroutine *cf1 = &f1.c, *cf2 = &f2.c; 68 covptr_t *vf1 = vtable(pf1), *vf2 = vtable(pf2); 69 coroutine *cv1 = get_coroutine(vf1), *cv2 = get_coroutine(vf2); 70 Fibonacci *ov1 = (Fibonacci *)get_object(vf1), *ov2 = (Fibonacci *)get_object(vf2); 71 72 sout | "User coroutines : " | pf1 | ' ' | pf2 | endl; 73 sout | "Coroutine data : " | cf1 | ' ' | cf2 | endl; 74 sout | "Vptr address : " | vf1 | ' ' | vf2 | endl; 75 sout | "Vptr obj data : " | ov1 | ' ' | ov2 | endl; 76 sout | "Vptr cor data : " | cv1 | ' ' | cv2 | endl; 68 sout | "User coroutines : " | &f1 | ' ' | &f1 | endl; 77 69 #endif 78 70 for ( int i = 1; i <= 10; i += 1 ) {
Note: See TracChangeset
for help on using the changeset viewer.