UNPKG

@designliquido/delegua

Version:

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

75 lines 3.98 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) => { var _a, _b, _c, _d, _e, _f; const nome = (_c = (_b = (_a = instancia === null || instancia === void 0 ? void 0 : instancia.classe) === null || _a === void 0 ? void 0 : _a.simboloOriginal) === null || _b === void 0 ? void 0 : _b.lexema) !== null && _c !== void 0 ? _c : 'Objeto'; const nomesMetodos = Object.keys((_e = (_d = instancia === null || instancia === void 0 ? void 0 : instancia.classe) === null || _d === void 0 ? void 0 : _d.metodos) !== null && _e !== void 0 ? _e : {}).join(', '); const nomesPropriedades = Object.keys((_f = instancia === null || instancia === void 0 ? void 0 : instancia.propriedades) !== null && _f !== void 0 ? _f : {}).join(', '); return `<[ ${nome} métodos=[${nomesMetodos}] propriedades=[${nomesPropriedades}] ]>`; }); descritor.metodos['tipo'] = new delegua_funcao_nativa_1.DeleguaFuncaoNativa('tipo', 0, (instancia) => { var _a, _b, _c; return (_c = (_b = (_a = instancia === null || instancia === void 0 ? void 0 : instancia.classe) === null || _a === void 0 ? void 0 : _a.simboloOriginal) === null || _b === void 0 ? void 0 : _b.lexema) !== null && _c !== void 0 ? _c : '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