Opened 12 years ago
Last modified 9 years ago
#1661 new defect
Error sintáctico grave cargando paquetes con #Require
Reported by: | Pedro Gea | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
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 (8)
comment:1 Changed 12 years ago by
comment:2 Changed 12 years ago by
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.
comment:3 Changed 11 years ago by
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.
comment:4 Changed 11 years ago by
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.
comment:5 Changed 10 years ago by
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" ...
comment:7 Changed 10 years ago by
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) ...
Véase MMS#944.