48
48
// I hope there is a first arg ...
49
49
Location ManipError::location () {
50
if (faulty ()->args ().length ())
50
if (faulty () && faulty ()->args ().length ())
51
51
if (faulty ()->args ()[0])
52
52
return faulty ()->args ()[0]->location ();
60
60
void ManipError::print (ostream &os) const {
61
61
switch (errorno ()) {
63
os << "fatal error: Can't do `" << faulty ()->op ()
63
os << "fatal error: Can't do `" << (faulty () ? faulty ()->op () : "<unknown>")
64
64
<< "' manipulation"; break;
66
os << "error: Can't `" << faulty ()->op ()
66
os << "error: Can't `" << (faulty () ? faulty ()->op () : "<unknown>")
67
67
<< "' if start/end token is macro generated"; break;
69
69
os << "error: Bad argument(s) for the `"
70
<< faulty ()->op () << "' manipulator"; break;
70
<< (faulty () ? faulty ()->op () : "<unknown>")
71
<< "' manipulator"; break;
72
73
os << "error: Unbalanced preprocessor directive(s) "
73
<< "found. Can't do `" << faulty ()->op ()
74
<< "found. Can't do `" << (faulty () ? faulty ()->op () : "<unknown>")
74
75
<< "' manipulation"; break;
78
for (int a = 0; a < faulty ()->args ().length (); a++) {
79
Token *tok = faulty ()->args ().get (a);
81
if (a > 0) os << ", ";
82
Unit *unit = (Unit*)tok->belonging_to ();
83
if (unit->isMacroExp ()) {
84
MacroUnit *munit = (MacroUnit*)unit;
85
tok = munit->ExpansionBegin ((Token*)munit->first ());
80
for (int a = 0; a < faulty ()->args ().length (); a++) {
81
Token *tok = faulty ()->args ().get (a);
83
if (a > 0) os << ", ";
84
Unit *unit = (Unit*)tok->belonging_to ();
85
if (unit->isMacroExp ()) {
86
MacroUnit *munit = (MacroUnit*)unit;
87
tok = munit->ExpansionBegin ((Token*)munit->first ());
90
os << tok->location ();
88
os << tok->location ();