@@ -319,52 +319,49 @@ ROSLIB.Ros.prototype.getMessageDetails = function(message, callback) {
319319ROSLIB . 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