Saltar al contenido
cd /languages
  • Núcleo de sistemas
  • Programación
  • Soporte de AST y símbolos

C en Maguyva: grafos de llamadas para código de sistemas y embebido

Maguyva admite C con AST, símbolos y grafo, para que los agentes de IA sigan funciones, structs, includes y llamadores en código de sistemas, firmware y bibliotecas.

Por qué C necesita un grafo de llamadas y no grep

C no tiene clases ni módulos que organicen el código. La estructura vive en las llamadas a funciones, los headers y los structs, y el mismo nombre puede aparecer en comentarios, macros y literales de cadena. Las macros de exportación y de anotación envuelven declaraciones, lo que hace tropezar a las herramientas que solo analizan C puro. Para un agente, el primer paso seguro es el grafo de llamadas.

Maguyva construye ese grafo para que un agente vea a qué llega una función y qué llega a ella antes de proponer un cambio.

Qué extrae Maguyva en C

Maguyva cubre .c y .h. Las definiciones de funciones se extraen como símbolos, y los structs y unions se pueden seleccionar como definiciones de tipo en la búsqueda estructural. Las directivas #include se convierten en relaciones de importación.

Las macros de exportación y visibilidad (patrones como FOO_API, DLLEXPORT o LIBEXPORT) y las macros de anotación de seguridad entre hilos (como GUARDED_BY y REQUIRES) se enmascaran antes del análisis, así que las declaraciones envueltas en ellas se siguen reconociendo como declaraciones. Los cuerpos de las macros tipo función se analizan; los de las macros tipo objeto, no.

El grafo registra llamadas, includes, instanciación mediante literales compuestos, referencias de tipo, lecturas y escrituras, y flujo de control. Unas 124 llamadas de la biblioteca estándar de C (printf, malloc, free, memcpy, strlen y similares) se filtran de las relaciones para que destaque el código del proyecto.

Ejemplos de prompts para agentes

  • “¿Quién llama a uart_write, directamente o a través de otras funciones?” (dependency_search incoming)
  • “¿Qué archivos incluyen config.h y cuáles de sus structs usan?” (dependency_search y luego find_symbol)
  • “Explica cómo viaja un paquete desde la interrupción de recepción hasta el parser del protocolo.” (get_task_context)

Limitaciones conocidas

  • C no tiene clases ni excepciones, así que las relaciones de herencia, implementación de interfaces, sobrescritura, lanzamiento y captura están marcadas como no aplicables.
  • .h aparece en las listas de extensiones de C, C++ y Objective-C, por lo que los headers de varios lenguajes se comparten entre esos perfiles.
  • Las llamadas a funciones filtradas de la biblioteca estándar no son aristas del grafo. Usa text_pattern_search cuando necesites cada malloc o memcpy.

Próximos pasos

Conecta un repositorio con el inicio rápido y luego revisa la matriz de compatibilidad en la página de compatibilidad. Para código C++ en el mismo árbol, lee la guía de C++.

Mejor uso

  • > Equipos de firmware, sistemas embebidos y sistemas operativos donde un pequeño cambio en una función compartida puede llegar a rutas de hardware.
  • > Bibliotecas C de larga vida con headers públicos, macros de exportación y muchas unidades de traducción internas.
  • > Revisiones asistidas por agentes en las que la pregunta es: "¿quién llama a esto y a través de qué headers?"

Flujos de trabajo del agente

  • > Encontrar todos los llamadores de una función antes de cambiar su firma o su manejo de errores.
  • > Mapear qué archivos incluyen un header y qué structs usan.
  • > Rastrear una solicitud desde un manejador de interrupciones o un punto de entrada a través de las funciones que alcanza.

Detalles del motor

  • > La compatibilidad con C cubre `.c` y `.h`. Las definiciones de funciones son símbolos, los structs y unions son definiciones de tipo, y `#include` se convierte en una relación de importación.
  • > Las macros de exportación, visibilidad y anotación de seguridad entre hilos se enmascaran antes del análisis, así que las declaraciones envueltas se analizan. Los cuerpos de macros tipo función se analizan; los de macros tipo objeto, no.
  • > Unas 124 llamadas de la biblioteca estándar como `printf`, `malloc` y `memcpy` se filtran. Las relaciones de herencia, sobrescritura y excepciones están marcadas como no aplicables.

Puntos de entrada MCP útiles

  • find_symbol

    Úsalo con el nombre de una función o struct cuando necesites la definición y cada referencia.

  • dependency_search

    Usa el recorrido incoming sobre una función compartida antes de cambiar su firma o su manejo de errores.

  • get_task_context

    Úsalo para prompts como "explica cómo viaja un paquete desde la interrupción de recepción hasta el parser del protocolo".