visitTry()

in lib/generator.js [1261:1292]


  visitTry(ast, level, env) {
    assert.equal(ast.type, 'try');
    env = env || {
      local: new Map(),
    };
    const tryBlock = ast.tryBlock;
    const errCounts = this.stmtsErrCount(tryBlock.stmts);
    if(errCounts > 1) {
      const funcName = `${_lowerFirst(env.funcName)}_opTryFunc`;
      const args = this.getStmtsVars(tryBlock.stmts);
      const returnType = this.getReturnType(tryBlock.stmts, env);
      this.tryFunc.push({
        args,
        functionBody: tryBlock,
        returnType,
        name: funcName,
        pointerParams: env.pointerParams,
      });
      if (returnType !== 'void') {
        this.emit(`_result, _err  = ${funcName}`, level);
      } else {
        this.emit(`_err = ${funcName}`, level);
      }
      this.visitTryArgs(args, level, env);
      this.emit('\n');
      this.visitCatch(ast, level, env);
      env.hasReturn = true;
      return;
    } 
    env.try = ast;
    this.visitStmts(tryBlock, level, env);
  }