@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
50 lines • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MontaoTipos = void 0;
const geracao_identificadores_1 = require("../geracao-identificadores");
const erro_avaliador_sintatico_1 = require("./erro-avaliador-sintatico");
/**
* O montão de tipos é muito semelhante ao montão original do interpretador, mas
* sua função é apenas armazenas informações de tipos de estruturas de dados
* com N níveis de profundidade, como dicionários e objetos em Delégua.
*/
class MontaoTipos {
constructor() {
this.referencias = {};
}
/**
* Adiciona uma nova referência ao montão de tipos, retornando seu endereço.
* @param {any} objeto Qualquer objeto que pertença ao montão de tipos.
* @returns {string} O endereço onde a referência foi registrada.
*/
adicionarReferencia(objeto) {
const novoEndereco = (0, geracao_identificadores_1.uuidv4)();
this.referencias[novoEndereco] = objeto;
return novoEndereco;
}
/**
* Exclui referências do montão de tipos, normalmente por finalização de um
* escopo de execução.
* @param enderecos
*/
excluirReferencias(...enderecos) {
for (const endereco of enderecos) {
delete this.referencias[endereco];
}
}
/**
* Obtém uma referência com base no símbolo executado e endereço da referência.
* @param {number} hashArquivo O _hash_ correspondente ao caminho do arquivo em execução.
* @param {number} linha A linha correspondente à declaração sendo executada.
* @param {string} endereco O endereço da referência.
* @returns {any} O objeto armazenado no endereço.
*/
obterReferencia(hashArquivo, linha, endereco) {
if (!(endereco in this.referencias)) {
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico({ hashArquivo, linha }, `Referência para montão de tipos com endereco ${endereco} não existe.`);
}
return this.referencias[endereco];
}
}
exports.MontaoTipos = MontaoTipos;
//# sourceMappingURL=montao-tipos.js.map