Clause
← Toda la documentación

Traducido del original en inglés · 06042fa · 2026-10-09 · Leer en inglés

Preprocesador

Reimplementación nativa en C++ de epp de OTP para el código fuente fijado de maint-29. Boost.Parser se encarga de las reglas de caracteres; los metadatos compartidos del compilador proporcionan la precedencia de operadores. Los tokens expandidos nunca se vuelven a convertir en texto fuente.

PreprocessorSession devuelve las formas expandidas (incluidos los atributos -file implícitos), diagnósticos estructurados e instantáneas inmutables de funcionalidades por forma; features() expone el estado final de la sesión para el analizador sintáctico. Es una interfaz interna, no un formato de etapa público. DirectiveReader es la API anterior, solo sintáctica.

Comportamiento soportado

Políticas de compatibilidad

Límites y diagnósticos

Valores por defecto (configurables mediante PreprocessorLimits): 256 niveles de expansión y 1.000.000 de tokens producidos por forma, profundidad de include 64, anidamiento de expresiones 256, más límites fijos de 4.194.240 bits para enteros (el límite de OTP en anfitriones de 64 bits) y 1.000.000 de bits para valores bitstring. El agotamiento es un diagnóstico de recursos, nunca una condición falsa silenciosa.

Los diagnósticos incluyen una categoría estable, la gravedad, los tramos físicos, coordenadas lógicas opcionales y los tramos de macros/includes relacionados. Las advertencias no provocan fallo; los errores retienen el fallo mientras la recuperación continúa en el siguiente límite de forma.

Pruebas

Los goldens de tokens (semantic/*.erl.tokens) registran los tipos de token de epp, los valores decodificados (flotantes como bits binary64) y el orden de los diagnósticos; la redacción no tiene por qué coincidir con la de OTP. Los fragmentos locales semantic/headers/*.hrl sustituyen a las cabeceras de OTP que antes se copiaban. preprocessor_workflow cubre árboles de include reales, el orden de las opciones, el entorno, Latin-1 y casos de condiciones a través de la CLI.