Clause
← Toute la documentation

Traduit de l'original anglais · 06042fa · 2026-10-09 · Lire en anglais

Préprocesseur

Réimplémentation native en C++ d'epp d'OTP pour le source épinglé de maint-29. Boost.Parser gère les règles de caractères ; des métadonnées partagées du compilateur fournissent la précédence des opérateurs. Les jetons développés ne sont jamais reconvertis en texte source.

PreprocessorSession renvoie les formes développées (y compris les attributs -file implicites), des diagnostics structurés et des instantanés immuables des fonctionnalités par forme ; features() expose l'état final de la session pour l'analyseur. C'est une interface interne, pas un format d'étape public. DirectiveReader est l'ancienne API purement syntaxique.

Comportement pris en charge

Politiques de compatibilité

Limites et diagnostics

Valeurs par défaut (configurables via PreprocessorLimits) : 256 niveaux de développement et 1 000 000 jetons produits par forme, profondeur d'inclusion 64, imbrication d'expressions 256, plus des bornes fixes de 4 194 240 bits pour les entiers (la limite d'OTP sur les hôtes 64 bits) et 1 000 000 bits pour les valeurs bitstring. L'épuisement est un diagnostic de ressource, jamais une condition fausse silencieuse.

Les diagnostics portent une catégorie stable, une sévérité, des étendues physiques, des coordonnées logiques optionnelles et les étendues de macros/inclusions associées. Les avertissements ne font pas échouer ; les erreurs mémorisent l'échec tandis que la récupération continue à la frontière de forme suivante.

Tests

Les références de jetons (semantic/*.erl.tokens) consignent les types de jetons d'epp, les valeurs décodées (flottants sous forme de bits binary64) et l'ordre des diagnostics ; la formulation n'a pas à être identique à celle d'OTP. Des fragments locaux semantic/headers/*.hrl remplacent les en-têtes d'OTP autrefois copiés. preprocessor_workflow couvre de vrais arbres d'inclusion, l'ordre des options, l'environnement, Latin-1 et des cas de conditions via la CLI.