Hoppa till innehåll
cd /languages
  • Systemkärna
  • Programmering
  • Stöd för AST och symboler

C i Maguyva: anropsgrafer för system- och inbyggd kod

Maguyva stöder C med AST, symboler och graf, så att AI-agenter kan följa funktioner, structs, includes och anropare i system-, firmware- och bibliotekskod.

Varför C behöver en anropsgraf och inte grep

C har inga klasser eller moduler som organiserar koden. Strukturen finns i funktionsanrop, headers och structs, och samma namn kan dyka upp i kommentarer, makron och strängliteraler. Export- och annoteringsmakron omsluter deklarationer, vilket får verktyg som bara kan parsa ren C att snubbla. För en agent är anropsgrafen det säkra första steget.

Maguyva bygger den grafen så att en agent kan se vad en funktion når och vad som når den innan den föreslår en ändring.

Vad Maguyva extraherar i C

Maguyva täcker .c och .h. Funktionsdefinitioner extraheras som symboler, och structs och unions kan väljas som typdefinitioner i strukturell sökning. #include-direktiv blir importrelationer.

Export- och synlighetsmakron (mönster som FOO_API, DLLEXPORT eller LIBEXPORT) och annoteringsmakron för trådsäkerhet (som GUARDED_BY och REQUIRES) maskeras före parsning, så att deklarationer som omsluts av dem fortfarande parsas som deklarationer. Kroppar i funktionsliknande makron parsas; kroppar i objektliknande makron gör det inte.

Grafen registrerar anrop, includes, instansiering via sammansatta literaler, typreferenser, läsningar och skrivningar samt kontrollflöde. Omkring 124 anrop i C:s standardbibliotek (printf, malloc, free, memcpy, strlen och liknande) filtreras bort ur relationerna så att projektets kod syns.

Exempel på prompter för agenter

  • “Vem anropar uart_write, direkt eller via andra funktioner?” (dependency_search incoming)
  • “Vilka filer inkluderar config.h, och vilka av dess structs använder de?” (dependency_search, sedan find_symbol)
  • “Förklara hur ett paket går från mottagningsavbrottet till protokollparsern.” (get_task_context)

Kända begränsningar

  • C har varken klasser eller undantag, så relationer för arv, gränssnittsimplementation, överskrivning, kast och fångst är markerade som ej tillämpliga.
  • .h finns i filändelselistorna för C, C++ och Objective-C, så headers i flerspråkiga träd delas mellan de profilerna.
  • Anrop till filtrerade funktioner i standardbiblioteket är inte kanter i grafen. Använd text_pattern_search när du behöver varje malloc eller memcpy.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. För C++-kod i samma träd, läs guiden för C++.

Bäst lämpad för

  • > Firmware-, inbyggda system- och operativsystemsteam där en liten ändring i en delad funktion kan nå hårdvaruvägar.
  • > Långlivade C-bibliotek med publika headers, exportmakron och många interna översättningsenheter.
  • > Agentstödda granskningar där frågan är: "vem anropar det här, och via vilka headers?"

Agentarbetsflöden

  • > Hitta alla som anropar en funktion innan dess signatur eller felhantering ändras.
  • > Kartlägga vilka filer som inkluderar en header och vilka structs de använder.
  • > Spåra en förfrågan från en avbrottshanterare eller ingångspunkt genom de funktioner den når.

Motordetaljer

  • > C-stödet täcker `.c` och `.h`. Funktionsdefinitioner är symboler, structs och unions är typdefinitioner, och `#include` blir en importrelation.
  • > Export-, synlighets- och trådsäkerhetsmakron maskeras före parsning, så att omslutna deklarationer parsas. Kroppar i funktionsliknande makron parsas; kroppar i objektliknande gör det inte.
  • > Omkring 124 anrop i standardbiblioteket som `printf`, `malloc` och `memcpy` filtreras bort. Relationer för arv, överskrivning och undantag är markerade som ej tillämpliga.

Användbara MCP-ingångar

  • find_symbol

    Använd det för ett funktions- eller structnamn när du behöver definitionen och varje referens.

  • dependency_search

    Använd incoming-traversering på en delad funktion innan dess signatur eller felhantering ändras.

  • get_task_context

    Använd det för prompter som "förklara hur ett paket går från mottagningsavbrottet till protokollparsern".