UNPKG

@designliquido/delegua

Version:

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

66 lines 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ObjetoDeleguaClasse = void 0; const excecoes_1 = require("../excecoes"); /** * A instância de uma classe em Delégua. * Possui propriedades e métodos. Propriedades são definidas localmente. * Métodos são extraídos do descritor da classe, uma `DeleguaClasse`. */ class ObjetoDeleguaClasse { constructor(classe) { this.classe = classe; this.propriedades = {}; if (this.classe.superClasse) { for (let propriedade of this.classe.superClasse.propriedades) { this.propriedades[propriedade.nome.lexema] = undefined; } } for (let propriedade of classe.propriedades) { this.propriedades[propriedade.nome.lexema] = undefined; } } obter(simbolo) { if (this.propriedades.hasOwnProperty(simbolo.lexema)) { return this.propriedades[simbolo.lexema]; } const metodo = this.classe.encontrarMetodo(simbolo.lexema); if (metodo) return metodo.funcaoPorMetodoDeClasse(this); throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, `Método ou propriedade "${simbolo.lexema}" não existe neste objeto.`); } obterMetodo(nomeMetodo) { const metodo = this.classe.encontrarMetodo(nomeMetodo); if (metodo) return metodo.funcaoPorMetodoDeClasse(this); throw new excecoes_1.ErroEmTempoDeExecucao(null, `Método "${nomeMetodo}" não existe neste objeto.`); } obterPropriedade(nomePropriedade) { if (this.propriedades.hasOwnProperty(nomePropriedade)) { return this.propriedades[nomePropriedade]; } throw new excecoes_1.ErroEmTempoDeExecucao(null, `Propriedade "${nomePropriedade}" não existe neste objeto.`); } definir(simbolo, valor) { if (this.classe.dialetoRequerDeclaracaoPropriedades && !this.propriedades.hasOwnProperty(simbolo.lexema)) { throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, `Propriedade "${simbolo.lexema}" não foi definida na declaração da classe ${this.classe.simboloOriginal.lexema}.`); } this.propriedades[simbolo.lexema] = valor; } /** * Método utilizado por Delégua para inspecionar este objeto em depuração. * @returns {string} A representação do objeto como texto. */ paraTexto() { return '<Objeto ' + this.classe.simboloOriginal.lexema + '>'; } /** * Método utilizado pelo VSCode para representar este objeto quando impresso. * @returns {string} A representação do objeto como texto. */ toString() { return this.paraTexto(); } } exports.ObjetoDeleguaClasse = ObjetoDeleguaClasse; //# sourceMappingURL=objeto-delegua-classe.js.map