1.3Kпросмотров
24 марта 2025 г.
Score: 1.4K
Немного ультранасилия Последний пункт задания Clang Internals, написанного мной в несколько функциональном стиле (смотрите строго с широкого монитора).
import clang.cindex
import sys
for node in filter(lambda n : n.spelling == "fisting", filter(lambda n : n.kind.is_declaration(), clang.cindex.Index.create() .parse(None, sys.argv) .cursor.walk_preorder() ) ): print(f"'fisting' found on {node.location.file}:{node.location.line}:{node.location.column}")
Немного переусложнил, но суть такова:
1. Парсим файл и получаем translation unit;
2. Достаём оттуда корневую ноду и по ней запускаем обход;
3. Фильтруем только объявления;
4. Фильтруем только с именем fisting;
5. Печатаем диагностику для них. Функциональщина в руках нефункциональщика — зло. Доклад окончил. #compiler #llvm