"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FuncaoDeclaracao = void 0;
const declaracao_1 = require("./declaracao");
const geracao_identificadores_1 = require("../geracao-identificadores");
/**
 * Uma declaração de função.
 */
class FuncaoDeclaracao extends declaracao_1.Declaracao {
    constructor(simbolo, funcao, tipoRetorno = 'qualquer', decoradores = []) {
        super(Number(simbolo.linha), simbolo.hashArquivo);
        this.id = (0, geracao_identificadores_1.uuidv4)();
        this.simbolo = simbolo;
        this.funcao = funcao;
        this.tipo = tipoRetorno;
        this.decoradores = decoradores;
    }
    async aceitar(visitante) {
        return await visitante.visitarDeclaracaoDefinicaoFuncao(this);
    }
    paraTexto() {
        // TODO: Corpo.
        return `<declaração-função nome=${this.simbolo.lexema} tipo=${this.tipo} />`;
    }
}
exports.FuncaoDeclaracao = FuncaoDeclaracao;
//# sourceMappingURL=funcao.js.map