1
0
Fork 0

- add two error messages to setlistener() (invalid property or func object)

- adapt last changes to Style Of The Tile
This commit is contained in:
mfranz 2007-02-03 16:46:39 +00:00
parent 106215f39a
commit 862196a3ab
2 changed files with 12 additions and 7 deletions

View file

@ -269,7 +269,7 @@ static naRef f_settimer(naContext c, naRef me, int argc, naRef* args)
static naRef f_setlistener(naContext c, naRef me, int argc, naRef* args)
{
FGNasalSys* nasal = (FGNasalSys*)globals->get_subsystem("nasal");
return nasal->setListener(argc, args);
return nasal->setListener(c, argc, args);
}
// removelistener(int) extension function. Falls through to
@ -434,10 +434,10 @@ void FGNasalSys::update(double)
if(_purgeListeners) {
_purgeListeners = false;
map<int, FGNasalListener *>::iterator it;
for ( it = _listener.begin(); it != _listener.end(); ) {
for(it = _listener.begin(); it != _listener.end();) {
FGNasalListener *nl = it->second;
if(nl->_dead) {
_listener.erase( it++ );
_listener.erase(it++);
delete nl;
} else {
++it;
@ -668,21 +668,26 @@ int FGNasalSys::_listenerId = 0;
// If the bool is true, then the listener is executed initially. The
// setlistener() function returns a unique id number, that can be used
// as argument to the removelistener() function.
naRef FGNasalSys::setListener(int argc, naRef* args)
naRef FGNasalSys::setListener(naContext c, int argc, naRef* args)
{
SGPropertyNode_ptr node;
naRef prop = argc > 0 ? args[0] : naNil();
if(naIsString(prop)) node = fgGetNode(naStr_data(prop), true);
else if(naIsGhost(prop)) node = *(SGPropertyNode_ptr*)naGhost_ptr(prop);
else return naNil();
else {
naRuntimeError(c, "setlistener() with invalid property argument");
return naNil();
}
if(node->isTied())
SG_LOG(SG_NASAL, SG_DEBUG, "Attaching listener to tied property " <<
node->getPath());
naRef handler = argc > 1 ? args[1] : naNil();
if(!(naIsCode(handler) || naIsCCode(handler) || naIsFunc(handler)))
if(!(naIsCode(handler) || naIsCCode(handler) || naIsFunc(handler))) {
naRuntimeError(c, "setlistener() with invalid function argument");
return naNil();
}
bool initial = argc > 2 && naTrue(args[2]);

View file

@ -43,7 +43,7 @@ public:
void setTimer(int argc, naRef* args);
// Implementation of the setlistener extension function
naRef setListener(int argc, naRef* args);
naRef setListener(naContext c, int argc, naRef* args);
naRef removeListener(naContext c, int argc, naRef* args);
// Returns a ghost wrapper for the current _cmdArg