"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetodoPrimitiva = void 0;
const chamavel_1 = require("./chamavel");
/**
 * Classe de método de primitiva.
 * Exemplos:
 *
 * - `v.inclui(1)` (`v` é um vetor)
 * - `t.minusculo()` (`t` é um texto)
 *
 * A aridade é sempre a quantidade de argumentos do método menos dois porque os
 * dois primeiros parâmetros são sempre o interpretador e a referência para a primitiva.
 */
class MetodoPrimitiva extends chamavel_1.Chamavel {
    constructor(nome, primitiva, metodo, nomeMetodo, tipo = 'qualquer') {
        super();
        this.tipo = 'qualquer';
        this.nome = nome;
        this.primitiva = primitiva;
        this.metodo = metodo;
        this.nomeMetodo = nomeMetodo;
        this.tipo = tipo;
        this.valorAridade = metodo.length - 2;
    }
    async chamar(interpretador, argumentos = []) {
        return await this.metodo(interpretador, this.primitiva, ...argumentos);
    }
    /**
     * Método utilizado por Delégua para inspecionar este método em depuração.
     * @returns {string} A representação do método como texto.
     */
    paraTexto() {
        return `<método nome=${this.nomeMetodo} primitiva=${this.nome} tipo-da-primitiva=${this.tipo} />`;
    }
    /**
     * Método utilizado pelo VSCode para representar este método quando impressa.
     * @returns {string} A representação do método como texto.
     */
    toString() {
        return this.paraTexto();
    }
}
exports.MetodoPrimitiva = MetodoPrimitiva;
//# sourceMappingURL=metodo-primitiva.js.map