UNPKG

@designliquido/delegua

Version:

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

73 lines 3.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OBJETO_BASE = void 0; const descritor_tipo_classe_1 = require("./descritor-tipo-classe"); const delegua_funcao_nativa_1 = require("./delegua-funcao-nativa"); const simboloObjeto = { tipo: 'IDENTIFICADOR', lexema: 'Objeto', literal: null, linha: 0, hashArquivo: -1, }; function criarDescritorObjeto() { const descritor = new descritor_tipo_classe_1.DescritorTipoClasse(simboloObjeto, null, {}); descritor.metodos['paraTexto'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('paraTexto', 0, (instancia) => { const nome = instancia?.classe?.simboloOriginal?.lexema ?? 'Objeto'; const nomesMetodos = Object.keys(instancia?.classe?.metodos ?? {}).join(', '); const nomesPropriedades = Object.keys(instancia?.propriedades ?? {}).join(', '); return `<[ ${nome} métodos=[${nomesMetodos}] propriedades=[${nomesPropriedades}] ]>`; }); descritor.metodos['tipo'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('tipo', 0, (instancia) => { return instancia?.classe?.simboloOriginal?.lexema ?? 'Objeto'; }); descritor.metodos['igual'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('igual', 1, (instancia, args) => { return instancia === args[0]; }); const implementacaoEInstanciaDe = (instancia, args) => { if (!instancia) return false; const classeAlvo = args[0]; if (!(classeAlvo instanceof descritor_tipo_classe_1.DescritorTipoClasse)) return false; let cls = instancia.classe; while (cls) { if (cls === classeAlvo) return true; cls = cls.superClasse; } return false; }; descritor.metodos['eInstanciaDe'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('eInstanciaDe', 1, implementacaoEInstanciaDe); descritor.metodos['éInstânciaDe'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('éInstânciaDe', 1, implementacaoEInstanciaDe); const implementacaoMetodos = (instancia) => { if (!instancia) return []; const nomes = []; let cls = instancia.classe; while (cls) { for (const nome of Object.keys(cls.metodos)) { if (!nomes.includes(nome)) nomes.push(nome); } cls = cls.superClasse; } return nomes; }; descritor.metodos['metodos'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('metodos', 0, implementacaoMetodos); descritor.metodos['métodos'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('métodos', 0, implementacaoMetodos); descritor.metodos['propriedades'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('propriedades', 0, (instancia) => { if (!instancia) return []; return Object.keys(instancia.propriedades); }); descritor.metodos['respondeA'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('respondeA', 1, (instancia, args) => { if (!instancia) return false; const nome = String(args[0]); return instancia.classe.encontrarMetodo(nome) !== undefined; }); return descritor; } exports.OBJETO_BASE = criarDescritorObjeto(); //# sourceMappingURL=objeto-base.js.map