1 /// Author: Aziz Köksal 2 /// License: GPL3 3 /// $(Maturity average) 4 module dil.Diagnostics; 5 6 import dil.i18n.ResourceBundle, 7 dil.i18n.Messages; 8 import common; 9 10 public import dil.Information; 11 12 /// Collects diagnostic information about the compilation process. 13 class Diagnostics 14 { 15 Information[] info; /// List of info objects. 16 ResourceBundle bundle; /// Used to retrieve messages. 17 Layout!(char) format; /// Used to format messages. 18 19 this() 20 { 21 this.bundle = new ResourceBundle(); 22 this.format = new Layout!(char)(); 23 } 24 25 /// Returns true if there are info objects. 26 bool hasInfo() 27 { 28 return info.length != 0; 29 } 30 31 /// Appends an info object. 32 void opCatAssign(Information info) 33 { 34 this.info ~= info; 35 } 36 37 /// Appends info objects. 38 void opCatAssign(Information[] info) 39 { 40 this.info ~= info; 41 } 42 43 /// Returns a msg from the resource bundle. 44 cstring msg(MID mid) 45 { 46 return bundle.msg(mid); 47 } 48 49 /// Returns a formatted msg. 50 char[] formatMsg(MID mid, ...) 51 { 52 return formatMsg(mid, _arguments, _argptr); 53 } 54 55 /// ditto 56 char[] formatMsg(MID mid, TypeInfo[] _arguments, va_list _argptr) 57 { 58 auto m = msg(mid); 59 return _arguments.length ? format(_arguments, _argptr, m) : m.dup; 60 } 61 }