"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Atribuir = void 0;
/**
 * Construto de atribuição de um valor a um símbolo.
 */
class Atribuir {
    constructor(hashArquivo, alvo, valor, 
    // indice so é usado para variaveis de vetores
    // TODO: criar alguma validaçao para garantir que `indice` só seja passado para variáveis de vetores
    indice, simboloOperador) {
        this.linha = Number(alvo.linha);
        this.hashArquivo = hashArquivo;
        this.alvo = alvo;
        this.valor = valor;
        if (indice !== undefined) {
            this.indice = indice;
        }
        if (simboloOperador !== undefined) {
            this.simboloOperador = simboloOperador;
        }
    }
    async aceitar(visitante) {
        return await visitante.visitarExpressaoDeAtribuicao(this);
    }
    paraTexto() {
        let indiceResolvido = 'índice=(não definido)';
        if (this.indice) {
            indiceResolvido = `índice=${this.indice.paraTexto()}`;
        }
        return `<atribuir alvo=${this.alvo.paraTexto()} ${indiceResolvido} valor=${this.valor.paraTexto()} />`;
    }
    paraTextoSaida() {
        throw new Error('Método não implementado.');
    }
}
exports.Atribuir = Atribuir;
//# sourceMappingURL=atribuir.js.map