visitInit()

in lib/generator.js [756:788]


  visitInit(ast, level) {
    const env = {
      local: new Map(),
      funcName: 'NewClient'
    };
    assert.equal(ast.type, 'init');
    this.visitAnnotation(ast.annotation, level);
    let comments = DSL.comment.getFrontComments(this.comments, ast.tokenRange[0]);
    this.visitComments(comments, level);
    this.emit(`func NewClient`, level);
    this.visitParams(ast.params, level, env);
    this.emit(`(*${this.structName}, error) {\n`);
    this.emit(`client := new(${this.structName})\n`, level + 1);
    this.emit(`err := client.Init(`, level + 1);
    for (let i = 0; i < ast.params.params.length; i++) {
      const param = ast.params.params[i];
      this.emit(`${_name(param.paramName)}`);
      if (i < ast.params.params.length - 1) {
        this.emit(`, `);
      }
    }
    this.emit(`)\n`);
    this.emit(`return client, err\n`, level + 1);
    this.emit(`}\n\n`, level);
    this.emit(`func (client *${this.structName})Init`, level);
    this.visitParams(ast.params, level, env);
    this.emit(`(_err error) {\n`);
    if (ast.initBody && ast.initBody.stmts && ast.initBody.stmts.length > 0) {
      this.visitStmts(ast.initBody, level + 1, env);
    }
    this.emit(`return nil\n`, level + 1);
    this.emit(`}\n\n`, level);
  }