Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Comprobar 'Internal Error URW1154' en XE6 y XE7 (https://www.clubdelphi.com/foros/showthread.php?t=87480)

Al González 12-01-2015 19:20:08

Comprobar 'Internal Error URW1154' en XE6 y XE7
 
1 Archivos Adjunto(s)
Hola amigos.

Hay una situación con el compilador de Delphi XE5 que produce una falla del mismo. El más o menos conocido error URW1154 que parece estar muy relacionado con genéricos.

He logrado aislar el problema que se presenta en mi caso. Si alguien tiene XE6 o XE7 a la mano, le agradecería que me ayudara a comprobar si este defecto sigue presente en esas versiones del compilador. La prueba es muy sencilla. En un proyecto que contenga dos unidades (Unit1 y Unit2), hay que escribir el siguiente código:

[archivo anexo más abajo]

Al compilar se presenta el mensaje: [dcc32 Fatal Error] ... F2084 Internal Error: URW1154

Como sabemos, estos errores poco comunes se producen en situaciones donde el compilador no logra transformar de forma adecuada el código fuente. Generalmente por darse una serie de circunstancias que se pasaron por alto en su desarrollo. Eventualmente, Embarcadero corrige el problema con algún parche o en las siguientes versiones. Mi duda principal es si este caso en particular ya fue resuelto en Delphi XE6 y XE7, por lo cual pido la colaboración de quienes tengan alguna de esas versiones. Algunos reportes de QualityCentral hablan de este error, pero no en las circunstancias que aquí presento (o no lo encontré). Como ven el código es bastante sencillo, y la solución sería evitar usar parámetros objetos genéricos con valor predeterminado (o sea, quitar el "= Nil"), con la desventaja de que el parámetro en cuestión ya no podría ser opcional, aunque esto puede compensarse un poco creando dos sobrecargas de mismo método.

¿Me ayudan a comprobar si esto sigue presente en XE6 y XE7? Pongo este enlace a una imagen que ilustra el problema: https://twitter.com/algonzalez74/sta...998592/photo/1

Espero su ayuda; no sólo es para mí, sino también para los que vengan después de mí.

Un saludo. :)

Al.

P.D. Uso Delphi XE5, Update 2.

Al González 12-01-2015 19:23:24

¡Chanfle! Han desaparecido los "<" y ">". Mejor anexo el proyecto...:(

Casimiro Notevi 12-01-2015 19:33:11

Parece que con un espacio antes y después se muestra :confused:
¿Es válido o mejor borro este mensaje?
Desconozco el uso de esa declaración :(

Al González 12-01-2015 19:59:46

Cita:

Empezado por Casimiro Notevi (Mensaje 487576)
Parece que con un espacio antes y después se muestra :confused:
¿Es válido o mejor borro este mensaje?
Desconozco el uso de esa declaración :(

Gracias, Casi. Ahora sé, para la siguiente vez, aunque no estaría mal buscar la manera de que esta sintaxis venga admitida de cajón. Los genéricos son pan de cada día con las versiones actuales de Delphi (y con cualquier otro lenguaje moderno).

Es válido, pero te faltaron algunas. Si gustas sólo dejemos el archivo anexo. ;)

Esa declaración sirve para "personalizar por tipo" a una clase, de tal forma que el compilador transforma el código en una clase especializada en el tipo que se indique. Así puedes tener, por ejemplo, un TList de enteros, un TList de cadenas, un TList de punteros, sin tener que escribir tres clases, y sin las complejidades que para un caso así presentaría intentar usar sólo herencia.

Casimiro Notevi 12-01-2015 20:07:31

Todos los días se aprende algo.

nlsgarcia 12-01-2015 21:22:12

Alberto,

Cita:

Empezado por Al
...Comprobar 'Internal Error URW1154' en XE6 y XE7...Mi duda principal es si este caso en particular ya fue resuelto en Delphi XE6 y XE7...¿Me ayudan a comprobar si esto sigue presente en XE6 y XE7?...Uso Delphi XE5, Update 2...

:rolleyes:

El resultado de las pruebas realizadas con el código propuesto en el Msg #1, al compilar en Delphi XE4 y Delphi XE6 bajo Windows 7 Professional x32 y Delphi XE7 bajo Windows 10 Technical Preview x32 fueron las siguientes:

1- Delphi XE4 : [dcc32 Fatal Error] Unit2.pas(16): F2084 Internal Error: URW1154

2- Delphi XE6 : Success

3- Delphi XE7 : Success

Luego se concluye, que el error fue corregido a partir del la versión de Delphi XE6.

Espero sea útil :)

Nelson.

Al González 12-01-2015 22:56:00

Muchas gracias, Nelson.

Lo mismo me confirmaron en Twitter y lo reporté en QC para las personas que pudieran encontrarse con el mismo problema.

Y he agregado esta nota a las clases genéricas que voy definiendo en XE5:
Código Delphi [-]
    { NOTE: We avoid using generic object parameters with default value in
      methods of generic classes, because these cause Internal Error
      URW1154 when those classes are referenced from another unit (quality
      report #129713). }
Saludos. :)


La franja horaria es GMT +2. Ahora son las 02:25:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi