@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
38 lines • 1.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SuperProxy = void 0;
const chamavel_1 = require("./chamavel");
/**
* Objeto retornado por `super()`. Carrega a instância atual e o ponto de partida
* no OReM, permitindo herança cooperativa em chamadas do tipo `super().meuMetodo()`.
*
* Estende `Chamavel` para que `super()` seja resolvido pelo caminho normal de
* chamada em `visitarExpressaoDeChamada`, retornando o próprio proxy para encadeamento.
*/
class SuperProxy extends chamavel_1.Chamavel {
constructor(instancia, proximaClasse) {
super();
this.instancia = instancia;
this.proximaClasse = proximaClasse;
}
aridade() {
const inicializador = this.proximaClasse.encontrarMetodo('construtor');
if (!inicializador)
return 0;
return inicializador.aridade();
}
/**
* `super()` executa o construtor da próxima classe no OReM e retorna
* o próprio proxy para permitir encadeamento: `super().meuMetodo()`.
*/
async chamar(visitante, argumentos) {
const inicializador = this.proximaClasse.encontrarMetodo('construtor');
if (inicializador) {
const construtorVinculado = inicializador.funcaoPorMetodoDeClasse(this.instancia);
await construtorVinculado.chamar(visitante, argumentos);
}
return this;
}
}
exports.SuperProxy = SuperProxy;
//# sourceMappingURL=super-proxy.js.map