naRef idx = naNumValue(naVec_get(argv, 1));
bool create = naTrue(naVec_get(argv, 2));
SGPropertyNode* n;
- if(naIsNil(idx) || !naIsNum(idx)) {
- n = (*node)->getChild(naStr_data(child), create);
- } else {
- n = (*node)->getChild(naStr_data(child), (int)idx.num, create);
+ try {
+ if(naIsNil(idx) || !naIsNum(idx)) {
+ n = (*node)->getChild(naStr_data(child), create);
+ } else {
+ n = (*node)->getChild(naStr_data(child), (int)idx.num, create);
+ }
+ } catch (const string& err) {
+ naRuntimeError(c, (char *)err.c_str());
+ return naNil();
}
if(!n) return naNil();
return propNodeGhostCreate(c, n);
// Get all children of a specified name
naRef name = naVec_get(argv, 0);
if(!naIsString(name)) return naNil();
- vector<SGPropertyNode_ptr> children
- = (*node)->getChildren(naStr_data(name));
- for(unsigned int i=0; i<children.size(); i++)
- naVec_append(result, propNodeGhostCreate(c, children[i]));
+ try {
+ vector<SGPropertyNode_ptr> children
+ = (*node)->getChildren(naStr_data(name));
+ for(unsigned int i=0; i<children.size(); i++)
+ naVec_append(result, propNodeGhostCreate(c, children[i]));
+ } catch (const string& err) {
+ naRuntimeError(c, (char *)err.c_str());
+ return naNil();
+ }
}
return result;
}
naRef child = naVec_get(argv, 0);
naRef index = naVec_get(argv, 1);
if(!naIsString(child) || !naIsNum(index)) return naNil();
- (*node)->removeChild(naStr_data(child), (int)index.num, false);
+ try {
+ (*node)->removeChild(naStr_data(child), (int)index.num, false);
+ } catch (const string& err) {
+ naRuntimeError(c, (char *)err.c_str());
+ }
return naNil();
}
// Remove all children of a specified name
naRef name = naVec_get(argv, 0);
if(!naIsString(name)) return naNil();
- vector<SGPropertyNode_ptr> children
- = (*node)->removeChildren(naStr_data(name), false);
- for(unsigned int i=0; i<children.size(); i++)
- naVec_append(result, propNodeGhostCreate(c, children[i]));
+ try {
+ vector<SGPropertyNode_ptr> children
+ = (*node)->removeChildren(naStr_data(name), false);
+ for(unsigned int i=0; i<children.size(); i++)
+ naVec_append(result, propNodeGhostCreate(c, children[i]));
+ } catch (const string& err) {
+ naRuntimeError(c, (char *)err.c_str());
+ return naNil();
+ }
}
return result;
}
naRef path = naVec_get(argv, 0);
bool create = naTrue(naVec_get(argv, 1));
if(!naIsString(path)) return naNil();
- SGPropertyNode* n = (*node)->getNode(naStr_data(path), create);
+ SGPropertyNode* n;
+ try {
+ n = (*node)->getNode(naStr_data(path), create);
+ } catch (const string& err) {
+ naRuntimeError(c, (char *)err.c_str());
+ return naNil();
+ }
return propNodeGhostCreate(c, n);
}