Use promise in coroutine frame in actor function.
authorBin Cheng <bin.cheng@linux.alibaba.com>
Thu, 30 Jan 2020 04:33:47 +0000 (12:33 +0800)
committerBin Cheng <bin.cheng@linux.alibaba.com>
Thu, 30 Jan 2020 04:35:53 +0000 (12:35 +0800)
commit3904cc106e394ef2a4621576c9fdd53b597add36
tree7753b9740998e68663dc5dbabecd692b61dab80f
parent3b35b3d4cc26816d1c6342b880f303b577ecbb84
Use promise in coroutine frame in actor function.

By standard, coroutine body should be encapsulated in try-catch block
as following:
  try {
    // coroutine body
  } catch(...) {
    promise.unhandled_exception();
  }
Given above try-catch block is implemented in the coroutine actor
function called by coroutine ramp function, so the promise should
be accessed via actor function's coroutine frame pointer argument,
rather than the ramp function's coroutine frame variable.

This patch cleans code a bit to make fix easy.

gcc/cp
    * coroutines.cc (act_des_fn): New.
    (morph_fn_to_coro): Call act_des_fn to build actor/destroy decls.
    Access promise via actor function's frame pointer argument.
    (build_actor_fn, build_destroy_fn): Use frame pointer argument.
gcc/cp/ChangeLog
gcc/cp/coroutines.cc