@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
75 lines • 3.98 kB
JavaScript
;
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