Mercurial > projects > dang
annotate misc/Error.d @ 29:41d23f2762c3 new_gen
Merge, and updated Error class
Usage is something like:
---
auto e = new Error("No conversion between %0 and %1);
e.arg(t1).arg(t2);
e.loc(exp.location);
---
Multiple locations can be given, to do clang like errors in the future
author | Anders Halager <halager@gmail.com> |
---|---|
date | Sun, 20 Apr 2008 11:47:34 +0200 |
parents | 2d28b21faad6 |
children | 084c2c147c4f |
rev | line source |
---|---|
1 | 1 module misc.Error; |
2 | |
29
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
3 import tango.core.Exception, |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
4 tango.text.Util : layout; |
1 | 5 |
29
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
6 import llvm.type; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
7 |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
8 import misc.Location, |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
9 sema.Symbol; |
6 | 10 |
11 class Error : Exception | |
1 | 12 { |
29
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
13 |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
14 this(char[] message) |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
15 { |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
16 super(message); |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
17 args ~= message; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
18 } |
6 | 19 |
29
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
20 char[] toString() |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
21 { |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
22 char[256] tmp = void; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
23 char[] msg = layout(tmp, args); |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
24 if (locs.length > 0) |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
25 msg = locs[0].toString ~ ": " ~ msg; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
26 else |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
27 msg = msg.dup; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
28 return msg; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
29 } |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
30 |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
31 Error arg(char[] s) |
6 | 32 { |
29
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
33 if (args.length == 11) |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
34 throw new Exception("Sorry, errors only support up to 10 args"); |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
35 args ~= s; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
36 return this; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
37 } |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
38 |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
39 Error arg(char c) |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
40 { |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
41 return arg([c]); |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
42 } |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
43 |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
44 Error arg(DType type) |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
45 { |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
46 return arg(type.name()); |
6 | 47 } |
29
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
48 |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
49 Error arg(Symbol sym) |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
50 { |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
51 return arg(sym.type.name ~ " " ~ sym.id.get); |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
52 } |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
53 |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
54 Error loc(Location loc) |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
55 { |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
56 locs ~= loc; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
57 return this; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
58 } |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
59 |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
60 private: |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
61 char[][] args; |
41d23f2762c3
Merge, and updated Error class
Anders Halager <halager@gmail.com>
parents:
24
diff
changeset
|
62 Location[] locs; |
1 | 63 } |