xref: /Universal-ctags/main/trace.c (revision fb6a19e76ca9b7363e7ea7ee19d4013a802ed044)
1d33423e3SSzymon Tomasz Stefanek /*
2d33423e3SSzymon Tomasz Stefanek *   Copyright (c) 2016, Szymon Tomasz Stefanek
3d33423e3SSzymon Tomasz Stefanek *
4d33423e3SSzymon Tomasz Stefanek *   This source code is released for free distribution under the terms of the
5d33423e3SSzymon Tomasz Stefanek *   GNU General Public License version 2 or (at your option) any later version.
6d33423e3SSzymon Tomasz Stefanek *
7d33423e3SSzymon Tomasz Stefanek *   Tracing facility.
8d33423e3SSzymon Tomasz Stefanek */
9d33423e3SSzymon Tomasz Stefanek 
10edfd5352SMasatake YAMATO #include "general.h"
11d33423e3SSzymon Tomasz Stefanek #include "trace.h"
12d33423e3SSzymon Tomasz Stefanek 
13d33423e3SSzymon Tomasz Stefanek #ifdef DO_TRACING
14d33423e3SSzymon Tomasz Stefanek 
15782707aeSMasatake YAMATO #include "options.h"
16d33423e3SSzymon Tomasz Stefanek #include "read.h"
17d33423e3SSzymon Tomasz Stefanek 
18d33423e3SSzymon Tomasz Stefanek #include <stdio.h>
19d33423e3SSzymon Tomasz Stefanek #include <stdarg.h>
20d33423e3SSzymon Tomasz Stefanek 
traceEnter(const char * szFunction,const char * szFormat,...)21d33423e3SSzymon Tomasz Stefanek void traceEnter(const char * szFunction,const char * szFormat,...)
22d33423e3SSzymon Tomasz Stefanek {
23782707aeSMasatake YAMATO 	if (!isTraced())
24782707aeSMasatake YAMATO 		return;
25782707aeSMasatake YAMATO 
2664f5cf22SMasatake YAMATO 	debugIndent ();
27d33423e3SSzymon Tomasz Stefanek 
28d33423e3SSzymon Tomasz Stefanek 	fprintf(stderr,"[>> %s][at %lu] ",szFunction,getInputLineNumber());
29d33423e3SSzymon Tomasz Stefanek 
30d33423e3SSzymon Tomasz Stefanek 	va_list va;
31d33423e3SSzymon Tomasz Stefanek 	va_start(va,szFormat);
32d33423e3SSzymon Tomasz Stefanek 	vfprintf(stderr,szFormat,va);
33d33423e3SSzymon Tomasz Stefanek 	va_end(va);
34d33423e3SSzymon Tomasz Stefanek 
35d33423e3SSzymon Tomasz Stefanek 	fprintf(stderr,"\n");
36d33423e3SSzymon Tomasz Stefanek 
3764f5cf22SMasatake YAMATO 	debugInc();
38d33423e3SSzymon Tomasz Stefanek }
39d33423e3SSzymon Tomasz Stefanek 
traceLeave(const char * szFunction,const char * szFormat,...)40d33423e3SSzymon Tomasz Stefanek void traceLeave(const char * szFunction,const char * szFormat,...)
41d33423e3SSzymon Tomasz Stefanek {
42782707aeSMasatake YAMATO 	if (!isTraced())
43782707aeSMasatake YAMATO 		return;
44782707aeSMasatake YAMATO 
4564f5cf22SMasatake YAMATO 	debugDec();
4664f5cf22SMasatake YAMATO 	debugIndent ();
47d33423e3SSzymon Tomasz Stefanek 
48d33423e3SSzymon Tomasz Stefanek 	fprintf(stderr,"[<< %s][at %lu] ",szFunction,getInputLineNumber());
49d33423e3SSzymon Tomasz Stefanek 
50d33423e3SSzymon Tomasz Stefanek 	va_list va;
51d33423e3SSzymon Tomasz Stefanek 	va_start(va,szFormat);
52d33423e3SSzymon Tomasz Stefanek 	vfprintf(stderr,szFormat,va);
53d33423e3SSzymon Tomasz Stefanek 	va_end(va);
54d33423e3SSzymon Tomasz Stefanek 
55d33423e3SSzymon Tomasz Stefanek 	fprintf(stderr,"\n");
56d33423e3SSzymon Tomasz Stefanek }
57d33423e3SSzymon Tomasz Stefanek 
tracePrintFmtVa(const char * szFormat,va_list va)5849c14f67SMasatake YAMATO static void tracePrintFmtVa(const char * szFormat, va_list va)
5949c14f67SMasatake YAMATO {
60f85c74beSMasatake YAMATO 	if (!isTraced())
61f85c74beSMasatake YAMATO 		return;
62f85c74beSMasatake YAMATO 
6349c14f67SMasatake YAMATO 	vfprintf(stderr,szFormat,va);
6449c14f67SMasatake YAMATO }
6549c14f67SMasatake YAMATO 
tracePrint(const char * szFunction,const char * szFormat,...)66d33423e3SSzymon Tomasz Stefanek void tracePrint(const char * szFunction, const char * szFormat,...)
67d33423e3SSzymon Tomasz Stefanek {
68782707aeSMasatake YAMATO 	if (!isTraced())
69782707aeSMasatake YAMATO 		return;
70782707aeSMasatake YAMATO 
717363bbc6SMasatake YAMATO 	tracePrintPrefix(szFunction);
7249c14f67SMasatake YAMATO 
7349c14f67SMasatake YAMATO 	va_list va;
7449c14f67SMasatake YAMATO 	va_start(va,szFormat);
7549c14f67SMasatake YAMATO 	tracePrintFmtVa (szFormat,va);
7649c14f67SMasatake YAMATO 	va_end(va);
7749c14f67SMasatake YAMATO 
7849c14f67SMasatake YAMATO 	tracePrintNewline();
7949c14f67SMasatake YAMATO }
8049c14f67SMasatake YAMATO 
tracePrintFmt(const char * szFormat,...)8149c14f67SMasatake YAMATO void tracePrintFmt(const char * szFormat,...)
8249c14f67SMasatake YAMATO {
8349c14f67SMasatake YAMATO 	va_list va;
8449c14f67SMasatake YAMATO 	va_start(va,szFormat);
8549c14f67SMasatake YAMATO 	tracePrintFmtVa (szFormat,va);
8649c14f67SMasatake YAMATO 	va_end(va);
8749c14f67SMasatake YAMATO }
8849c14f67SMasatake YAMATO 
tracePrintPrefix(const char * szFunction)8949c14f67SMasatake YAMATO void tracePrintPrefix(const char * szFunction)
9049c14f67SMasatake YAMATO {
9149c14f67SMasatake YAMATO 	if (!isTraced())
9249c14f67SMasatake YAMATO 		return;
9349c14f67SMasatake YAMATO 
9464f5cf22SMasatake YAMATO 	debugIndent();
95d33423e3SSzymon Tomasz Stefanek 
96d33423e3SSzymon Tomasz Stefanek 	fprintf(stderr,"[%s][at %lu] ",szFunction,getInputLineNumber());
9749c14f67SMasatake YAMATO }
98d33423e3SSzymon Tomasz Stefanek 
tracePrintNewline(void)9949c14f67SMasatake YAMATO void tracePrintNewline(void)
10049c14f67SMasatake YAMATO {
10149c14f67SMasatake YAMATO 	if (!isTraced())
10249c14f67SMasatake YAMATO 		return;
103d33423e3SSzymon Tomasz Stefanek 
104d33423e3SSzymon Tomasz Stefanek 	fprintf(stderr,"\n");
105d33423e3SSzymon Tomasz Stefanek }
106d33423e3SSzymon Tomasz Stefanek 
107782707aeSMasatake YAMATO static bool tracingMain;
108782707aeSMasatake YAMATO 
traceMain(void)109782707aeSMasatake YAMATO void traceMain(void)
110782707aeSMasatake YAMATO {
111782707aeSMasatake YAMATO 	verbose("Tracing main part\n");
112782707aeSMasatake YAMATO 	tracingMain = true;
113782707aeSMasatake YAMATO }
114782707aeSMasatake YAMATO 
isMainTraced(void)115782707aeSMasatake YAMATO bool isMainTraced(void)
116782707aeSMasatake YAMATO {
117782707aeSMasatake YAMATO 	return tracingMain;
118782707aeSMasatake YAMATO }
119782707aeSMasatake YAMATO 
120*fb6a19e7SMasatake YAMATO #else
isTraced(void)121*fb6a19e7SMasatake YAMATO bool isTraced (void) { return false; }
traceLanguage(langType language)122*fb6a19e7SMasatake YAMATO void traceLanguage (langType language) {}
isLanguageTraced(langType language)123*fb6a19e7SMasatake YAMATO bool isLanguageTraced (langType language) { return false; }
124*fb6a19e7SMasatake YAMATO 
traceEnter(const char * szFunction,const char * szFormat,...)125*fb6a19e7SMasatake YAMATO void traceEnter(const char * szFunction,const char * szFormat,...) {}
traceLeave(const char * szFunction,const char * szFormat,...)126*fb6a19e7SMasatake YAMATO void traceLeave(const char * szFunction,const char * szFormat,...) {}
tracePrint(const char * szFunction,const char * szFormat,...)127*fb6a19e7SMasatake YAMATO void tracePrint(const char * szFunction,const char * szFormat,...) {}
128*fb6a19e7SMasatake YAMATO 
tracePrintPrefix(const char * szFunction)129*fb6a19e7SMasatake YAMATO void tracePrintPrefix(const char * szFunction) {}
tracePrintFmt(const char * szFormat,...)130*fb6a19e7SMasatake YAMATO void tracePrintFmt(const char * szFormat,...) {}
tracePrintNewline(void)131*fb6a19e7SMasatake YAMATO void tracePrintNewline(void) {}
132*fb6a19e7SMasatake YAMATO 
133*fb6a19e7SMasatake YAMATO void traceMain(void);
isMainTraced(void)134*fb6a19e7SMasatake YAMATO bool isMainTraced(void) { return false; }
135*fb6a19e7SMasatake YAMATO 
136d33423e3SSzymon Tomasz Stefanek #endif // DO_TRACING
137