in lib/generator.js [1151:1209]
visitStmt(ast, level, env) {
let comments = DSL.comment.getFrontComments(this.comments, ast.tokenRange[0]);
this.visitComments(comments, level);
if (ast.type === 'return') {
this.visitReturn(ast, level, env);
} else if (ast.type === 'yield') {
this.visitYield(ast, level, env);
} else if (ast.type === 'if') {
this.visitIf(ast, level, env);
} else if (ast.type === 'throw') {
this.visitThrow(ast, level, env);
} else if (ast.type === 'assign') {
this.visitAssign(ast, level, env);
} else if (ast.type === 'retry') {
this.visitRetry(ast, level);
} else if (ast.type === 'declare') {
this.visitDeclare(ast, level, env);
} else if (ast.type === 'while') {
this.visitWhile(ast, level, env);
} else if (ast.type === 'for') {
this.visitFor(ast, level, env);
} else if (ast.type === 'try') {
this.visitTry(ast, level, env);
} else if (ast.type === 'break') {
this.emit(`break\n`, level);
} else {
if (ast.type === 'call' && ast.hasThrow) {
if (ast.inferred && _name(ast.inferred) !== 'void') {
this.emit(`_, _err ${env.yieldFunc ? ':' : ''}= `, level);
} else {
this.emit(`_err ${env.yieldFunc ? ':' : ''}= `, level);
}
this.visitExpr(ast, level, env, { pointer: false });
this.emit(`\n`);
if(env.runtimeBody){
this.visitAPIErrCatch(level, env);
} else if(env.try) {
const tryStmt = env.try;
env.try = null;
this.visitCatch(tryStmt, level, env);
} else {
this.emit(`if _err != nil {\n`, level);
if (env.returnType && _name(env.returnType) !== 'void') {
this.emit(`return _result, _err\n`, level + 1);
} else if(env.yieldFunc){
this.emit(`_yieldErr <- _err\n`, level + 1);
this.emit(`return\n`, level + 1);
} else {
this.emit(`return _err\n`, level + 1);
}
this.emit(`}\n`, level);
}
} else {
this.emit(``, level);
this.visitExpr(ast, level, env, { pointer: false });
this.emit(`\n`);
}
}
}