close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 11 years ago

Last modified 11 years ago

#1724 new defect

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

Reported by: Pedro Gea Owned by: Víctor de Buen Remiro
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 (2)

comment:1 Changed 11 years ago by Pedro Gea

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.

comment:2 Changed 11 years ago by Pedro Gea

Component: KernelOOP

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.