UNPKG

@designliquido/delegua

Version:

Linguagem de programação simples e moderna usando português estruturado.

42 lines 1.76 kB
"use strict"; 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