UNPKG

@designliquido/delegua

Version:

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

77 lines 2.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GerenciadorEscopos = void 0; class GerenciadorEscopos { constructor() { this.escopos = []; // Escopo global this.empilharEscopo(); } empilharEscopo() { this.escopos.push(new Map()); } desempilharEscopo() { return this.escopos.pop(); } declarar(nome, variavel) { const escopoAtual = this.escopos[this.escopos.length - 1]; // Verifica se já existe no escopo atual if (escopoAtual.has(nome)) { return false; // Já declarada no escopo atual } escopoAtual.set(nome, variavel); return true; } buscar(nome) { // Busca do escopo mais interno para o mais externo for (let i = this.escopos.length - 1; i >= 0; i--) { const variavel = this.escopos[i].get(nome); if (variavel) { return variavel; } } return undefined; } buscarNoEscopoAtual(nome) { const escopoAtual = this.escopos[this.escopos.length - 1]; return escopoAtual.get(nome); } marcarComoInicializada(nome, valor) { const variavel = this.buscar(nome); if (variavel) { variavel.inicializada = true; variavel.usada = true; if (valor !== undefined) { variavel.valor = this.extrairValor(valor); } } } extrairValor(construto) { if (construto === null || construto === undefined) { return undefined; } if (construto.hasOwnProperty('valor')) { return construto.valor; } return construto; } marcarComoUsada(nome) { const variavel = this.buscar(nome); if (variavel) { variavel.usada = true; } } obterVariaveisNaoUsadas() { const naoUsadas = []; for (let escopo of this.escopos) { for (let variavel of escopo.values()) { if (!variavel.usada) { naoUsadas.push(variavel); } } } return naoUsadas; } } exports.GerenciadorEscopos = GerenciadorEscopos; //# sourceMappingURL=gerenciador-escopos.js.map