Howto:Disable Nasal entirely: Difference between revisions
Jump to navigation
Jump to search
(→Patch) |
m (→Patch: untested for now ...) |
||
Line 18: | Line 18: | ||
}} | }} | ||
<syntaxhighlight lang="diff"> | <syntaxhighlight lang="diff">diff --git a/src/AIModel/AIManager.cxx b/src/AIModel/AIManager.cxx | ||
index 4faf23e..e09db60 100644 | |||
--- a/src/AIModel/AIManager.cxx | |||
+++ b/src/AIModel/AIManager.cxx | |||
@@ -72,6 +72,10 @@ public: | |||
std::string loadScript = nasalScripts->getStringValue("load"); | |||
if (!loadScript.empty()) { | |||
FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal"); | |||
+ if(!nasalSys) { | |||
+ NASAL_DISABLED("AI scenarios"); | |||
+ return; | |||
+ } | |||
std::string moduleName = "scenario_" + _internalName; | |||
nasalSys->createModule(moduleName.c_str(), moduleName.c_str(), | |||
loadScript.c_str(), loadScript.size(), | |||
@@ -86,8 +90,10 @@ public: | |||
} | |||
FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal"); | |||
- if (!nasalSys) | |||
- return; | |||
+ if(!nasalSys) { | |||
+ NASAL_DISABLED("AI scenarios"); | |||
+ return; | |||
+ } | |||
std::string moduleName = "scenario_" + _internalName; | |||
if (!_unloadScript.empty()) { | |||
diff --git a/src/GUI/CanvasWidget.cxx b/src/GUI/CanvasWidget.cxx | |||
index f68fe22..52ed2f4 100644 | |||
--- a/src/GUI/CanvasWidget.cxx | |||
+++ b/src/GUI/CanvasWidget.cxx | |||
@@ -72,10 +72,13 @@ CanvasWidget::CanvasWidget( int x, int y, | |||
return; | |||
FGNasalSys *nas = dynamic_cast<FGNasalSys*>(globals->get_subsystem("nasal")); | |||
- if( !nas ) | |||
+ if( !nas ) { | |||
SG_LOG( SG_GENERAL, | |||
SG_ALERT, | |||
"CanvasWidget: Failed to get nasal subsystem!" ); | |||
+ NASAL_DISABLED("PUI CanvasWidget"); | |||
+ return; | |||
+ } | |||
const std::string file = std::string("__canvas:") | |||
+ cprops->getStringValue("name"); | |||
diff --git a/src/GUI/FGPUIDialog.cxx b/src/GUI/FGPUIDialog.cxx | |||
index 30cbef7..f66f40e 100644 | |||
--- a/src/GUI/FGPUIDialog.cxx | |||
+++ b/src/GUI/FGPUIDialog.cxx | |||
@@ -672,7 +672,9 @@ FGPUIDialog::FGPUIDialog (SGPropertyNode *props) : | |||
FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal"); | |||
if (nas) | |||
nas->createModule(_module.c_str(), _module.c_str(), s, strlen(s), props); | |||
+ else NASAL_DISABLED("Nasal embedded in PUI dialogs"); | |||
} | |||
+ | |||
} | |||
display(props); | |||
} | |||
@@ -1056,7 +1058,11 @@ FGPUIDialog::makeObject (SGPropertyNode *props, int parentWidth, int parentHeigh | |||
} | |||
} else { | |||
FGNasalSys* nasal = (FGNasalSys*) globals->get_subsystem("nasal"); | |||
+ if(nasal) | |||
obj->setBuffer(nasal->log()); | |||
+ else { | |||
+ NASAL_DISABLED("PUI"); | |||
+ } | |||
} | |||
setupObject(obj, props); | |||
diff --git a/src/GUI/FileDialog.cxx b/src/GUI/FileDialog.cxx | |||
index 2047898..d71d910 100644 | |||
--- a/src/GUI/FileDialog.cxx | |||
+++ b/src/GUI/FileDialog.cxx | |||
@@ -100,6 +100,10 @@ public: | |||
object(obj) | |||
{ | |||
FGNasalSys* sys = static_cast<FGNasalSys*>(globals->get_subsystem("nasal")); | |||
+ if(!sys) { | |||
+ NASAL_DISABLED("FileDialog"); | |||
+ return; | |||
+ } | |||
_gcKeys[0] = sys->gcSave(f); | |||
_gcKeys[1] = sys->gcSave(obj); | |||
} | |||
@@ -107,7 +111,10 @@ public: | |||
virtual void onFileDialogDone(FGFileDialog* instance, const SGPath& aPath) | |||
{ | |||
FGNasalSys* sys = static_cast<FGNasalSys*>(globals->get_subsystem("nasal")); | |||
- | |||
+ if(!sys) { | |||
+ NASAL_DISABLED("FileDialog (done)"); | |||
+ return; | |||
+ } | |||
naContext ctx = naNewContext(); | |||
naRef args[1]; | |||
args[0] = nasal::to_nasal(ctx, aPath); | |||
@@ -119,6 +126,10 @@ public: | |||
~NasalCallback() | |||
{ | |||
FGNasalSys* sys = static_cast<FGNasalSys*>(globals->get_subsystem("nasal")); | |||
+ if(!sys) { | |||
+ NASAL_DISABLED("FileDialog"); | |||
+ return; | |||
+ } | |||
sys->gcRelease(_gcKeys[0]); | |||
sys->gcRelease(_gcKeys[1]); | |||
} | |||
diff --git a/src/Input/FGEventInput.cxx b/src/Input/FGEventInput.cxx | |||
index 29bdc6e..7bbab09 100644 | |||
--- a/src/Input/FGEventInput.cxx | |||
+++ b/src/Input/FGEventInput.cxx | |||
@@ -236,6 +236,7 @@ FGInputDevice::~FGInputDevice() | |||
} | |||
nas->deleteModule(nasalModule.c_str()); | |||
} | |||
+ else NASAL_DISABLED("FGInputDevice"); | |||
} | |||
void FGInputDevice::Configure( SGPropertyNode_ptr aDeviceNode ) | |||
@@ -264,7 +265,7 @@ void FGInputDevice::Configure( SGPropertyNode_ptr aDeviceNode ) | |||
FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal"); | |||
if (nas) | |||
nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s.c_str(), s.length(), deviceNode ); | |||
- } | |||
+ } else NASAL_DISABLED("FGInputDevice::Configure"); | |||
} | |||
} | |||
diff --git a/src/Input/FGJoystickInput.cxx b/src/Input/FGJoystickInput.cxx | |||
index 069e9d8..d6d3fd8 100644 | |||
--- a/src/Input/FGJoystickInput.cxx | |||
+++ b/src/Input/FGJoystickInput.cxx | |||
@@ -208,14 +208,16 @@ void FGJoystickInput::postinit() | |||
std::ostringstream str; | |||
str << "__js" << i; | |||
std::string module = str.str(); | |||
+ unsigned int j; | |||
+ if (nasalsys) { | |||
nasalsys->createModule(module.c_str(), module.c_str(), "", 0); | |||
PropertyList nasal = js_node->getChildren("nasal"); | |||
- unsigned int j; | |||
for (j = 0; j < nasal.size(); j++) { | |||
nasal[j]->setStringValue("module", module.c_str()); | |||
nasalsys->handleCommand(nasal[j]); | |||
} | |||
+ } else NASAL_DISABLED("Joystick bindings"); | |||
// | |||
// Initialize the axes. | |||
diff --git a/src/Input/FGKeyboardInput.cxx b/src/Input/FGKeyboardInput.cxx | |||
index 8ff3d0a..004547e 100644 | |||
--- a/src/Input/FGKeyboardInput.cxx | |||
+++ b/src/Input/FGKeyboardInput.cxx | |||
@@ -109,11 +109,13 @@ void FGKeyboardInput::postinit() | |||
} | |||
FGNasalSys *nasalsys = (FGNasalSys *)globals->get_subsystem("nasal"); | |||
+ if(nasalsys) { | |||
PropertyList nasal = key_nodes->getChildren("nasal"); | |||
for (unsigned int j = 0; j < nasal.size(); j++) { | |||
nasal[j]->setStringValue("module", module.c_str()); | |||
nasalsys->handleCommand(nasal[j]); | |||
} | |||
+} else NASAL_DISABLED("Keyboard bindings"); | |||
PropertyList keys = key_nodes->getChildren("key"); | |||
for (unsigned int i = 0; i < keys.size(); i++) { | |||
diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx | |||
index 1e93a0b..e07d4b9 100644 | |||
--- a/src/Main/fg_commands.cxx | |||
+++ b/src/Main/fg_commands.cxx | |||
@@ -185,7 +185,13 @@ do_null (const SGPropertyNode * arg) | |||
static bool | |||
do_nasal (const SGPropertyNode * arg) | |||
{ | |||
- return ((FGNasalSys*)globals->get_subsystem("nasal"))->handleCommand(arg); | |||
+ FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal"); | |||
+ if(!nasalSys) { | |||
+ NASAL_DISABLED("fgcomand nasal (bindings)"); | |||
+ return false; | |||
+ } | |||
+ return nasalSys->handleCommand(arg); | |||
+ | |||
} | |||
/** | |||
diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx | |||
index 61d3425..d8bd11a 100644 | |||
--- a/src/Main/fg_init.cxx | |||
+++ b/src/Main/fg_init.cxx | |||
@@ -904,11 +904,12 @@ void fgPostInitSubsystems() | |||
// Initialize the Nasal interpreter. | |||
// Do this last, so that the loaded scripts see initialized state | |||
//////////////////////////////////////////////////////////////////////// | |||
+if(!fgGetBool("/sim/startup/disable-nasal",false)) { | |||
FGNasalSys* nasal = new FGNasalSys(); | |||
globals->add_subsystem("nasal", nasal, SGSubsystemMgr::INIT); | |||
nasal->init(); | |||
SG_LOG(SG_GENERAL, SG_INFO, "Nasal init took:" << st.elapsedMSec()); | |||
- | |||
+} else NASAL_DISABLED("Initialization"); | |||
// initialize methods that depend on other subsystems. | |||
st.stamp(); | |||
globals->get_subsystem_mgr()->postinit(); | |||
diff --git a/src/Network/ATC-Main.cxx b/src/Network/ATC-Main.cxx | |||
index 6c0da9b..00cd91a 100644 | |||
--- a/src/Network/ATC-Main.cxx | |||
+++ b/src/Network/ATC-Main.cxx | |||
@@ -223,10 +223,12 @@ bool FGATCMain::process() { | |||
// directly provide. | |||
FGNasalSys *n = (FGNasalSys*)globals->get_subsystem("nasal"); | |||
+ if(n) { | |||
bool result = n->parseAndRun( "atcsim.update()" ); | |||
if ( !result ) { | |||
SG_LOG( SG_NETWORK, SG_ALERT, "Nasal: atcsim.update() failed!" ); | |||
} | |||
+ } else NASAL_DISABLED("ATC-Main"); | |||
// process the ATC outputs | |||
if ( output0 != NULL && board0_locked ) { | |||
diff --git a/src/Network/HTTPClient.cxx b/src/Network/HTTPClient.cxx | |||
index e6d2b29..48376ab 100644 | |||
--- a/src/Network/HTTPClient.cxx | |||
+++ b/src/Network/HTTPClient.cxx | |||
@@ -327,6 +327,10 @@ void FGHTTPClient::postinit() | |||
pkg::Root* packageRoot = globals->packageRoot(); | |||
if (packageRoot) { | |||
FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal"); | |||
+ if(!nasalSys) { | |||
+ NASAL_DISABLED("package manager"); | |||
+ return; | |||
+ } | |||
nasal::Hash nasalGlobals = nasalSys->getGlobals(); | |||
nasal::Hash nasalPkg = nasalGlobals.createHash("pkg"); // module | |||
nasalPkg.set("root", packageRoot); | |||
diff --git a/src/Scripting/NasalSys.hxx b/src/Scripting/NasalSys.hxx | |||
index 096a591..af01ff2 100644 | |||
--- a/src/Scripting/NasalSys.hxx | |||
+++ b/src/Scripting/NasalSys.hxx | |||
@@ -30,11 +30,14 @@ namespace simgear { class BufferedLogCallback; } | |||
SGPropertyNode* ghostToPropNode(naRef ref); | |||
+#define NASAL_DISABLED(feature) SG_LOG(SG_NASAL, SG_ALERT, "Nasal support disabled:" << feature) | |||
+ | |||
class FGNasalSys : public SGSubsystem | |||
{ | |||
public: | |||
FGNasalSys(); | |||
virtual ~FGNasalSys(); | |||
+ | |||
virtual void init(); | |||
virtual void shutdown(); | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 12:49, 23 February 2016
This article is a stub. You can help the wiki by expanding it. |
Started in | please specify a date |
---|---|
Description | provide a startup mode to disable Nasal scripting entirely for regression testing |
Contributor(s) | Hooray |
Status | unknown |
Motivation
unknown motivation
Objective
disable Nasal scripting
Background
Nasal performance, garbage collection overhead, impact on frame rate and frame spacing
Status
updated/rebased patch
News / Updates
Changelog
Gallery
Roadmap
Related
Patch
Note Add message |
diff --git a/src/AIModel/AIManager.cxx b/src/AIModel/AIManager.cxx
index 4faf23e..e09db60 100644
--- a/src/AIModel/AIManager.cxx
+++ b/src/AIModel/AIManager.cxx
@@ -72,6 +72,10 @@ public:
std::string loadScript = nasalScripts->getStringValue("load");
if (!loadScript.empty()) {
FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal");
+ if(!nasalSys) {
+ NASAL_DISABLED("AI scenarios");
+ return;
+ }
std::string moduleName = "scenario_" + _internalName;
nasalSys->createModule(moduleName.c_str(), moduleName.c_str(),
loadScript.c_str(), loadScript.size(),
@@ -86,8 +90,10 @@ public:
}
FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal");
- if (!nasalSys)
- return;
+ if(!nasalSys) {
+ NASAL_DISABLED("AI scenarios");
+ return;
+ }
std::string moduleName = "scenario_" + _internalName;
if (!_unloadScript.empty()) {
diff --git a/src/GUI/CanvasWidget.cxx b/src/GUI/CanvasWidget.cxx
index f68fe22..52ed2f4 100644
--- a/src/GUI/CanvasWidget.cxx
+++ b/src/GUI/CanvasWidget.cxx
@@ -72,10 +72,13 @@ CanvasWidget::CanvasWidget( int x, int y,
return;
FGNasalSys *nas = dynamic_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
- if( !nas )
+ if( !nas ) {
SG_LOG( SG_GENERAL,
SG_ALERT,
"CanvasWidget: Failed to get nasal subsystem!" );
+ NASAL_DISABLED("PUI CanvasWidget");
+ return;
+ }
const std::string file = std::string("__canvas:")
+ cprops->getStringValue("name");
diff --git a/src/GUI/FGPUIDialog.cxx b/src/GUI/FGPUIDialog.cxx
index 30cbef7..f66f40e 100644
--- a/src/GUI/FGPUIDialog.cxx
+++ b/src/GUI/FGPUIDialog.cxx
@@ -672,7 +672,9 @@ FGPUIDialog::FGPUIDialog (SGPropertyNode *props) :
FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal");
if (nas)
nas->createModule(_module.c_str(), _module.c_str(), s, strlen(s), props);
+ else NASAL_DISABLED("Nasal embedded in PUI dialogs");
}
+
}
display(props);
}
@@ -1056,7 +1058,11 @@ FGPUIDialog::makeObject (SGPropertyNode *props, int parentWidth, int parentHeigh
}
} else {
FGNasalSys* nasal = (FGNasalSys*) globals->get_subsystem("nasal");
+ if(nasal)
obj->setBuffer(nasal->log());
+ else {
+ NASAL_DISABLED("PUI");
+ }
}
setupObject(obj, props);
diff --git a/src/GUI/FileDialog.cxx b/src/GUI/FileDialog.cxx
index 2047898..d71d910 100644
--- a/src/GUI/FileDialog.cxx
+++ b/src/GUI/FileDialog.cxx
@@ -100,6 +100,10 @@ public:
object(obj)
{
FGNasalSys* sys = static_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
+ if(!sys) {
+ NASAL_DISABLED("FileDialog");
+ return;
+ }
_gcKeys[0] = sys->gcSave(f);
_gcKeys[1] = sys->gcSave(obj);
}
@@ -107,7 +111,10 @@ public:
virtual void onFileDialogDone(FGFileDialog* instance, const SGPath& aPath)
{
FGNasalSys* sys = static_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
-
+ if(!sys) {
+ NASAL_DISABLED("FileDialog (done)");
+ return;
+ }
naContext ctx = naNewContext();
naRef args[1];
args[0] = nasal::to_nasal(ctx, aPath);
@@ -119,6 +126,10 @@ public:
~NasalCallback()
{
FGNasalSys* sys = static_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
+ if(!sys) {
+ NASAL_DISABLED("FileDialog");
+ return;
+ }
sys->gcRelease(_gcKeys[0]);
sys->gcRelease(_gcKeys[1]);
}
diff --git a/src/Input/FGEventInput.cxx b/src/Input/FGEventInput.cxx
index 29bdc6e..7bbab09 100644
--- a/src/Input/FGEventInput.cxx
+++ b/src/Input/FGEventInput.cxx
@@ -236,6 +236,7 @@ FGInputDevice::~FGInputDevice()
}
nas->deleteModule(nasalModule.c_str());
}
+ else NASAL_DISABLED("FGInputDevice");
}
void FGInputDevice::Configure( SGPropertyNode_ptr aDeviceNode )
@@ -264,7 +265,7 @@ void FGInputDevice::Configure( SGPropertyNode_ptr aDeviceNode )
FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal");
if (nas)
nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s.c_str(), s.length(), deviceNode );
- }
+ } else NASAL_DISABLED("FGInputDevice::Configure");
}
}
diff --git a/src/Input/FGJoystickInput.cxx b/src/Input/FGJoystickInput.cxx
index 069e9d8..d6d3fd8 100644
--- a/src/Input/FGJoystickInput.cxx
+++ b/src/Input/FGJoystickInput.cxx
@@ -208,14 +208,16 @@ void FGJoystickInput::postinit()
std::ostringstream str;
str << "__js" << i;
std::string module = str.str();
+ unsigned int j;
+ if (nasalsys) {
nasalsys->createModule(module.c_str(), module.c_str(), "", 0);
PropertyList nasal = js_node->getChildren("nasal");
- unsigned int j;
for (j = 0; j < nasal.size(); j++) {
nasal[j]->setStringValue("module", module.c_str());
nasalsys->handleCommand(nasal[j]);
}
+ } else NASAL_DISABLED("Joystick bindings");
//
// Initialize the axes.
diff --git a/src/Input/FGKeyboardInput.cxx b/src/Input/FGKeyboardInput.cxx
index 8ff3d0a..004547e 100644
--- a/src/Input/FGKeyboardInput.cxx
+++ b/src/Input/FGKeyboardInput.cxx
@@ -109,11 +109,13 @@ void FGKeyboardInput::postinit()
}
FGNasalSys *nasalsys = (FGNasalSys *)globals->get_subsystem("nasal");
+ if(nasalsys) {
PropertyList nasal = key_nodes->getChildren("nasal");
for (unsigned int j = 0; j < nasal.size(); j++) {
nasal[j]->setStringValue("module", module.c_str());
nasalsys->handleCommand(nasal[j]);
}
+} else NASAL_DISABLED("Keyboard bindings");
PropertyList keys = key_nodes->getChildren("key");
for (unsigned int i = 0; i < keys.size(); i++) {
diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx
index 1e93a0b..e07d4b9 100644
--- a/src/Main/fg_commands.cxx
+++ b/src/Main/fg_commands.cxx
@@ -185,7 +185,13 @@ do_null (const SGPropertyNode * arg)
static bool
do_nasal (const SGPropertyNode * arg)
{
- return ((FGNasalSys*)globals->get_subsystem("nasal"))->handleCommand(arg);
+ FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal");
+ if(!nasalSys) {
+ NASAL_DISABLED("fgcomand nasal (bindings)");
+ return false;
+ }
+ return nasalSys->handleCommand(arg);
+
}
/**
diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index 61d3425..d8bd11a 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -904,11 +904,12 @@ void fgPostInitSubsystems()
// Initialize the Nasal interpreter.
// Do this last, so that the loaded scripts see initialized state
////////////////////////////////////////////////////////////////////////
+if(!fgGetBool("/sim/startup/disable-nasal",false)) {
FGNasalSys* nasal = new FGNasalSys();
globals->add_subsystem("nasal", nasal, SGSubsystemMgr::INIT);
nasal->init();
SG_LOG(SG_GENERAL, SG_INFO, "Nasal init took:" << st.elapsedMSec());
-
+} else NASAL_DISABLED("Initialization");
// initialize methods that depend on other subsystems.
st.stamp();
globals->get_subsystem_mgr()->postinit();
diff --git a/src/Network/ATC-Main.cxx b/src/Network/ATC-Main.cxx
index 6c0da9b..00cd91a 100644
--- a/src/Network/ATC-Main.cxx
+++ b/src/Network/ATC-Main.cxx
@@ -223,10 +223,12 @@ bool FGATCMain::process() {
// directly provide.
FGNasalSys *n = (FGNasalSys*)globals->get_subsystem("nasal");
+ if(n) {
bool result = n->parseAndRun( "atcsim.update()" );
if ( !result ) {
SG_LOG( SG_NETWORK, SG_ALERT, "Nasal: atcsim.update() failed!" );
}
+ } else NASAL_DISABLED("ATC-Main");
// process the ATC outputs
if ( output0 != NULL && board0_locked ) {
diff --git a/src/Network/HTTPClient.cxx b/src/Network/HTTPClient.cxx
index e6d2b29..48376ab 100644
--- a/src/Network/HTTPClient.cxx
+++ b/src/Network/HTTPClient.cxx
@@ -327,6 +327,10 @@ void FGHTTPClient::postinit()
pkg::Root* packageRoot = globals->packageRoot();
if (packageRoot) {
FGNasalSys* nasalSys = (FGNasalSys*) globals->get_subsystem("nasal");
+ if(!nasalSys) {
+ NASAL_DISABLED("package manager");
+ return;
+ }
nasal::Hash nasalGlobals = nasalSys->getGlobals();
nasal::Hash nasalPkg = nasalGlobals.createHash("pkg"); // module
nasalPkg.set("root", packageRoot);
diff --git a/src/Scripting/NasalSys.hxx b/src/Scripting/NasalSys.hxx
index 096a591..af01ff2 100644
--- a/src/Scripting/NasalSys.hxx
+++ b/src/Scripting/NasalSys.hxx
@@ -30,11 +30,14 @@ namespace simgear { class BufferedLogCallback; }
SGPropertyNode* ghostToPropNode(naRef ref);
+#define NASAL_DISABLED(feature) SG_LOG(SG_NASAL, SG_ALERT, "Nasal support disabled:" << feature)
+
class FGNasalSys : public SGSubsystem
{
public:
FGNasalSys();
virtual ~FGNasalSys();
+
virtual void init();
virtual void shutdown();