@@ -64,12 +64,23 @@ def clear_macro_templates(cls) -> None:
6464 cls ._macro_templates .clear ()
6565
6666 @classmethod
67- def init_macro_templates (cls , cleaned_lines : list [str | None ]) -> None :
68- """Load ``lexical-macros.txt`` (already block-comment-stripped like Java)."""
67+ def init_macro_templates (
68+ cls ,
69+ cleaned_lines : list [str | None ],
70+ ) -> tuple [int , int , tuple [str , ...]]:
71+ """Load ``lexical-macros.txt`` (already block-comment-stripped like Java).
72+
73+ Returns ``(macros_loaded, macros_failed, failed_macro_names)`` where *macros_failed*
74+ counts macro headers that never received a non-empty body (including at EOF),
75+ and *failed_macro_names* lists those macro base names in parse order.
76+ """
6977 cls .clear_macro_templates ()
7078 name : str | None = None
7179 metavars : list [str ] = []
7280 body : list [str ] = []
81+ loaded = 0
82+ failed = 0
83+ failed_names : list [str ] = []
7384 for raw in cleaned_lines :
7485 if raw is None :
7586 continue
@@ -78,6 +89,7 @@ def init_macro_templates(cls, cleaned_lines: list[str | None]) -> None:
7889 continue
7990 if not line and body and name is not None :
8091 cls ._macro_templates [name ] = (list (metavars ), list (body ))
92+ loaded += 1
8193 name , metavars , body = None , [], []
8294 continue
8395 if name is None :
@@ -86,6 +98,11 @@ def init_macro_templates(cls, cleaned_lines: list[str | None]) -> None:
8698 body .append (line )
8799 if name is not None and body :
88100 cls ._macro_templates [name ] = (list (metavars ), list (body ))
101+ loaded += 1
102+ elif name is not None :
103+ failed += 1
104+ failed_names .append (name )
105+ return loaded , failed , tuple (failed_names )
89106
90107 @classmethod
91108 def _expand_macro_body (cls , name : str , metavals : list [str ]) -> list [str ]:
0 commit comments