Ver Mensaje Individual
  #13
Antiguo 31 de agosto de 2026, 16:36
Eslopes
Creador de
PowerRustCOBOL
Guru de los Gurus: Por solidos y amplios conocimientos - Issue reason: Por ámplios conocimientos en la materia Concurso: Tercer puesto: Ganador/a del Tercer puesto en un concurso - Issue reason: Juego  Innovación: Por aportar innovaciones - Issue reason: Por aportar soluciones innovadoras 
Última Actividad 27.10.2026 07:38
Posts Posts: 396
Likes enviados Enviados: 31
Likes recibidos Recibidos: 172

Una referencia sin subíndice a una tabla es ahora el grupo de sus propias ocurrencias, para leer (group_value, group_bytes), escribir (set_group_bytes, set_from_bytes) y medir (item_width). El nuevo CobolEnvironment::table_extent_keys reconoce exactamente ese caso y nada más: una clave completamente subindexada sigue nombrando una sola ocurrencia, y un grupo sigue leyendo y escribiendo a través de sus propias layout_keys. La expansión por hijo de occurrence_keys se movió a expand_occurrences para que ambos recorridos compartan una única definición de lo que es una ocurrencia, OCCURS ... DEPENDING ON incluido. Prueba de regresión: a_redefines_over_a_linkage_table_reaches_the_calle rs_occurrences en crates/cobolt-runtime/tests/test_linkage_redefines.rs. NIST CCVS85 — Comunicación inter-programa (IC): ejecución 16 -> 17 de 25 programas limpios, 299 -> 301 aserciones PASS y 12 -> 9 FAIL. Conformidad de compilación sin cambios en 47/47 para el módulo y 412 / 421 para toda la suite en alcance.

=== PowerRustCOBOL 1.62.100 — 2026-08-30 ===

• Corregido — un nombre de registro en colisión dejaba sin enlazar los hijos de un parámetro de grupo

Los miembros CCVS85 IC203A e IC205A llaman ambos TABLE-2 a su registro. El del llamador es 02 DN6 PIC X OCCURS 2; el del llamado es 02 TV-1 PIC X. 02 TV-2 PIC X. Como los nombres colisionan, push_local_scope nunca instala el 01 del llamado — gana el del llamador, correctamente — pero el emparejamiento de parámetros de grupo recorría entonces el símbolo del entorno compartido para AMBOS lados y leía dos veces el árbol del llamador. TV-1 y TV-2 del llamado nunca quedaban enlazados a nada: el MOVE "B" TO TV-2 de IC205A escribía en una ranura privada que nadie lee, y CNCL-TEST-05 reportaba COMPUTED= vacío.

Dos cambios, un solo mecanismo. El lado del parámetro del emparejamiento se recorre ahora sobre la propia tabla de símbolos del llamado (register_nested ya la lleva consigo), con los anchos leídos únicamente de la PICTURE. El lado del argumento expande las ocurrencias de una tabla fija como objetivos de alias — TV-2 -> DN6(2) —, que es la dirección consultable: una CLAVE de alias solo se busca por nombre base (a_subscripted_alias_key_is_never_consulted), pero un objetivo se almacena y se sigue textualmente. Una tabla con OCCURS DEPENDING ON sigue rechazándose; su extensión en el momento del enlace no es su extensión durante toda la llamada.

La puntuación CCVS no cambia: 301 PASS / 9 FAIL, y el motivo queda registrado con prueba. La corrección del enlace llevó el COMPUTED= de CNCL-TEST-05 de vacío a XY — las escrituras ya llegan —, pero el miembro sigue en rojo por un segundo defecto separado: una ejecución instrumentada de la cadena fiel muestra que el contador de llamadas de IC206A llega exactamente a 3, y exactamente a 1 tras CANCEL, y aun así las dos pruebas IF DN2 deciden mal. El 77 DN2 COMP privado de IC205A es en realidad el hijo PIC XXX del llamador (el defecto de colisión de nombres medido en el callejón sin salida del shadowing de 1.62.98), así que una comparación numérica se ejecuta como alfanumérica: " 3" contra "3 ". IC203A pasa por tanto al cubo de bloqueados por ámbito de activación junto a IC101A e IC225A; la semántica de comparación se dejó deliberadamente intacta: doblarla para tapar un defecto de ámbito es la vía de heurísticas de palabras que este proyecto rechaza. Compilación de la suite completa 412 / 421; suites de runtime 0 fallidas; NC/SQ/IX/RL/IF intactos por esta vía (el bucle de enlace solo se ejecuta en llamadas a programas anidados, y las comprobaciones por cambio lo cubren) — puerta completa en el límite de módulo según el dictamen del operador.

=== PowerRustCOBOL 1.62.101 — 2026-08-30 ===

• Corregido — un argumento de CALL con subíndice enlazaba la tabla entera

CALL ... USING SUBSCRIPTED-DATA (4) enlazaba el parámetro al nombre desnudo de la tabla: expr_to_name descarta el subíndice, y desde 1.62.99 una escritura a un nombre de tabla desnudo es la tabla entera — así que el valor del llamado aterrizaba en la ocurrencia 1, mientras que CALL-TEST-06-08 de CCVS85 IC235A lee la ocurrencia 4.



Post añadido a las 10:30. Post anterior a las 10:29


El subíndice se evalúa ahora en el momento del enlace, exactamente igual que BY REFERENCE fija la identidad del argumento en el CALL, y la clave con subíndice viaja como objetivo del alias — los objetivos se siguen textualmente; solo las CLAVES de alias son búsquedas por nombre base. La prueba de regresión afirma las dos mitades: la ocurrencia 4 recibe la escritura del llamado y la ocurrencia 1 queda intacta — la segunda aserción es lo que distingue la corrección del accidente de tabla entera que producía S1=[1A].

Comunicación entre programas (IC), ejecución: 301 PASS / 9 FAIL -> 302 PASS / 8 FAIL, programas limpios 17 de 25; IC235A pasa de 2 a 1 fallo, conservando solo su .06 bloqueado por ámbito de activación. Compilación de la suite completa 412 / 421; suites de runtime 0 fallidas; 13 pruebas de sonda en verde.

=== PowerRustCOBOL 1.62.102 — 2026-08-30 ===

• Corregido — un registro pasado BY REFERENCE es una vista sobre sus bytes

Un llamador puede pasar un registro que el llamado describe con un árbol completamente distinto — incluido el extremo en que el llamador no tiene ningún ítem dentro. CCVS85 IC112A pasa el 01 SQ-FS3R1-F-G-120. 02 FILLER PIC X(120). de su FD, e IC113A tiende sobre él un árbol de 120 bytes totalmente nombrado, comprobando XRECORD-NUMBER en el desplazamiento 34. Ningún emparejamiento ítem a ítem puede enlazar eso: no hay nada en el lado del llamador sobre lo que crear un alias.

Cuando el emparejamiento de un parámetro de grupo no enlaza nada por debajo del propio 01, los bytes del argumento se trocean ahora hacia las hojas del llamado a la entrada, y las hojas nombradas se parchean de vuelta sobre los bytes del argumento a la salida, conservando las posiciones FILLER lo que tenía el llamador. Los desplazamientos vienen de compute_layout, el mismo recorrido en el que ya confían los registros de FD. Tres guardas hacen la vía puramente aditiva: solo se dispara cuando cero hijos se emparejaron, escribe solo ranuras insertadas por esta llamada, y exige que el ancho declarado y el real coincidan byte a byte.

• Corregido — el nombre de un llamado podía quedar en alias sobre una ranura FILLER

El emparejamiento posicional cerraba en cremallera las claves de layout en bruto, y esas incluyen ranuras FILLER sintéticas. Que la primera hoja del llamado se emparejara con un FILLER del llamador era un bug de corrupción: un MOVE "BYE" TO HEAD a través de ese alias escribía la ranura FILLER con el ancho del propio FILLER y arrasaba un registro de 20 bytes dejándolo en "BYE" más espacios. Ningún programa puede referenciar una clave FILLER sintética — su separador no puede aparecer en un nombre COBOL —, así que un alias así solo puede fallar. Ambos lados del emparejamiento las excluyen ahora.

La puntuación CCVS no se movió — IC sigue en 302 PASS / 8 FAIL — y el diagnóstico de IC112A es el hallazgo. Con la vista en su sitio, su fallo es RECORDS-IN-ERROR = 649: todos los registros fallan las comprobaciones del llamado, porque los nombres de hoja de IC113A (XRECORD-NUMBER, XFILE-NAME, XLABEL-TYPE) colisionan todos con la tabla del andamiaje CCVS del llamador, FILE-RECORD-INFO-P1-120. Nunca se insertan, la guarda de solo-insertadas rehúsa con razón escribirlas, y las lecturas del llamado se resuelven al andamiaje del llamador en lugar de a su propio registro. Una clave, dos significados: IC112A entra en el cubo de bloqueados por ámbito de activación, que ya contiene seis de los ocho fallos restantes. Compilación de la suite completa 412 / 421; suites de runtime 0 fallidas; todas las repros anteriores re-verificadas.

=== PowerRustCOBOL 1.62.103 — 2026-08-30 ===

• Corregido — los archivos propios de un programa anidado no existían

build_file_specs recorría solo el programa externo, de modo que un SELECT/FD declarado dentro de un subprograma nunca se registraba: OPEN, READ y WRITE sobre él chocaban con unknown file y, en silencio, no hacían nada. CCVS85 IC115A crea, verifica y relee un archivo de 649 registros enteramente desde dentro de un subprograma; una repro de 40 líneas mostraba READ: unknown file.



Post añadido a las 10:32. Post anterior a las 10:30


El registro recorre ahora recursivamente los programas anidados, el más externo primero — un nombre que la unidad de ejecución ya conoce se deja en paz. Esa política es estructural para el único archivo que declara todo programa CCVS85: el PRINT-FILE de cada subprograma sigue resolviéndose al archivo de informe del programa externo, exactamente igual que FILE STATUS cae en cascada. El cursor de lectura persiste entre activaciones, y la prueba de regresión fija los tres comportamientos: registro, persistencia del cursor y AT END.

• Corregido — los símbolos solo viajaban adonde viajaban los valores

push_local_scope insertaba el símbolo de un programa anidado solo cuando existía una clave de almacenamiento con el mismo nombre. Un grupo y el nombre base de una tabla no poseen ranura de almacenamiento, así que exactamente los metadatos que necesita todo recorrido estructurado — dims, layout_keys, las PICTURE — nunca llegaban. Los símbolos se llevan ahora por sí mismos, gana el primero, y se retiran exactamente al hacer pop.

Comunicación entre programas (IC), ejecución: 302 -> 303 PASS / 8 FAIL (una prueba de archivo de IC114A); cada uno de los ocho programas que aún fallan está exactamente en un fallo. El propio LINK-TEST-12 de IC114A sigue en rojo, con un diagnóstico a nivel de byte registrado en el libro mayor: los nombres de campo del andamiaje del subprograma son los nombres de campo del registro del llamador, y los registros escritos entrelazan los campos de los dos programas — la colisión de ámbito de activación al nivel de símbolo. Siete de los ocho fallos restantes están ya en ese cubo. Compilación de la suite completa 412 / 421; suites de runtime 0 fallidas; todas las repros anteriores re-verificadas; 15 pruebas de sonda en verde.

=== PowerRustCOBOL 1.62.104 — 2026-08-30 ===

• Corregido — los datos propios de un programa llamado son suyos: el ámbito de activación

Cada uno de los ocho fallos restantes de IC se había reducido, cada cual con su propia prueba medida, a una única primitiva ausente: la WORKING-STORAGE privada de un programa anidado se fusionaba en un único entorno compartido, de modo que el contador de llamadas 77 DN2 de un llamado ERA el DN2 del llamador, el guardar-en-área-de-trabajo de un llamado destruía el argumento del llamador antes de leerlo, y un ítem numérico de un llamado se comparaba como texto porque su capacidad declarada pertenecía al nombre de otro.

La primitiva, construida a partir de las restricciones de tres intentos revertidos:
- Cualificación en el momento del registro. Todo lo que un programa declara en privado (WS/LS; no GLOBAL, no EXTERNAL, no OBJECT REFERENCE — cada uno de esos es un enlace compartido por la unidad de ejecución) pasa a claves cualificadas por programa, PROG + \u{4} + nombre, con las listas internas de claves de los símbolos, los anfitriones de nombres de condición y las clases de REDEFINES reescritos a través del mismo mapa. El entorno compartido no puede colisionarlas con nadie, por construcción.
- Desvíos por activación. En el CALL, un alias nombre -> cualificado viaja por la vía existente de resolve_name y el vec existente de guardar/restaurar. Gana ANTES de la canonicalización: mientras una activación se ejecuta, solo se ejecutan sus propias sentencias, así que una hoja desnuda que lleva un desvío es el ítem propio de ese programa, sea cual sea el árbol del mismo nombre que declare el llamador. Solo los desvíos toman la vía temprana — sus objetivos llevan el separador que ningún objetivo de SET ADDRESS puede contener.
- Estado descriptivo bajo claves cualificadas, instalado una sola vez. El acarreo total se revirtió en su día sobre claves crudas porque los hermanos podían verlo; las claves cualificadas no pueden colisionar, así que las capacidades, las plantillas de edición y BLANK WHEN ZERO se instalan ahora en la construcción y nunca se deshacen. Sin ellas, un PIC 9(6) privado no tenía capacidad e IF X (1) EQUAL TO 649 comparaba "000649" con "649 " — el bucle de creación escribió treinta megabytes antes de que fuera abortado.



Post añadido a las 10:33. Post anterior a las 10:32


Comunicación entre programas (IC), ejecución: 303 PASS / 8 FAIL -> 305 PASS / 4 FAIL, programas limpios 17 -> 21 de 25. IC101A, IC114A, IC203A, IC226A e IC227A se ejecutan limpios — tres de ellos por primera vez en la historia. Las cuatro pruebas de aceptación pasan, incluida la guarda de que los campos de un parámetro de grupo siguen llegando al llamador. Se actualizaron dos expectativas de prueba en las que los valores eran correctos y solo cambió la representación: el PIC 9(4) de un programa anidado muestra ahora 0001 exactamente igual que siempre lo ha hecho el de un programa externo, porque el ítem por fin tiene su capacidad. Compilación de la suite completa 412 / 421; NC 95/95 (4614), SQ 85/85 (624), IX 41/41 (574), RL 34/34 (354), IF 45/45 (841), todos exactos; suites de runtime 0 fallidas.

=== PowerRustCOBOL 1.62.105 — 2026-08-30 ===

• Corregido — un parámetro LINKAGE con edición edita

MOVE "ABCD" TO EDITED-FIELD, donde EDITED-FIELD PIC XXBX0X es una descripción LINKAGE del llano ALPHA-EDITED PIC X(6) del llamador, almacenaba los cuatro caracteres en crudo. La escritura sigue el alias del parámetro hasta la clave del llamador y pedía la plantilla de edición de ESA clave — que con razón no existe, pues fuera de la llamada el ítem es un X(6) llano. La edición pertenece a la descripción a través de la cual se escribe, no a aquella sobre la que se escribe.

El parámetro presta ahora su plantilla al argumento durante exactamente la duración del enlace, y la recupera a la salida. Es correcto porque, mientras está prestada, solo se ejecutan las sentencias de la activación; la segunda mitad de la prueba de regresión escribe la misma ranura después de la llamada y exige que quede sin editar — una plantilla fugada fallaría precisamente ahí.

Tres piezas tuvieron que alinearse, cada una hallada por medición: pic_char_width acepta los caracteres de inserción alfanumérica B, 0 y / (cada uno ocupa una posición almacenada — eso es lo que hace que XXBX0X mida seis), de modo que el emparejamiento por desplazamientos pueda siquiera tender el árbol de forma distinta del llamado sobre los bytes del llamador; y las plantillas de edición alfanumérica viven en su propio mapa, separado de las numéricas, que tanto la instalación descriptiva en construcción como el préstamo acarrean ahora. Comunicación entre programas (IC), ejecución: 305 PASS / 4 FAIL -> 307 PASS / 2 FAIL, programas limpios 21 -> 23 de 25 — el 99.4% de las aserciones puntuadas del módulo. IC103A e IC235A se ejecutan limpios. Compilación de la suite completa 412 / 421; NC 95/95 (4614), SQ 85/85 (624), IX 41/41 (574), RL 34/34 (354), IF 45/45 (841), todos exactos; 104 suites de runtime, 0 fallidas.

=== PowerRustCOBOL 1.62.106 — 2026-08-30 ===

• Corregido — una vista de registro sobrevive a nombres en colisión, y sus grupos son legibles

Dos remates de la vista de registro de 1.62.102, ambos aflorados por LINK-TEST-08 de CCVS85 IC112A y hallados con una sonda por registro. Los campos de la vista son la ventana privada del llamado sobre los bytes del argumento — no se emparejan con nada, por diseño —, así que un campo cuyo nombre colisiona con algo que declara el llamador toma ahora una clave de activación y un desvío, exactamente como los datos privados, con sus capacidades declaradas reflejadas sobre la clave de la vista. La vieja guarda de solo-insertadas dejaba a la vista sin sustento cada vez que los nombres de campo del llamado coincidían con el andamiaje CCVS del llamador (XRECORD-NUMBER contra el árbol FILE-RECORD-INFO): 649 de 649 registros "in error".

Y los grupos nombrados de una vista se suman a ella para lectura: IC113A comprueba REELUNIT-NUMBER-GROUP, un grupo de dos bytes sobre /0, y una vista que solo desvía hojas elementales enviaba ese nombre a la tabla del mismo nombre del llamador. Los grupos se desvían y se trocean hacia dentro; el copiado de salida sigue parcheando desde las hojas elementales.



Post añadido a las 10:35. Post anterior a las 10:33


Comunicación entre programas (IC), ejecución: 307 PASS / 2 FAIL -> 308 PASS / 1 FAIL, programas limpios 23 -> 24 de 25 — el 99.7%. IC112A se ejecuta limpio. Queda un solo miembro: IC225A. Compilación de la suite completa 412 / 421; 104 suites de runtime, 0 fallidas.

=== PowerRustCOBOL 1.62.107 — 2026-08-30 ===

• IC (Comunicación entre programas) está TERMINADO — 25/25, 309 PASS / 0 FAIL

El último miembro cayó ante la última aplicación de la primitiva de ámbito de activación: un parámetro elemental BY CONTENT es una copia privada. El viejo tratamiento de alias-y-restaurar se rompía en cuanto el mismo argumento viajaba además por referencia — CALL-TEST-02-03 de CCVS85 IC225A pasa DN1 una vez CONTENT y una vez REFERENCE en un mismo CALL, el ADD del llamado llega al llamador por la referencia, y la restauración del CONTENT volvía a poner el valor antiguo. Una copia en una clave de activación no tiene restauración que machaque nada, y una escritura a través del parámetro CONTENT alcanza solo la copia — el significado entero de la cláusula. Los grupos conservan el tratamiento de alias; sus subordinados se resuelven al almacenamiento del llamador por diseño.

La puerta de cierre del módulo, al completo: IC con 25 de 25 programas ejecutándose limpios, 309 de 309 aserciones puntuadas PASS (DELETED 4, rastreadas durante todo el módulo). NC 95/95 (4614 aserciones), SQ 85/85 (624), IX 41/41 (574), RL 34/34 (354), IF 45/45 (841) — todos exactos; compilación de la suite completa 412/421; 104 suites de runtime, 0 fallidas; las seis pruebas de ámbito de activación en verde, incluidos los dos negativos estructurales.

IC entró en el libro mayor en 1.62.81 como el módulo más débil jamás tomado como línea base: 6 de 25 limpios, 134 PASS / 129 FAIL. Veintiséis versiones después es el sexto módulo terminado y se une a las líneas base protegidas. ST (Sort-Merge) está ahora en curso, con línea base 157 PASS / 99 FAIL, 13 de 40 limpios, y con cuatro miembros que no producen informe CCVS alguno — el primer cubo por leer.

=== PowerRustCOBOL 1.62.108 — 2026-08-30 ===

• Arnés — las ocho cadenas de productores de ST, y los miembros sin informe por diseño

Dos correcciones de medición, ningún cambio de runtime. El módulo Sort/Merge está construido como ocho cadenas creador -> clasificador -> verificador, escritas en las propias cabeceras de miembro de la suite (*HEADER,COBOL,ST101A,SUBPRG,ST102A); las quince entradas de inherits_from las reflejan ahora, de modo que cada miembro se ejecuta después de su productor en el mismo directorio. Y un miembro que nunca nombra la tarjeta de impresora X-55 NO PUEDE informar: ST102A tiene setenta y ocho líneas — varios SELECT, una SD, un SORT, STOP RUN — y lo verifica el siguiente programa de su cadena. Salir con código 0 y sin informe es exactamente el aspecto de un miembro así cuando funciona, y ahora se puntúa de esa manera.

Sort/Merge (ST), ejecución: 157 PASS / 99 FAIL -> 588 PASS / 44 FAIL, programas limpios 13 -> 19 de 40 — cientos de aserciones antes inalcanzables se ejecutan ahora, una ganancia de fidelidad de medición en el sentido que registra la regla de puerta del libro mayor. Siguen abiertos: tres clasificadores que referencian la impresora y sin embargo no imprimen nada, un nuevo timeout de 20 segundos (ST127A), y los dos fallos de compilación de COLLATING SEQUENCE. Los seis módulos protegidos re-verificados exactos bajo el arnés cambiado, entre ellos el 309/0 de IC por primera vez; compilación de la suite completa 412 / 421.

=== PowerRustCOBOL 1.62.109 — 2026-08-30 ===

• Arnés — informar es ejecutar PRINT-DETAIL, no nombrar la impresora

ST110A declara PRINT-FILE sobre la tarjeta X-55 y nunca lo abre, así que el predicado de 1.62.108 — "nombra la tarjeta de impresora" — seguía llamando fallos a tres clasificadores que funcionan. La señal verdadera es la propia maquinaria CCVS: todo miembro que informa la mueve a través de PRINT-DETAIL, y un clasificador no tiene ninguno que mover.



Post añadido a las 10:36. Post anterior a las 10:35


Sort/Merge (ST), ejecución: 19 -> 22 de 40 limpios (aserciones sin cambio, en 588 / 44). Lo que queda es real: cinco verificadores de cadena, cada uno con exactamente un fallo; ST103A con cuatro; el timeout de ST127A; dos miembros mayores (ST131A con 6, ST133A con 15); y los dos fallos de compilación de COLLATING SEQUENCE.

=== PowerRustCOBOL 1.62.110 — 2026-08-30 ===
• Corregido — SORT respeta el contrato de registros de longitud variable
SORT ... USING/GIVING leía su entrada con un lector en bloque de tamaño fijo y escribía su salida en bruto, mientras que todos los demás READ y WRITE de un fichero de longitud variable hablan el contrato del prefijo de longitud. Con los registros de 50 a 100 bytes de ST110A de CCVS85, el lector cercenaba cada registro contra sus vecinos y alimentaba al ordenador de registros con basura, y los verificadores de la cadena reportaban EOF prematuro en el fichero GIVING. Ahora ambos lados del sort comprueban is_varying() y usan el prefijo.

Sort/Merge (ST), ejecución: 588 PASS / 44 FAIL -> 601 PASS / 44 FAIL; programas limpios 22 -> 24 de 40 — se despejaron las cadenas de ST109A y ST112M. Los fallos de ST137A pasaron de 1 -> 3 porque empezaron a ejecutarse aserciones antes inalcanzables. Compilación de la suite completa 412/421; 104 suites de runtime, 0 fallidas.

=== PowerRustCOBOL 1.62.111 — 2026-08-30 ===
• Corregido — INPUT/OUTPUT PROCEDURE a THRU b ejecuta el rango completo
El parser leía el extremo THRU de un procedimiento de SORT/MERGE y lo descartaba, de modo que el intérprete ejecutaba solo la primera sección del rango. ST106A de CCVS85 escribe INPUT PROCEDURE INPROC THRU INPROC-EXIT, y su bucle de RELEASE — que abarca el rango — no liberaba nada: el fichero GIVING salía vacío y todos los verificadores posteriores reportaban EOF prematuro. El AST ahora conserva el par, y exec_sort ejecuta un rango THRU exactamente igual que PERFORM a THRU b.

Sort/Merge (ST), ejecución: 601 PASS / 44 FAIL -> 660 PASS / 127 FAIL; programas limpios 24 -> 26 de 40. El crecimiento de los FAIL es del tipo honesto: ST127A dejó de agotar el tiempo y su procedimiento de salida ejecuta ahora 101 aserciones (80 fallando actualmente), y el rango de entrada de ST119A abrió 25 más. Al ser un cambio del parser, la puerta completa se ejecutó de inmediato: NC 95/95 (4614/0), SQ 85/85 (624/0), IX 41/41 (574/0), RL 34/34 (354/0), IF 45/45 (841/0), IC 25/25 (309/0), compilación 412/421, 104 suites de runtime y la suite del parser con 0 fallos.

=== PowerRustCOBOL 1.62.112 — 2026-08-30 ===
• Corregido — un campo DISPLAY con signo conserva su signo en la imagen del registro
field_bytes representaba un numérico con signo mediante unsigned_abs() y distribute convertía cada byte no numérico en '0' antes de parsear sin signo, así que un viaje de ida y vuelta por el registro borraba los signos por completo: el sort de ocho claves de ST127A de CCVS85 ordenaba -5432 después de +501, y ochenta de sus aserciones fallaban con COMPUTED= 000005432 frente a CORRECT = -000005432.

Una picture con signo (S9..., con el signo no SEPARATE) representa ahora su dígito final con el overpunch estándar — {/A-I para +0...+9, }/J-R para -0...-9 — y distribute lee de vuelta esa misma convención, respetando también un - inicial procedente de escritores con signo separado. El recorrido del layout registra la condición de signo campo a campo.

Sort/Merge (ST), ejecución: 660 PASS / 127 FAIL -> 683 PASS / 92 FAIL; programas limpios 26 -> 28 de 40. Las imágenes de registro son terreno compartido, así que se ejecutó la puerta protegida completa: NC 95/95 (4614/0), SQ 85/85 (624/0), IX 41/41 (574/0), RL 34/34 (354/0), IF 45/45 (841/0), IC 25/25 (309/0), compilación 412/421, 104 suites de runtime con 0 fallos.
Eslopes is offline   Responder Con Cita