Summary: Good night, sweet prince. This was never used and hasn't seen progress in a while. Reviewed By: jberdine Differential Revision: D21201932 fbshipit-source-id: e6f537b30master
							parent
							
								
									16859e0961
								
							
						
					
					
						commit
						44108c2392
					
				| @ -1,58 +0,0 @@ | ||||
| (* | ||||
|  * Copyright (c) Facebook, Inc. and its affiliates. | ||||
|  * | ||||
|  * This source code is licensed under the MIT license found in the | ||||
|  * LICENSE file in the root directory of this source tree. | ||||
|  *) | ||||
| open! IStd | ||||
| module L = Logging | ||||
| 
 | ||||
| let compilation_db = lazy (CompilationDatabase.from_json_files !Config.clang_compilation_dbs) | ||||
| 
 | ||||
| (** Given proc_attributes try to produce proc_attributes' where proc_attributes'.is_defined = true | ||||
|     It may trigger capture of extra files to do so and when it does, it waits for frontend to finish | ||||
|     before returning *) | ||||
| let try_capture (attributes : ProcAttributes.t) : ProcAttributes.t option = | ||||
|   let (lazy cdb) = compilation_db in | ||||
|   ( if Option.is_none (Attributes.load_defined attributes.proc_name) then | ||||
|     let decl_file = attributes.loc.file in | ||||
|     let definition_file_opt = SourceFile.of_header decl_file in | ||||
|     let try_compile definition_file = | ||||
|       (* Use the cfg as a proxy to find out whether definition_file was already captured.  If it | ||||
|          was, there is no point in trying to capture it again.  Treat existance of the cfg as a | ||||
|          barrier - if it exists it means that all attributes files have been created - write logic | ||||
|          is defined in Cfg.store *) | ||||
|       if not (SourceFiles.is_captured decl_file) then ( | ||||
|         L.(debug Capture Verbose) "Started capture of %a...@\n" SourceFile.pp definition_file ; | ||||
|         Timeout.suspend_existing_timeout ~keep_symop_total:true ; | ||||
|         protect | ||||
|           ~f:(fun () -> CaptureCompilationDatabase.capture_file_in_database cdb definition_file) | ||||
|           ~finally:Timeout.resume_previous_timeout ; | ||||
|         if Config.debug_mode && Option.is_none (Attributes.load_defined attributes.proc_name) then | ||||
|           (* peek at the results to know if capture succeeded, but only in debug mode *) | ||||
|           L.(debug Capture Verbose) | ||||
|             "Captured file %a to get procedure %a but it wasn't found there@\n" SourceFile.pp | ||||
|             definition_file Procname.pp attributes.proc_name ) | ||||
|       else | ||||
|         L.(debug Capture Verbose) | ||||
|           "Wanted to capture file %a to get procedure %a but file was already captured@\n" | ||||
|           SourceFile.pp definition_file Procname.pp attributes.proc_name | ||||
|     in | ||||
|     match definition_file_opt with | ||||
|     | None -> | ||||
|         L.(debug Capture Medium) | ||||
|           "Couldn't find source file for %a (declared in %a)@\n" Procname.pp attributes.proc_name | ||||
|           SourceFile.pp decl_file | ||||
|     | Some file -> | ||||
|         try_compile file ) ; | ||||
|   (* It's important to call load_defined_attributes again in all cases to make sure we try | ||||
|      reading from disk again no matter which condition happened. If previous call to | ||||
|      load_defined_attributes is None, it may mean couple of things: | ||||
|      - proc_name hasn't been captured yet, so it needs to get captured (most likely scenario) | ||||
|      - there was a race and proc_name got captured by the time we checked whether | ||||
|      cfg_filename exists. In this case it's important to refetch attributes from disk because | ||||
|      contents may have changed (attributes file for proc_name may be there now) | ||||
| 
 | ||||
|      Caveat: it's possible that procedure will be captured in some other unrelated file | ||||
|      later - infer may ignore it then. *) | ||||
|   Attributes.load_defined attributes.proc_name | ||||
					Loading…
					
					
				
		Reference in new issue