BUG (Pendiente de Solucionar)Usando una variante de DEBUG para detectar qué primitivas del Ace Forth (ROM) llaman a Forth desde c.m. (ver
este post del hilo
Utilidades II), me he encontrado con una situación que no preví.
Cuando se "depura" la palabra
INT, al ser una primitiva en c.m. de la ROM, NO se depura (se usa "Over" automáticamente). Pero resulta que DEBUG muestra una palabra que INT utiliza. Es una Headerless por lo que se imprime un nombre "raro".
Muestro a continuación el resultado de hacer
7.5 DEBUG INT que deja un 7 en la pila.

- raroname.png (602 Bytes) Visto 480 veces
El nombre que se ve justo debajo de
INT, la letra D precedida de un símbolo gráfico (basura) es el nombre que casualmente se le asigna a dicha palabra Headerless
(*). NO debería verse, pues INT se supone que no se depura.
Resulta que
INT, que está en c.m., internamente realiza un EXECUTE con el CFA de la palabra Headerless.
Y precisamente esto es lo que NO tengo previsto:
BUG: No he contemplado en DEBUG que se realice un Over a un EXECUTE, de ahí que el "Over" automático NO tiene ningún efecto sobre EXECUTE. De hecho el comando "Over" NO tiene efecto sobre EXECUTE ni activado a mano ni automáticamente por el propio DEBUG. NOTA:
EXECUTE cuando se depura siempre muestra la palabra correspondiente al CFA que ejecuta, incluso si es una Headerless. No tengo bien resuelto el tema de EXECUTE, que es la única palabra (creo recordar) que entra por el punto de entrada número cuatro del Secuenciador.
En definitiva,
INT NO es una palabra 100% en c.m., pues llama a Forth desde c.m. pero de una manera que no tuve en cuenta, en vez del modo habitual, pues lo que hace es usar internamente EXECUTE para ejecutar una palabra tipo COLON Headerless.
(*) Cuando se intenta imprimir el nombre de una palabra que NO lo tiene, tanto si lo intento yo como si lo intenta el propio Ace Forth, se aplica un procedimiento que en el caso de la Headerless le asignará un nombre "por casualidad" (aunque siempre será el mismo). Este procedimiento detecta la dirección donde se supone empieza el nombre y luego imprime todos los caracteres a partir de esa dirección hasta que encuentra uno con el bit#7 activado, que lo considera el último y lo imprime con ese bit apagado.