Mercurial > projects > ldc
annotate gen/logger.cpp @ 1592:91af6d05338c
Fix codegen for foreach with ref value being lowered to for.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Sat, 07 Nov 2009 13:51:05 +0100 |
parents | 2292878925f4 |
children | 40bd4a0d4870 |
rev | line source |
---|---|
1 | 1 #include <cassert> |
2 #include <cstdarg> | |
3 #include <cstdio> | |
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 | 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 | 8 |
132 | 9 #include "mars.h" |
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" |
2292878925f4
Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents:
1124
diff
changeset
|
15 #include "llvm/Support/raw_ostream.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
|
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) |
2292878925f4
Add an `llvm::OStream` workalike class for use with `Logger::cout()`, with the
Frits van Bommel <fvbommel wxs.nl>
parents:
1124
diff
changeset
|
30 if (llvm::isa<llvm::Constant>(V) && !llvm::isa<llvm::GlobalValue>(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
|
31 llvm::WriteAsOperand(OS, &V, true, 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
|
32 else |
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 OS << 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
|
34 } |
1 | 35 |
36 namespace Logger | |
37 { | |
38 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
|
39 |
986
a8cb25d478c4
Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents:
794
diff
changeset
|
40 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
|
41 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
|
42 llvm::cl::ZeroOrMore); |
a8cb25d478c4
Use LLVM-style command line (instead of DMD-style)
Frits van Bommel <fvbommel wxs.nl>
parents:
794
diff
changeset
|
43 |
1 | 44 void indent() |
45 { | |
131 | 46 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
|
47 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
|
48 } |
1 | 49 } |
50 void undent() | |
51 { | |
131 | 52 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
|
53 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
|
54 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
|
55 } |
1 | 56 } |
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
|
57 Stream cout() |
1 | 58 { |
131 | 59 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
|
60 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
|
61 else |
994
18ad5601dff7
Use LLVM OStream wrapper instead of <iostream> in the logger.
Frits van Bommel <fvbommel wxs.nl>
parents:
986
diff
changeset
|
62 return 0; |
1 | 63 } |
64 void println(const char* fmt,...) | |
65 { | |
131 | 66 if (_enabled) { |
794
661384d6a936
Fix warnings on x86-64. By fvbommel.
Christian Kamm <kamm incasoftware de>
parents:
246
diff
changeset
|
67 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
|
68 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
|
69 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
|
70 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
|
71 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
|
72 printf("\n"); |
27b2f40bdb58
[svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents:
4
diff
changeset
|
73 } |
1 | 74 } |
75 void print(const char* fmt,...) | |
76 { | |
131 | 77 if (_enabled) { |
794
661384d6a936
Fix warnings on x86-64. By fvbommel.
Christian Kamm <kamm incasoftware de>
parents:
246
diff
changeset
|
78 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
|
79 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
|
80 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
|
81 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
|
82 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
|
83 } |
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 void enable() |
27b2f40bdb58
[svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents:
4
diff
changeset
|
86 { |
131 | 87 _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
|
88 } |
27b2f40bdb58
[svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents:
4
diff
changeset
|
89 void disable() |
27b2f40bdb58
[svn r42] Disabled the extensive logging by default. Use the -vv flag to get it back.
lindquist
parents:
4
diff
changeset
|
90 { |
131 | 91 _enabled = false; |
92 } | |
93 bool enabled() | |
94 { | |
95 return _enabled; | |
1 | 96 } |
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
|
97 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
|
98 { |
61615fa85940
[svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents:
86
diff
changeset
|
99 va_list va; |
61615fa85940
[svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents:
86
diff
changeset
|
100 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
|
101 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
|
102 va_end(va); |
61615fa85940
[svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents:
86
diff
changeset
|
103 } |
1 | 104 } |