|  |  | @ -32,30 +32,22 @@ let source_file_from_path path = | 
			
		
	
		
		
			
				
					
					|  |  |  |          DB.source_file_from_string path) |  |  |  |          DB.source_file_from_string path) | 
			
		
	
		
		
			
				
					
					|  |  |  |   | None -> DB.source_file_from_string path |  |  |  |   | None -> DB.source_file_from_string path | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | let choose_sloc sloc1 sloc2 prefer_first = |  |  |  | let choose_sloc sloc1 sloc2 = | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   let sloc_bad sloc = |  |  |  |   match sloc1.Clang_ast_t.sl_file with | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     match sloc.Clang_ast_t.sl_file with |  |  |  |   | Some f when not (DB.source_file_equal (source_file_from_path f) !curr_file) -> sloc2 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     | Some f when not (DB.source_file_equal (source_file_from_path f) !curr_file) -> |  |  |  |   | _ -> sloc1 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         true |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     | _ -> false in |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   if sloc_bad sloc1 then sloc2 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   else if prefer_first then sloc1 else sloc2 |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | let choose_sloc_to_update_curr_file sloc1 sloc2 = |  |  |  | let choose_sloc_to_update_curr_file sloc1 sloc2 = | 
			
		
	
		
		
			
				
					
					|  |  |  |   let sloc_curr_file sloc = |  |  |  |   match sloc2.Clang_ast_t.sl_file with | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     match sloc.Clang_ast_t.sl_file with |  |  |  |   | Some f when DB.source_file_equal (source_file_from_path f) !DB.current_source -> sloc2 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     | Some f when DB.source_file_equal (source_file_from_path f) !DB.current_source -> |  |  |  |   | _ -> sloc1 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         true |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     | _ -> false in |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   if sloc_curr_file sloc2 then sloc2 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   else sloc1 |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | let update_curr_file di = |  |  |  | let update_curr_file di = | 
			
		
	
		
		
			
				
					
					|  |  |  |   match di.Clang_ast_t.di_source_range with (loc_start, loc_end) -> |  |  |  |   let loc_start, loc_end = di.Clang_ast_t.di_source_range in | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     let loc = choose_sloc_to_update_curr_file loc_start loc_end in |  |  |  |   let loc = choose_sloc_to_update_curr_file loc_start loc_end in | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     (match loc.Clang_ast_t.sl_file with |  |  |  |   match loc.Clang_ast_t.sl_file with | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |      | Some f -> curr_file := source_file_from_path f |  |  |  |   | Some f -> curr_file := source_file_from_path f | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |      | None -> ()) |  |  |  |   | None -> () | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | let clang_to_sil_location clang_loc procdesc_opt = |  |  |  | let clang_to_sil_location clang_loc procdesc_opt = | 
			
		
	
		
		
			
				
					
					|  |  |  |   let line = match clang_loc.Clang_ast_t.sl_line with |  |  |  |   let line = match clang_loc.Clang_ast_t.sl_line with | 
			
		
	
	
		
		
			
				
					|  |  | @ -81,33 +73,38 @@ let clang_to_sil_location clang_loc procdesc_opt = | 
			
		
	
		
		
			
				
					
					|  |  |  |               else -1 in |  |  |  |               else -1 in | 
			
		
	
		
		
			
				
					
					|  |  |  |             file_db, nloc |  |  |  |             file_db, nloc | 
			
		
	
		
		
			
				
					
					|  |  |  |         | None -> !curr_file, !Config.nLOC in |  |  |  |         | None -> !curr_file, !Config.nLOC in | 
			
		
	
		
		
			
				
					
					|  |  |  |   { Location.line = line; Location.col = col; Location.file = file; Location.nLOC = nLOC } |  |  |  |   Location.{line; col; file; nLOC} | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | let should_translate (loc_start, loc_end) = | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   let map_file_of pred loc = | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     match loc.Clang_ast_t.sl_file with | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     | Some f -> pred (source_file_from_path f) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     | None -> false | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   in | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   let equal_current_source file = | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     DB.source_file_equal file !DB.current_source | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   in | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   equal_current_source !curr_file | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   || map_file_of equal_current_source loc_end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   || map_file_of equal_current_source loc_start | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | let should_translate_lib source_range = |  |  |  | let should_translate_lib source_range = | 
			
		
	
		
		
			
				
					
					|  |  |  |   if !CFrontend_config.no_translate_libs then |  |  |  |   not !CFrontend_config.no_translate_libs | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     match source_range with (loc_start, loc_end) -> |  |  |  |   || should_translate source_range | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       let loc_start = choose_sloc_to_update_curr_file loc_start loc_end in |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       let loc = clang_to_sil_location loc_start None in |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       DB.source_file_equal loc.Location.file !DB.current_source |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   else true |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | let should_translate_enum source_range = |  |  |  | let should_translate_enum source_range = | 
			
		
	
		
		
			
				
					
					|  |  |  |   if !CFrontend_config.testing_mode then |  |  |  |   not !CFrontend_config.testing_mode | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     match source_range with (loc_start, loc_end) -> |  |  |  |   || should_translate source_range | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       let loc_start = choose_sloc_to_update_curr_file loc_start loc_end in |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       let loc = clang_to_sil_location loc_start None in |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       DB.source_file_equal loc.Location.file !DB.current_source |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   else true |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | let get_sil_location_from_range source_range prefer_first = |  |  |  | let get_sil_location_from_range source_range prefer_first = | 
			
		
	
		
		
			
				
					
					|  |  |  |   match source_range with (sloc1, sloc2) -> |  |  |  |   let sloc1, sloc2 = source_range in | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     let sloc = choose_sloc sloc1 sloc2 prefer_first in |  |  |  |   let sloc = if not prefer_first then sloc2 else choose_sloc sloc1 sloc2 in | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     clang_to_sil_location sloc None |  |  |  |   clang_to_sil_location sloc None | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | let get_sil_location stmt_info context = |  |  |  | let get_sil_location stmt_info context = | 
			
		
	
		
		
			
				
					
					|  |  |  |   match stmt_info.Clang_ast_t.si_source_range with (sloc1, sloc2) -> |  |  |  |   let sloc1, sloc2 = stmt_info.Clang_ast_t.si_source_range in | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     let sloc = choose_sloc sloc1 sloc2 true in |  |  |  |   let sloc = choose_sloc sloc1 sloc2 in | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     clang_to_sil_location sloc (Some (CContext.get_procdesc context)) |  |  |  |   clang_to_sil_location sloc (Some (CContext.get_procdesc context)) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | let check_source_file source_file = |  |  |  | let check_source_file source_file = | 
			
		
	
		
		
			
				
					
					|  |  |  |   let extensions_allowed = [".m"; ".mm"; ".c"; ".cc"; ".cpp"; ".h"] in |  |  |  |   let extensions_allowed = [".m"; ".mm"; ".c"; ".cc"; ".cpp"; ".h"] in | 
			
		
	
	
		
		
			
				
					|  |  | 
 |