Skip to content

Commit 4c096ee

Browse files
committed
not defining recursive helper function in global scope
1 parent 514fb43 commit 4c096ee

File tree

1 file changed

+37
-40
lines changed

1 file changed

+37
-40
lines changed

src/core/Ros.js

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -319,52 +319,49 @@ ROSLIB.Ros.prototype.getMessageDetails = function(message, callback) {
319319
ROSLIB.Ros.decodeTypeDefs = function(type_defs) {
320320
var type_def_dict = {};
321321
var the_type = type_defs[0];
322-
return ROSLIB.Ros._decodeTypeDefs(type_defs[0], type_defs);
323-
};
324-
325-
/**
326-
* Internal function of ROSLIB.Ros.decodeTypeDefs.
327-
* It calls itself recursively to resolve type definition
328-
* using hint_defs.
329-
* @param the_type - array of type_def dictionary
330-
* @param hint_defs - array of typedefs
331-
*/
332-
ROSLIB.Ros._decodeTypeDefs = function(the_type, hint_defs) {
333-
var type_def_dict = {};
334-
for (var i = 0; i < the_type.fieldnames.length; i++) {
335-
var array_len = the_type.fieldarraylen[i];
336-
var field_name = the_type.fieldnames[i];
337-
var field_type = the_type.fieldtypes[i];
338-
if (field_type.indexOf("/") === -1) { // check the field_type includes "/" or not
339-
if (array_len == -1) {
340-
type_def_dict[field_name] = field_type;
341-
}
342-
else {
343-
type_def_dict[field_name] = [field_type];
344-
}
345-
}
346-
else {
347-
// lookup the name
348-
var sub_type = false;
349-
for (var j = 0; j < hint_defs.length; j++) {
350-
if (hint_defs[j].type == field_type) {
351-
sub_type = hint_defs[j];
352-
break;
353-
}
354-
}
355-
if (sub_type) {
356-
var sub_type_result = ROSLIB.Ros._decodeTypeDefs(sub_type, hint_defs);
322+
323+
// It calls itself recursively to resolve type definition
324+
// using hint_defs.
325+
var decodeTypeDefsRec = function(the_type, hint_defs) {
326+
var type_def_dict = {};
327+
for (var i = 0; i < the_type.fieldnames.length; i++) {
328+
var array_len = the_type.fieldarraylen[i];
329+
var field_name = the_type.fieldnames[i];
330+
var field_type = the_type.fieldtypes[i];
331+
if (field_type.indexOf("/") === -1) { // check the field_type includes "/" or not
357332
if (array_len == -1) {
358-
type_def_dict[field_name] = sub_type_result;
333+
type_def_dict[field_name] = field_type;
359334
}
360335
else {
361-
type_def_dict[field_name] = [sub_type_result];
336+
type_def_dict[field_name] = [field_type];
362337
}
363338
}
364339
else {
365-
throw "cannot find " + field_type;
340+
// lookup the name
341+
var sub_type = false;
342+
for (var j = 0; j < hint_defs.length; j++) {
343+
if (hint_defs[j].type == field_type) {
344+
sub_type = hint_defs[j];
345+
break;
346+
}
347+
}
348+
if (sub_type) {
349+
var sub_type_result = decodeTypeDefsRec(sub_type, hint_defs);
350+
if (array_len == -1) {
351+
type_def_dict[field_name] = sub_type_result;
352+
}
353+
else {
354+
type_def_dict[field_name] = [sub_type_result];
355+
}
356+
}
357+
else {
358+
throw "cannot find " + field_type;
359+
}
366360
}
367361
}
368-
}
369-
return type_def_dict;
362+
return type_def_dict;
363+
}; // end of decodeTypeDefsRec
364+
365+
return decodeTypeDefsRec(type_defs[0], type_defs);
370366
};
367+

0 commit comments

Comments
 (0)