"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FuncaoPadrao = void 0;
const chamavel_1 = require("./chamavel");
/**
 * Uma `FuncaoPadrao` normalmente é uma função em JavaScript que representa um
 * método de uma biblioteca global, mas que pode ser usada para outros casos.
 */
class FuncaoPadrao extends chamavel_1.Chamavel {
    constructor(valorAridade, funcao) {
        super();
        this.descartarPrimeiroArgumento = true;
        this.valorAridade = valorAridade;
        this.funcao = funcao;
    }
    async chamar(visitante, argumentos, simbolo) {
        this.simbolo = simbolo;
        return await this.funcao.apply(this, [visitante, ...argumentos]);
    }
    /**
     * Método utilizado por Delégua para inspecionar esta função em depuração.
     * @returns {string} A representação da função como texto.
     */
    paraTexto() {
        return `<função-padrão nome=${this.simbolo.lexema} />`;
    }
    /**
     * Método utilizado pelo VSCode para representar esta função quando impressa.
     * @returns {string} A representação da classe como texto.
     */
    toString() {
        return this.paraTexto();
    }
}
exports.FuncaoPadrao = FuncaoPadrao;
//# sourceMappingURL=funcao-padrao.js.map