You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
2.9 KiB
141 lines
2.9 KiB
10 years ago
|
(*
|
||
|
* Copyright (c) 2009 -2013 Monoidics ltd.
|
||
|
* Copyright (c) 2013 - Facebook.
|
||
|
* All rights reserved.
|
||
|
*)
|
||
|
|
||
|
open Javalib_pack
|
||
|
|
||
|
(** {2 Class names and types} *)
|
||
|
let infer_builtins_cl = JBasics.make_cn "com.facebook.infer.models.InferBuiltins"
|
||
|
|
||
|
let infer_array_cl = "com.facebook.infer.models.InferArray"
|
||
|
|
||
|
let infer_undefined_cl = "com.facebook.infer.models.InferUndefined"
|
||
|
|
||
|
let infer_object_cl = "com.facebook.infer.models.InferObject"
|
||
|
|
||
|
let object_cl = "java.lang.Object"
|
||
|
|
||
|
let java_lang_object_classname = Mangled.from_string object_cl
|
||
|
|
||
|
let obj_type = (JBasics.TObject (JBasics.TClass (JBasics.make_cn object_cl)))
|
||
|
|
||
|
let bool_type = JBasics.TBasic `Bool
|
||
|
|
||
|
let string_cl = "java.lang.String"
|
||
|
|
||
|
let class_cl = "java.lang.Class"
|
||
|
|
||
|
let npe_cl = "java.lang.NullPointerException"
|
||
|
|
||
|
let cce_cl = "java.lang.ClassCastException"
|
||
|
|
||
|
let out_of_bound_cl = "java.lang.ArrayIndexOutOfBoundsException"
|
||
|
|
||
|
let reentrant_lock_cl = "java.util.concurrent.locks.ReentrantLock"
|
||
|
|
||
|
let lock_cl = "java.util.concurrent.locks.Lock"
|
||
|
|
||
|
let reentrant_rwlock_cl = "java.util.concurrent.locks.ReentrantReadWriteLock"
|
||
|
|
||
|
let reentrant_rlock_cl = reentrant_rwlock_cl^"$ReadLock"
|
||
|
|
||
|
let reentrant_wlock_cl = reentrant_rwlock_cl^"$WriteLock"
|
||
|
|
||
|
let thread_class = "java.lang.Thread"
|
||
|
|
||
|
let runnable_if = "java.lang.Runnable"
|
||
|
|
||
|
let lock_method = "lock"
|
||
|
|
||
|
let unlock_method = "unlock"
|
||
|
|
||
|
let try_lock_method = "tryLock"
|
||
|
|
||
|
let start_method = "start"
|
||
|
|
||
|
let run_method = "run"
|
||
|
|
||
|
(** {2 Names of special variables, constants and method names} *)
|
||
|
|
||
|
let this = "this"
|
||
|
|
||
|
let constructor_name = "<init>"
|
||
|
|
||
|
let clone_name = "clone"
|
||
|
|
||
|
let field_st = "field"
|
||
|
|
||
|
let field_cst = "<field>"
|
||
|
|
||
|
(** {2 Names of primitive types} *)
|
||
|
|
||
|
let void = "void"
|
||
|
|
||
|
let boolean_st = "boolean"
|
||
|
|
||
|
let byte_st = "byte"
|
||
|
|
||
|
let char_st = "char"
|
||
|
|
||
|
let double_st = "double"
|
||
|
|
||
|
let float_st = "float"
|
||
|
|
||
|
let int_st = "int"
|
||
|
|
||
|
let long_st = "long"
|
||
|
|
||
|
let short_st = "short"
|
||
|
|
||
|
(** {2 Encoding of primitive types when they are the element type of arrays } *)
|
||
|
|
||
|
let boolean_code = "Z"
|
||
|
|
||
|
let byte_code = "B"
|
||
|
|
||
|
let char_code = "C"
|
||
|
|
||
|
let double_code = "D"
|
||
|
|
||
|
let float_code = "F"
|
||
|
|
||
|
let int_code = "I"
|
||
|
|
||
|
let long_code = "J"
|
||
|
|
||
|
let short_code = "S"
|
||
|
|
||
|
let class_code cl = "L"^cl
|
||
|
|
||
|
let errors_db_file = "errors.db"
|
||
|
let main_errors_file = "Java_frontend.errors"
|
||
|
|
||
|
(** {2 Flags } *)
|
||
|
|
||
|
(* the Sawja representation of the Java Bytecode will be printed *)
|
||
|
let html_mode = ref false
|
||
|
|
||
|
(* debug information will be printed *)
|
||
|
let debug_mode = ref false
|
||
|
|
||
|
(* The classes in the given jar file will be translated. No sources needed *)
|
||
|
let dependency_mode = ref false
|
||
|
|
||
|
(* The dynamic dispatch will be handled partially statically *)
|
||
|
let static_dispatch = ref false
|
||
|
|
||
|
(* counts the amount of initializer methods, in init-mode *)
|
||
|
let init_count = ref 0
|
||
|
|
||
|
let normalize_string s =
|
||
|
let rexp = Str.regexp_string "$" in
|
||
|
Str.global_replace rexp "_" s
|
||
|
|
||
|
(* Translate the safety checks doen by the JVM *)
|
||
|
let translate_checks = ref false
|
||
|
|
||
|
(* Generate harness for Android code *)
|
||
|
let create_harness = true
|