62 lines
2.0 KiB
C++
62 lines
2.0 KiB
C++
bool OnDeclParsed_AddInstrumentation(bool discard, LC_AST *n) {
|
|
if (discard) return discard;
|
|
|
|
if (n->kind == LC_ASTKind_DeclProc && n->dproc.body) {
|
|
if (n->dbase.name == LC_ILit("BeginProc")) return false;
|
|
if (n->dbase.name == LC_ILit("EndProc")) return false;
|
|
|
|
LC_AST *body = n->dproc.body;
|
|
|
|
LC_AST *begin = LC_ParseStmtf("BeginProc(\"%s\", \"%s\", %d)", n->dbase.name, n->pos->lex->file, n->pos->line);
|
|
LC_AST *end = LC_ParseStmtf("defer EndProc();");
|
|
|
|
LC_DLLAddFront(body->sblock.first, body->sblock.last, end);
|
|
LC_DLLAddFront(body->sblock.first, body->sblock.last, begin);
|
|
}
|
|
return discard;
|
|
}
|
|
|
|
bool add_instrumentation() {
|
|
LC_Lang *lang = LC_LangAlloc();
|
|
lang->use_colored_terminal_output = UseColoredIO;
|
|
lang->breakpoint_on_error = BreakpointOnError;
|
|
lang->on_decl_parsed = OnDeclParsed_AddInstrumentation;
|
|
LC_LangBegin(lang);
|
|
|
|
LC_RegisterPackageDir("../pkgs");
|
|
LC_RegisterPackageDir("../examples");
|
|
|
|
LC_Intern name = LC_ILit("add_instrumentation");
|
|
LC_ASTRefList packages = LC_ResolvePackageByName(name);
|
|
if (L->errors) {
|
|
LC_LangEnd(lang);
|
|
return false;
|
|
}
|
|
|
|
DebugVerifyAST(packages);
|
|
if (L->errors) {
|
|
LC_LangEnd(lang);
|
|
return false;
|
|
}
|
|
|
|
S8_String code = LC_GenerateUnityBuild(packages);
|
|
S8_String path = "examples/add_instrumentation/add_instrumentation.c";
|
|
OS_MakeDir("examples");
|
|
OS_MakeDir("examples/add_instrumentation");
|
|
OS_WriteFile(path, code);
|
|
if (!UseCL) {
|
|
LC_LangEnd(lang);
|
|
return true;
|
|
}
|
|
|
|
S8_String cmd = Fmt("cl %.*s -Zi -std:c11 -nologo -FC -Fd:examples/add_instrumentation/a.pdb -Fe:examples/add_instrumentation/add_instrumentation.exe %.*s", S8_Expand(path), S8_Expand(RaylibLIB));
|
|
int errcode = Run(cmd);
|
|
if (errcode != 0) {
|
|
LC_LangEnd(lang);
|
|
return false;
|
|
}
|
|
// Run("examples/add_instrumentation/add_instrumentation.exe");
|
|
|
|
LC_LangEnd(lang);
|
|
return true;
|
|
} |