feat(charka): SET ... TO TRUE — escribir nombres de condición (88)

La cara de escritura de los nombres de condición de COBOL: si
IF ES-VALIDO los lee, SET ES-VALIDO TO TRUE los escribe.

- IR: Stmt::SetTrue { conditions }.
- Parser: SET cond-1 cond-2 ... TO TRUE. Otras formas de SET
  (índices, TO FALSE) caen a Stmt::Unknown.
- Codegen y shadow: SET cond TO TRUE asigna a su dato padre el valor
  del 88 (un MOVE del valor a la variable).
- Corpus: programa nuevo 16-bandera (cambia banderas de texto y de
  número con SET). Verificado: el intérprete sombra y el crate
  compilado por scaffold dan la misma salida.

Tests: charka-ir 29, charka-codegen 23, charka-shadow 21. fmt +
clippy limpios.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 22:32:08 +00:00
parent fa65f20206
commit 82ba0b7a1a
12 changed files with 115 additions and 4 deletions
@@ -0,0 +1,22 @@
* corpus charka nivel 5: SET de nombres de condición (nivel 88)
IDENTIFICATION DIVISION.
PROGRAM-ID. BANDERA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-ESTADO PIC X VALUE 'N'.
88 ACTIVO VALUE 'S'.
88 INACTIVO VALUE 'N'.
01 WS-NIVEL PIC 9(1) VALUE 0.
88 NIVEL-MAX VALUE 9.
PROCEDURE DIVISION.
MAIN.
IF INACTIVO
DISPLAY 'EMPIEZA INACTIVO'
END-IF.
SET ACTIVO TO TRUE.
IF ACTIVO
DISPLAY 'AHORA ACTIVO'
END-IF.
SET NIVEL-MAX TO TRUE.
DISPLAY 'NIVEL = ' WS-NIVEL.
STOP RUN.
@@ -0,0 +1,3 @@
EMPIEZA INACTIVO
AHORA ACTIVO
NIVEL = 9
+1
View File
@@ -24,6 +24,7 @@ salida correcta, una línea por `DISPLAY`.
| `13-inspeccion` | 6 | `INSPECT` — contar (`TALLYING`) y reemplazar |
| `14-clasifica` | 6 | `EVALUATE TRUE` y rangos `WHEN ... THRU` |
| `15-resetear` | 6 | `INITIALIZE` — resetear datos y grupos |
| `16-bandera` | 5 | `SET` de nombres de condición (nivel 88) a `TRUE` |
## Formato