Skip to main content

header-cycle-breaker

Guide for breaking cyclic dependencies in V8 headers and resolving cascade IWYU failures.

Informações da origem

Repositório
nodejs/node
Última atividade na origem
4 de outubro de 2026 às 21:04
Idioma detectado do SKILL.md
inglês
Estrelas
122.301
Forks
39.450

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
header-cycle-breaker
description
Guide for breaking cyclic dependencies in V8 headers and resolving cascade IWYU failures.
# Header Cycle Breaker Skill This skill outlines the systematic approach to breaking cyclic dependencies in V8 headers, specifically focusing on moving heavy inline includes to more localized `.cc` files or non-inline headers, and resolving the resulting cascade of "undefined inline function" errors (IWYU - Include What You Use style). ## When to Use Use this skill when: - You are tasked with breaking a header cycle in V8 (e.g., core-to-wasm cycle). - You need to remove an `-inl.h` include from another `-inl.h` or `.h` file. - You encounter a flood of `[-Werror,-Wundefined-inline]` errors after modifying a heavy header. ## Workflow ### Phase 1: Identification and Cycle Breaking 1. **Identify the cycle**: Use tools or subagents to map the include graph and find the cyclic path. 2. **Plan the break**: Identify a point where an `-inl.h` can be replaced with its non-inline counterpart (`.h`) or where an include can be moved entirely to implementation files. 3. **Apply the break**: Modify the header file to break the cycle. ### Phase 2: Resolving the Cascade (IWYU) Breaking a heavy include chain will cause many implementation files (`.cc`) and even generated files to fail because they were relying on transitive includes for inline definitions. 1. **Do not panic**: Expect tens or hundreds of compilation errors initially. 2. **Aggressive Delegation**: Spawn subagents for independent file failures. Prompt them to identify missing headers for specific undefined symbols. 3. **IWYU Application**: For each failing file: - Identify which inline method is undefined. - Find which `-inl.h` file defines it. - Include that `-inl.h` file directly in the failing `.cc` file, preferably within appropriate guards (e.g., `#if V8_ENABLE_WEBASSEMBLY`). 4. **Repeat until clean**: Build, fix, and build again. This is an iterative process. ### Phase 3: Special Case - Generated Files If a generated file (e.g., `objects-printer.cc`) fails with undefined inline methods: 1. **Trace to generator**: Realize that editing the generated file is temporary. Find the source generator (e.g., in `src/torque/`). 2. **Modify the generator**: Update the generator code to emit the necessary `#include` statements in the files it generates. 3. **Rebuild the generator**: Recompile the tool (e.g., Torque) and let the build system regenerate the files. ## Best Practices - **Keep files isolated**: Do not revert the cycle-breaking change when you see cascade errors. Push through by fixing the files. - **Use guards**: Always wrap Wasm-specific includes in `#if V8_ENABLE_WEBASSEMBLY`. - **Check trait caching**: Be aware of C++ trait caching issues if you encounter weird subtyping errors during header reorganization.
Ver no GitHub