visitArgs()

in lib/generator.js [2203:2258]


  visitArgs(args, level, env, expected, argHasThrowFunc) {
    this.emit('(');
    for (let i = 0; i < args.length; i++) {
      const expr = args[i];
      if(expr.yieldArg) {
        this.visitYieldArgs(expr.ast, level, env);
      } else if (expr.needCast) {
        this.emit('dara.ToMap(');
        if (argHasThrowFunc && argHasThrowFunc.get(i)) {
          this.emit(argHasThrowFunc.get(i));
        } else {
          this.visitExpr(expr, level, env);
        }
        this.emit(')');
      } else {
        if ((expr.expectedType.name === 'number' || expr.expectedType.name === 'integer') && expr.inferred.name === 'int32') {
          this.emit(`dara.ToInt(`);
          if (argHasThrowFunc && argHasThrowFunc.get(i)) {
            this.emit(argHasThrowFunc.get(i));
          } else {
            this.visitExpr(expr, level, env, expected);
          }
          this.emit(`)`);
        } else if (expr.type !== 'number' && (expr.inferred.name === 'number' || expr.inferred.name === 'integer') && expr.expectedType.name === 'int32') {
          this.emit(`dara.ToInt32(`);
          if (argHasThrowFunc && argHasThrowFunc.get(i)) {
            this.emit(argHasThrowFunc.get(i));
          } else {
            this.visitExpr(expr, level, env, expected);
          }
          this.emit(`)`);
        } else {
          let setFunc;
          if(expr && expr.type === 'call') {
            let dealFunc = this.getVarDealFunc(expr, expected);
            setFunc = dealFunc && dealFunc(_name(expr.inferred));
          }
          if(setFunc) {
            this.emit(`${setFunc}`);
          }
          if (argHasThrowFunc && argHasThrowFunc.get(i)) {
            this.emit(argHasThrowFunc.get(i));
          } else {
            this.visitExpr(expr, level, env, expected);
          }
          if(setFunc) {
            this.emit(')');
          }
        }
      }
      if (i !== args.length - 1) {
        this.emit(', ');
      }
    }
    this.emit(')');
  }