+ void deleteModule(const char* moduleName);
+
+ /**
+ * Set member of specified hash to given value
+ */
+ void hashset(naRef hash, const char* key, naRef val);
+
+ /**
+ * Set member of globals hash to given value
+ */
+ void globalsSet(const char* key, naRef val);
+
+ naRef call(naRef code, int argc, naRef* args, naRef locals);
+
+ naRef callMethod(naRef code, naRef self, int argc, naRef* args, naRef locals);
+
+ naRef propNodeGhost(SGPropertyNode* handle);
+
+ void registerToLoad(FGNasalModelData* data);
+ void registerToUnload(FGNasalModelData* data);
+
+ // can't call this 'globals' due to naming clash
+ naRef nasalGlobals() const
+ { return _globals; }
+
+ naContext context() const
+ { return _context; }
+
+ nasal::Hash getGlobals() const
+ { return nasal::Hash(_globals, _context); }
+
+ // This mechanism is here to allow naRefs to be passed to
+ // locations "outside" the interpreter. Normally, such a
+ // reference would be garbage collected unexpectedly. By passing
+ // it to gcSave and getting a key/handle, it can be cached in a
+ // globals.__gcsave hash. Be sure to release it with gcRelease
+ // when done.
+ int gcSave(naRef r);
+ void gcRelease(int key);
+
+ /// retrive the associated log object, for displaying log
+ /// output somewhere (a UI, presumably)
+ simgear::BufferedLogCallback* log() const
+ { return _log; }