annotate gen/logger.cpp @ 1651:cb960b882ca3 default tip

bindings were moved to dsource.org/projects/bindings/
author Moritz Warning <moritzwarning@web.de>
date Thu, 20 May 2010 20:05:03 +0200
parents 40bd4a0d4870
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
1 #include <cassert>
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
2 #include <cstdarg>
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
3 #include <cstdio>
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
4 #include <cstdlib>
38
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
5 #include <fstream>
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
6 #include <string>
1502
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
7 #include <iostream>
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
8
132
1700239cab2e [svn r136] MAJOR UNSTABLE UPDATE!!!
lindquist
parents: 131
diff changeset
9 #include "mars.h"
1700239cab2e [svn r136] MAJOR UNSTABLE UPDATE!!!
lindquist
parents: 131
diff changeset
10
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 794
diff changeset
11 #include "llvm/Support/CommandLine.h"
1502
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
12
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
13 #include "llvm/GlobalValue.h"
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
14 #include "llvm/Support/Casting.h"
1650
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1502
diff changeset
15 #include "llvm/Support/raw_os_ostream.h"
1502
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
16 #include "llvm/Assembly/Writer.h"
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
17
4
e116aa1488e6 [svn r8] changed backend includes to always use the gen/<foo>.h prefix
lindquist
parents: 1
diff changeset
18 #include "gen/logger.h"
1502
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
19 #include "gen/irstate.h"
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
20
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
21 void Stream::writeType(std::ostream& OS, const llvm::Type& Ty) {
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
22 llvm::raw_os_ostream raw(OS);
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
23 llvm::WriteTypeSymbolic(raw, &Ty, gIR->module);
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
24 }
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
25
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
26 void Stream::writeValue(std::ostream& OS, const llvm::Value& V) {
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
27 // Constants don't always get their types pretty-printed.
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
28 // (Only treat non-global constants like this, so that e.g. global variables
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
29 // still get their initializers printed)
1650
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1502
diff changeset
30 llvm::raw_os_ostream raw(OS);
1502
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
31 if (llvm::isa<llvm::Constant>(V) && !llvm::isa<llvm::GlobalValue>(V))
1650
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1502
diff changeset
32 llvm::WriteAsOperand(raw, &V, true, gIR->module);
1502
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
33 else
1650
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1502
diff changeset
34 V.print(raw);
1502
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
35 }
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
36
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
37 namespace Logger
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
38 {
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
39 static std::string indent_str;
38
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
40
986
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 794
diff changeset
41 llvm::cl::opt<bool> _enabled("vv",
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 794
diff changeset
42 llvm::cl::desc("Very verbose"),
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 794
diff changeset
43 llvm::cl::ZeroOrMore);
a8cb25d478c4 Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents: 794
diff changeset
44
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
45 void indent()
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
46 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
47 if (_enabled) {
102
027b8d8b71ec [svn r106] Turns out the last commit wasn't enough, now the D->LLVM process is even more split up.
lindquist
parents: 94
diff changeset
48 indent_str += "* ";
027b8d8b71ec [svn r106] Turns out the last commit wasn't enough, now the D->LLVM process is even more split up.
lindquist
parents: 94
diff changeset
49 }
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
50 }
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
51 void undent()
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
52 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
53 if (_enabled) {
38
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
54 assert(!indent_str.empty());
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
55 indent_str.resize(indent_str.size()-2);
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
56 }
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
57 }
1502
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
58 Stream cout()
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
59 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
60 if (_enabled)
1502
2292878925f4 Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents: 1124
diff changeset
61 return std::cout << indent_str;
38
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
62 else
994
18ad5601dff7 Use LLVM OStream wrapper instead of <iostream> in the logger.
Frits van Bommel <fvbommel wxs.nl>
parents: 986
diff changeset
63 return 0;
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
64 }
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
65 void println(const char* fmt,...)
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
66 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
67 if (_enabled) {
794
661384d6a936 Fix warnings on x86-64. By fvbommel.
Christian Kamm <kamm incasoftware de>
parents: 246
diff changeset
68 printf("%s", indent_str.c_str());
38
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
69 va_list va;
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
70 va_start(va,fmt);
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
71 vprintf(fmt,va);
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
72 va_end(va);
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
73 printf("\n");
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
74 }
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
75 }
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
76 void print(const char* fmt,...)
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
77 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
78 if (_enabled) {
794
661384d6a936 Fix warnings on x86-64. By fvbommel.
Christian Kamm <kamm incasoftware de>
parents: 246
diff changeset
79 printf("%s", indent_str.c_str());
38
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
80 va_list va;
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
81 va_start(va,fmt);
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
82 vprintf(fmt,va);
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
83 va_end(va);
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
84 }
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
85 }
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
86 void enable()
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
87 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
88 _enabled = true;
38
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
89 }
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
90 void disable()
27b2f40bdb58 [svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents: 4
diff changeset
91 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
92 _enabled = false;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
93 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
94 bool enabled()
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
95 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 102
diff changeset
96 return _enabled;
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
97 }
1124
e7f0c2b48047 Fix a bug where ::warning() was called with a va_list argument instead of an
Frits van Bommel <fvbommel wxs.nl>
parents: 994
diff changeset
98 void attention(Loc loc, const char* fmt,...)
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 86
diff changeset
99 {
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 86
diff changeset
100 va_list va;
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 86
diff changeset
101 va_start(va,fmt);
1124
e7f0c2b48047 Fix a bug where ::warning() was called with a va_list argument instead of an
Frits van Bommel <fvbommel wxs.nl>
parents: 994
diff changeset
102 vwarning(loc,fmt,va);
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 86
diff changeset
103 va_end(va);
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 86
diff changeset
104 }
1
c53b6e3fe49a [svn r5] Initial commit. Most things are very rough.
lindquist
parents:
diff changeset
105 }