UNPKG

@designliquido/delegua

Version:

Linguagem de programação simples e moderna usando português estruturado.

50 lines 2.13 kB
"use strict"; 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