Clause
← Toda a documentação

Traduzido do original em inglês · 06042fa · 2026-10-09 · Ler em inglês

Pré-processador

Reimplementação nativa em C++ do epp do OTP para o código-fonte fixado maint-29. O Boost.Parser trata as regras de caracteres; os metadados partilhados do compilador fornecem a precedência dos operadores. Os tokens expandidos nunca são convertidos de volta em texto de código-fonte.

PreprocessorSession devolve as formas expandidas (incluindo os atributos -file implícitos), diagnósticos estruturados e instantâneos imutáveis de features por forma; features() expõe o estado final da sessão ao parser. Esta é uma interface interna, não um formato público de fase. DirectiveReader é a API mais antiga, só de sintaxe.

Comportamento suportado

Políticas de compatibilidade

Limites e diagnósticos

Valores por omissão (configuráveis através de PreprocessorLimits): 256 níveis de expansão e 1 000 000 de tokens produzidos por forma, profundidade de include 64, aninhamento de expressões 256, mais limites fixos de 4 194 240 bits para inteiros (o limite do OTP em anfitriões de 64 bits) e 1 000 000 de bits para valores bitstring. O esgotamento é um diagnóstico de recursos, nunca uma condição falsa silenciosa.

Os diagnósticos incluem uma categoria estável, a gravidade, intervalos físicos, coordenadas lógicas opcionais e intervalos de macros/includes relacionados. Os avisos não provocam falha; os erros registam a falha enquanto a recuperação continua no limite da forma seguinte.

Testes

Os goldens de tokens (semantic/*.erl.tokens) registam os tipos de tokens do epp, os valores descodificados (floats como bits binary64) e a ordem dos diagnósticos; a formulação não tem de ser igual à do OTP. Os fragmentos locais semantic/headers/*.hrl substituem os cabeçalhos do OTP antes copiados. preprocessor_workflow cobre árvores de includes reais, a ordem das opções, o ambiente, Latin-1 e casos de condições através da CLI.