@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
42 lines • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeleguaFuncaoNativa = void 0;
const delegua_funcao_1 = require("./delegua-funcao");
/**
* Uma função nativa que implementa lógica em TypeScript em vez de código Delégua.
* Usada internamente para métodos embutidos como os da classe base `Objeto`.
*/
class DeleguaFuncaoNativa extends delegua_funcao_1.DeleguaFuncao {
constructor(nome, aridade, funcaoASerChamada) {
super(nome, null, undefined, false);
this._aridade = aridade;
this.funcaoASerChamada = funcaoASerChamada;
}
aridade() {
return this._aridade;
}
async chamar(visitante, argumentos) {
// Argumentos chegam como ArgumentoInterface = { nome, valor: VariavelInterface }.
// VariavelInterface tem a forma { tipo, valor: valorReal, imutavel }.
// Usamos o método resolverValor() do interpretador para remover ambas as camadas de encapsulamento.
const resolver = visitante.resolverValor?.bind(visitante) ?? ((v) => v);
const args = argumentos.map((a) => {
const nivel1 = a && Object.prototype.hasOwnProperty.call(a, 'valor') ? a.valor : a;
return resolver(nivel1);
});
return await this.funcaoASerChamada(this.instancia, args);
}
funcaoPorMetodoDeClasse(instancia) {
const nativa = new DeleguaFuncaoNativa(this.nome, this._aridade, this.funcaoASerChamada);
nativa.instancia = instancia;
return nativa;
}
paraTexto() {
return `<função-nativa nome=${this.nome} />`;
}
toString() {
return this.paraTexto();
}
}
exports.DeleguaFuncaoNativa = DeleguaFuncaoNativa;
//# sourceMappingURL=delegua-funcao-nativa.js.map