code: function mapIfStmt(ifStmt, path, down) {
          if (ifStmt.type === 'IfStatement' && containsAwait([ifStmt.consequent,ifStmt.alternate])) {
              var symName = generateSymbol(ifStmt);
              var ref = path[0];
              var synthBlock = {
                  type: 'BlockStatement',
                  body: [ifStmt]
              };
              if ('index' in ref) {
                  var idx = ref.index;
                  var deferredCode = ref.parent[ref.field].splice(idx + 1, ref.parent[ref.field].length - (idx + 1));
                  ref.replace(synthBlock);
                  if (deferredCode.length) {
                      var call = returnThisCall(symName);
                      synthBlock.body.push(down(makeContinuation(symName, deferredCode)));
                      [ifStmt.consequent,ifStmt.alternate].forEach(function (cond) {
                          if (!cond) 
                              return;
                          var blockEnd;
                          if (!examine(cond).isBlockStatement) 
                              blockEnd = cond;
                           else 
                              blockEnd = cond.body[cond.body.length - 1];
                          if (!(blockEnd && blockEnd.type === 'ReturnStatement')) {
                              if (!(cond.type === 'BlockStatement')) {
                                  coerce(cond, {
                                      type: 'BlockStatement',
                                      body: [cloneNode(cond)]
                                  });
                              }
                              cond.$deferred = true;
                              cond.body.push(cloneNode(call));
                          }
                          down(cond);
                      });
                      // If both blocks are transformed, the trailing call to $post_if()
                      // can be omitted as it'll be unreachable via a synchronous path
                      if (!(ifStmt.consequent && ifStmt.alternate && ifStmt.consequent.$deferred && ifStmt.alternate.$deferred)) 
                          synthBlock.body.push(cloneNode(call));
                  }
              } else {
                  ref.parent[ref.field] = synthBlock;
              }
          }
      }
docs: /*
  Translate:
  if (x) { y; } more... ;
  into
  if (x) { y; return $more(); } function $more() { more... } $more() ;
  
  ...in case 'y' uses await, in which case we need to invoke $more() at the end of the
  callback to continue execution after the case.