src/Scripting/NasalSys.cxx: Optionally prefix all Nasal output with Nasal file:line.
Depends on /sim/nasal-log-file-line. E.g. enable with: --prop:/sim/nasal-log-file-line=1.
This commit is contained in:
parent
9e610af55d
commit
b35bf51fa0
1 changed files with 38 additions and 1 deletions
|
@ -503,11 +503,28 @@ static naRef f_setprop(naContext c, naRef me, int argc, naRef* args)
|
||||||
return naNum(result);
|
return naNum(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct SimNasalLogFileLine : SGPropertyChangeListener
|
||||||
|
{
|
||||||
|
SimNasalLogFileLine() {
|
||||||
|
SGPropertyNode* node = fgGetNode("/sim/nasal-log-file-line", true /*create*/);
|
||||||
|
node->addChangeListener(this, true /*initial*/);
|
||||||
|
}
|
||||||
|
virtual void valueChanged(SGPropertyNode* node) {
|
||||||
|
_file_line = node->getIntValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool _file_line;
|
||||||
|
};
|
||||||
|
|
||||||
|
bool SimNasalLogFileLine::_file_line = false;
|
||||||
|
|
||||||
// print() extension function. Concatenates and prints its arguments
|
// print() extension function. Concatenates and prints its arguments
|
||||||
// to the FlightGear log. Uses the highest log level (SG_ALERT), to
|
// to the FlightGear log. Uses the highest log level (SG_ALERT), to
|
||||||
// make sure it appears. Is there better way to do this?
|
// make sure it appears. Is there better way to do this?
|
||||||
static naRef f_print(naContext c, naRef me, int argc, naRef* args)
|
static naRef f_print(naContext c, naRef me, int argc, naRef* args)
|
||||||
{
|
{
|
||||||
|
static SimNasalLogFileLine snlfl;
|
||||||
string buf;
|
string buf;
|
||||||
int n = argc;
|
int n = argc;
|
||||||
for(int i=0; i<n; i++) {
|
for(int i=0; i<n; i++) {
|
||||||
|
@ -515,7 +532,27 @@ static naRef f_print(naContext c, naRef me, int argc, naRef* args)
|
||||||
if(naIsNil(s)) continue;
|
if(naIsNil(s)) continue;
|
||||||
buf += naStr_data(s);
|
buf += naStr_data(s);
|
||||||
}
|
}
|
||||||
SG_LOG(SG_NASAL, SG_ALERT, buf);
|
if (snlfl._file_line) {
|
||||||
|
/* Copy what SG_LOG() does, but use nasal file:line instead of
|
||||||
|
our own __FILE__ and __LINE__. */
|
||||||
|
if (sglog().would_log(SG_NASAL, SG_ALERT)) {
|
||||||
|
int frame = 0;
|
||||||
|
const char* file = naStr_data(naGetSourceFile(c, 0));
|
||||||
|
if (simgear::strutils::ends_with( file, "/globals.nas")) {
|
||||||
|
/* This generally means have been called by globals.nas's
|
||||||
|
printf function; go one step up the stack so we give the
|
||||||
|
file:line of the caller of printf, which is generally more
|
||||||
|
useful. */
|
||||||
|
frame += 1;
|
||||||
|
file = naStr_data(naGetSourceFile(c, frame));
|
||||||
|
}
|
||||||
|
int line = naGetLine(c, frame);
|
||||||
|
sglog().log(SG_NASAL, SG_ALERT, file, line, buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
SG_LOG(SG_NASAL, SG_ALERT, buf);
|
||||||
|
}
|
||||||
return naNum(buf.length());
|
return naNum(buf.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue