Ticket #1661 (new defect)

Opened 5 years ago

Last modified 3 years ago

Error sintáctico grave cargando paquetes con #Require

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

Description

Hay un error que se presenta de vez en cuando al cargar
paquetes de TOL que no es fácil de reproducir y aislar.

El problema siempre se prensenta como un error sintáctico relacionado con la declaración de alguna clase que fue compilada dentro de alguno de los paquetes cargados.

Algo del tipo:

ERROR: [] Declaración errónea en función de usuario ...

El problema parece estar vinculado a la carga de paquetes a través de la directiva #Require y la carga de archivos .oza.

El error aparece después de actualizar (o mejorar) un paquete o al instalar uno nuevo y curiosamente se soluciona desinstalado o eliminando un paquete cualquiera.

¿Qué podemos saber de este error?

Al hacer un #Require por primera vez, el catálogo de TolPackage::Client se carga con la información de todos los paquetes instalados en TolPackage::Client::_.localRoot, para ello abre todos los archivos info.oza situados en las carpetas de cada uno de los paquetes.

A continuación si el paquete requerido se encuentra disponible se carga y junto a él todos los paquetes con los que está relacionado,
y ahí es donde ocurre el error.

Parece que el error está vinculado a esta carga de archivos info.oza, pues si éstos cambian (o en su número o en la versión del archivo), el error desaparece. De otra manera es difícil de explicar que el error desaparezca al eliminar un paquete que no está relacionado de ninguna manera con el paquete solicitado.

En un principio parecía que la carga de paquetes en cascada (por dependencias entre paquetes) pudiera estar relacionada con el error, pero éste puede reproducirse cargando con el #Require los paquetes de uno en uno.

El error parece estar fuertemente relacionado a la naturaleza precompilada del #Require porque interponiendo una línea entre diferentes llamadas el error desaparece.

Por ejemplo, para un determinado conjunto de paquetes, la lista de llamadas siguiente, falla o no según si se comanta o no una línea tan sencilla como Real 1;:

// USANDO F11
#Require GuiTools.3.6;
#Require MatQuery.3.4;
//Real 1; // si se comenta falla, si no, no falla
#Require MatAlg.2.1;
#Require BysPrior.3.1;
#Require BysInfDiag.3.3;
#Require NonLinGloOpt.5.3;

El error parece que ocurre sólo al hacer las llamadas a la consola da comandos, y no al compilar (incluir) un archivo con dicho código.

Se adjunta en la unidad local B el contenido de la carpeta: TolPackage::Client::_.localRoot con la que pude reproducir el error.

Change History

Changed 5 years ago by pgea

Véase MMS#944.

Changed 5 years ago by pgea

El error está apareciendo muy a menudo y afectando a cualquier tipo de usuario de TOL, sería muy conveniente tratar este bug lo antes posible.

Changed 5 years ago by pgea

El error ha aparecido ahora de un modo algo más inusual: en la llamada a un método de una clase contenida en un paquete.

De un modo extraño como:

ERROR: [1] Declaración errónea de función
@ParameterLinear (Set parameter.)
<> no es un tipo de datos válido.
[Call stack]
  [13] NameBlock MMS::@ExpTermOmega::Spc (Set expTerm., NameBlock parent)
  [12] NameBlock MMS::@ExpTerm::Spc (Set spc., NameBlock parent)
  ...

El problema se vuelve a solucionar desinstalando un paquete cualquiera al azar, por ejemplo, uno antiguo que no se utilice.

Changed 4 years ago by pgea

Ha vuelto aparecer, esta vez corrompiendo casualmente el método GetInitialAR de la clase MMS::@ARIMABlock.
Se evitó alternado el orden de los paquetes cargados en el inicio del proyecto.

Changed 4 years ago by pgea

Vuelve a aparecer el error en tiempo de ejecución (no en la carga) y en esta ocasión sin tratarse de un error de tipo "Declaración errónea":

ERROR: [4] Uso indebido de "=" en
@Submodel @Submodel ::Spc(submodel., _this)
ERROR: [5] Fallo en la función "CreateSubmodel_Spc"
...

Changed 3 years ago by pgea

Vuelve aparecer el error en su forma más habitual.

Changed 3 years ago by pgea

Vuelve a aparecer el error en tiempo de ejecución (no en la carga) en su forma "Uso indebido de "=" en":

...
Model.R - 2  (D: 00.00s  T: 00.02s)
Model.R - 3  (D: 00.00s  T: 00.02s)

ERROR: [1] Uso indebido de "=" en
@Model.Results GetParent(?)

[Call stack]
  [14] Real Model.Results::submodel.R::instance::_InitializeParametersMissing (Real void)
  [13] Real Model.Results::submodel.R::instance::_BuildChilds (Real void)
  [12] Real Model.Results::submodel.R::instance::_.Initialize (Real void)
  [11] NameBlock MMS::@SubmodelC.Results::Default (NameBlock parent, NameBlock submodel)
...

Changed 3 years ago by josp

(In [6825]) refs #1661, #1866, se corrigen errores sintacticos relacionados con la carga de ozas

Note: See TracTickets for help on using tickets.