visitYieldArgs()

in lib/generator.js [2633:2668]


  visitYieldArgs(ast, level, env) {
    let pointer = false;
    let setFunc;
    var hasThrowCall = (ast.expr.type === 'call' &&
      ast.expr.hasThrow) || ast.expr.type === 'construct';
    if (ast.left.type === 'property_assign' || ast.left.type === 'property') {
      pointer = true;
      this.visitPropertyAccess(ast.left, level, env, { needCast: 'false', type: 'pointer', pointer });
    } else if (ast.left.type === 'variable') {
      const name = _name(ast.left.id);
      pointer = env.pointerParams && env.pointerParams.includes(name);
      this.emit(`${name}`);
      if(hasThrowCall){
        let dealFunc = this.getVarDealFunc(ast.expr,  { pointer });
        setFunc = dealFunc && dealFunc(_name(ast.expr.inferred));
        if(setFunc) {
          this.emit('Tmp');
        }
      }
    } else if (ast.left.type === 'virtualVariable') {
      pointer = true;
      this.emit(`${_vid(_avoidVariableKeywords(_format(_name(ast.left.vid))))}`, level);
    } else if (ast.left.type === 'map_access') {
      pointer = true;
      this.visitMapAccess(ast.left, level, env, { pointer });
    } else if (ast.left.type === 'array_access') {
      pointer = true;
      this.visitArrayAccess(ast.left, level, env, { pointer });
    } else {
      throw new Error('unimpelemented');
    }

    if (hasThrowCall) {
      this.emit(', _yieldErr');
    }
  }