Ticket #1724 (new defect)

Opened 5 years ago

Last modified 5 years ago

Error en métodos al construirse una instancia en sus argumentos

Reported by: pgea Owned by: vdebuen
Priority: highest Milestone: Mantainance
Component: OOP Version: 3.1
Severity: blocker Keywords:
Cc:

Description

Se ha encontrado un error inesperado al utilizar un método cuando en uno de sus argumentos se construye (aunque sea de modo auxiliar) una instancia de la misma clase.

Véase, por ejemplo:

Class @TestClass {
  Text _.name;
  Real Test(Real void) {
    NameBlock test = _this;
  1}
};

@TestClass object1 = [[ Text _.name = "A" ]];

Real object1::Test(
  Real {
    @TestClass object2 = [[ Text _.name = "B" ]];
    Real 1
  }
);
// ERROR: [] _this no es un objeto valido para el tipo NameBlock.

Change History

Changed 5 years ago by pgea

Se he encontrado otro problema de corrupción grave en la POO en TOL que recuerda en cierto modo a éste.

El problema no es fácil de aislar, pero su consecuencia es que un método es llamado sobre una instancia que no le corresponde.

Por ejemplo, en la llamada a un método de una clase A se obtiene una instancia de una clase B y se hace una llamada del tipo: b::MetodoDeB(MetodoDeA(...)) obteniéndose los errores correspondientes a la llamada: _this::MetodoDeB(MetodoDeA(...)) cuando este método MetodoB ni siquiera existe en la clase A. Parece como si en la evaluación del método de B el _this local no existiera y usara el inmediatamente superior.

Changed 5 years ago by pgea

  • component changed from Kernel to OOP

En general parece desaconsejable pasar como argumento llamadas a funciones o métodos, o cualquier expresión que no sea el nombre de un objeto ya existente.

Note: See TracTickets for help on using tickets.