grammerVar()

in src/langs/swift/combinator.js [493:528]


  grammerVar(emitter, gram, ignoreCast, emitType = true) {
    let name = gram.name ? gram.name : gram.key;
    name = _name(name);
    let st = gram.varType === 'var' ? 'var' : 'let';
    if (gram.varType === 'static_class') {
      emitter.emit(`${this.resolveName(name)}`);
    } else if (gram.varType === 'var' || gram.varType === 'const') {
      if (!this.hasStatement(name) && emitType) {
        emitter.emit(`${st} ${name}: ${this.emitType(gram.type)}${gram.isOptional ? '?' : ''}`);
        this.addStatement(name, gram.type);
      } else {
        if (gram.needToReadable) {
          emitter.emit(`${this.config.tea.core.name}.${this.config.tea.core.toReadable}(`);
        }
        var resolve = false;
        if (gram.expected instanceof TypeInteger && gram.type instanceof TypeInteger) {
          emitter.emit(`${this.emitType(gram.expected)}(`);
          resolve = true;
        }
        emitter.emit(`${name}`);
        if (resolve) {
          emitter.emit(')');
        }
        if (gram.needToReadable) {
          emitter.emit(')');
        } else if (!resolve && !ignoreCast && gram.type && gram.needCast) {
          emitter.emit(` as! ${this.emitType(gram.type)}`);
        }
      }
      if (!this.hasStatement(name)) {
        this.addStatement(name, gram.type);
      }
    } else {
      debug.stack(gram);
    }
  }