@ -7,13 +7,32 @@ use XML::LibXML;
 
		
	
		
			
				
 
		
	
		
			
				our  @ lines_rb ;  
		
	
		
			
				
 
		
	
		
			
				my  $ os ;  
		
	
		
			
				if  ( $^O  =~  /linux/i  or  $^O =~  /darwin/i )  {  
		
	
		
			
				my  $ os  =  $ ARGV [ 2 ]  or  die ( 'os not provided (argv[2])' )  ;  
		
	
		
			
				if  ( $ os  =~  /linux/i  or  $ os =~  /darwin/i )  {  
		
	
		
			
				    $ os  =  'linux' ; 
 
		
	
		
			
				}  els e  {  
		
	
		
			
				}  els if ( $ os  =~  /windows/i )   {  
		
	
		
			
				    $ os  =  'windows' ; 
 
		
	
		
			
				}  else  {  
		
	
		
			
				    die  "Unknown OS: "  .  $ ARGV [ 2 ]  .  "\n" ; 
 
		
	
		
			
				}  
		
	
		
			
				
 
		
	
		
			
				my  $ arch  =  $ ARGV [ 3 ]  or  die ( 'arch not provided (argv[3])' ) ;  
		
	
		
			
				if  ( $ arch  =~  /64/i )  {  
		
	
		
			
				    $ arch  =  64 ; 
 
		
	
		
			
				}  elsif  ( $ arch  =~  /32/i )  {  
		
	
		
			
				    $ arch  =  32 ; 
 
		
	
		
			
				}  else  {  
		
	
		
			
				    die  "Unknown architecture: "  .  $ ARGV [ 3 ]  .  "\n" ; 
 
		
	
		
			
				}  
		
	
		
			
				$ os  =  $ ARGV [ 2 ]  if  ( $ ARGV [ 2 ] ) ;  
		
	
		
			
				
 
		
	
		
			
				# 32 bits on Windows and 32-bit *nix, 64 bits on 64-bit *nix  
		
	
		
			
				my  $ SIZEOF_LONG ;  
		
	
		
			
				if  ( $ os  eq  'windows'  ||  $ arch  ==  32 )  {  
		
	
		
			
				    $ SIZEOF_LONG  =  4 ; 
 
		
	
		
			
				}  else  {  
		
	
		
			
				    $ SIZEOF_LONG  =  8 ; 
 
		
	
		
			
				}  
		
	
		
			
				
 
		
	
		
			
				
 
		
	
		
			
				sub  indent_rb (&) {  
		
	
		
			
				    my  ( $ sub )  =  @ _ ; 
 
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
			
			@ -486,7 +505,7 @@ sub render_class_vmethod_ret {
 
		
	
		
			
				    { 
 
		
	
		
			
				        # raw method call returns an int32, mask according to actual return type 
 
		
	
		
			
				        my  $ retsubtype  =  $ ret - > getAttribute ( 'ld:subtype' ) ; 
 
		
	
		
			
				        my  $ retbits  =  $ ret - > getAttribute ( 'ld:bits' ) ; 
 
		
	
		
			
				        my  $ retbits  =  sizeof ( $ ret )  *  8 ; 
 
		
	
		
			
				        push  @ lines_rb ,  "val = $call" ; 
 
		
	
		
			
				        if  ( $ retsubtype  eq  'bool' ) 
 
		
	
		
			
				        { 
 
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
			
			@ -582,7 +601,7 @@ sub get_field_align {
 
		
	
		
			
				    my  $ meta  =  $ field - > getAttribute ( 'ld:meta' ) ; 
 
		
	
		
			
				
 
		
	
		
			
				    if  ( $ meta  eq  'number' )  { 
 
		
	
		
			
				        $ al  =  $ field - > getAttribute ( 'ld:bits' ) / 8 ; 
 
		
	
		
			
				        $ al  =  sizeof ( $ field ) ; 
 
		
	
		
			
				        # linux aligns int64_t to 4, windows to 8 
 
		
	
		
			
				        # floats are 4 bytes so no pb 
 
		
	
		
			
				        $ al  =  4  if  ( $ al  >  4  and  ( $ os  eq  'linux'  or  $ al  !=  8 ) ) ; 
 
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
			
			@ -655,6 +674,10 @@ sub sizeof {
 
		
	
		
			
				    my  $ meta  =  $ field - > getAttribute ( 'ld:meta' ) ; 
 
		
	
		
			
				
 
		
	
		
			
				    if  ( $ meta  eq  'number' )  { 
 
		
	
		
			
				        if  ( $ field - > getAttribute ( 'ld:subtype' )  eq  'long' )  { 
 
		
	
		
			
				            return  $ SIZEOF_LONG ; 
 
		
	
		
			
				        } 
 
		
	
		
			
				
 
		
	
		
			
				        return  $ field - > getAttribute ( 'ld:bits' ) / 8 ; 
 
		
	
		
			
				
 
		
	
		
			
				    }  elsif  ( $ meta  eq  'pointer' )  { 
 
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
			
			@ -859,7 +882,9 @@ sub render_item_number {
 
		
	
		
			
				    $ subtype  || =  $ g - > getAttribute ( 'base-type' )  if  ( $ g ) ; 
 
		
	
		
			
				    $ subtype  =  'int32_t'  if  ( ! $ subtype ) ; 
 
		
	
		
			
				
 
		
	
		
			
				         if  ( $ subtype  eq  'int64_t' )  { 
 
		
	
		
			
				    if  ( $ subtype  eq  'uint64_t' )  { 
 
		
	
		
			
				        push  @ lines_rb ,  'number 64, false' ; 
 
		
	
		
			
				    }  elsif  ( $ subtype  eq  'int64_t' )  { 
 
		
	
		
			
				        push  @ lines_rb ,  'number 64, true' ; 
 
		
	
		
			
				    }  elsif  ( $ subtype  eq  'uint32_t' )  { 
 
		
	
		
			
				        push  @ lines_rb ,  'number 32, false' ; 
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -877,6 +902,8 @@ sub render_item_number {
 
		
	
		
			
				        push  @ lines_rb ,  'number 8, true' ; 
 
		
	
		
			
				        $ initvalue  || =  'nil' ; 
 
		
	
		
			
				        $ typename  || =  'BooleanEnum' ; 
 
		
	
		
			
				    }  elsif  ( $ subtype  eq  'long' )  { 
 
		
	
		
			
				        push  @ lines_rb ,  'number '  .  $ SIZEOF_LONG  .  ', true' ; 
 
		
	
		
			
				    }  elsif  ( $ subtype  eq  's-float' )  { 
 
		
	
		
			
				        push  @ lines_rb ,  'float' ; 
 
		
	
		
			
				        return ;