[clang] Add template instantiation info into Procname.t

Reviewed By: jberdine

Differential Revision: D4634826

fbshipit-source-id: 3fdfb80
master
Andrzej Kotulski 8 years ago committed by Facebook Github Bot
parent 95a8ca2d3e
commit 925d73efce

@ -24,7 +24,8 @@ let create_procname name =
let create_objc_class_method class_name method_name =
let method_kind = Typ.Procname.ObjCClassMethod in
let tname = Typename.Objc.from_string class_name in
let pname = Typ.Procname.ObjC_Cpp (Typ.Procname.objc_cpp tname method_name method_kind) in
let pname = Typ.Procname.ObjC_Cpp
(Typ.Procname.objc_cpp tname method_name method_kind Typ.NoTemplate) in
register pname;
pname

@ -319,7 +319,7 @@ let module Procname = {
[@@deriving compare];
/** Type of c procedure names. */
type c = (string, option string) [@@deriving compare];
type c = (string, option string, template_spec_info) [@@deriving compare];
type objc_cpp_method_kind =
| CPPMethod (option string) /** with mangling */
| CPPConstructor (option string, bool) /** with mangling + is it constexpr? */
@ -329,7 +329,12 @@ let module Procname = {
[@@deriving compare];
/** Type of Objective C and C++ procedure names: method signatures. */
type objc_cpp = {method_name: string, class_name: Typename.t, kind: objc_cpp_method_kind}
type objc_cpp = {
method_name: string,
class_name: Typename.t,
kind: objc_cpp_method_kind,
template_args: template_spec_info
}
[@@deriving compare];
/** Type of Objective C block names. */
@ -398,8 +403,12 @@ let module Procname = {
| None => (None, package_classname)
};
let split_typename typename => split_classname (Typename.name typename);
let from_string_c_fun (s: string) => C (s, None);
let c (plain: string) (mangled: string) => (plain, Some mangled);
let from_string_c_fun (s: string) => C (s, None, NoTemplate);
let c (plain: string) (mangled: string) (template_args: template_spec_info) => (
plain,
Some mangled,
template_args
);
let java class_name return_type method_name parameters kind => {
class_name,
return_type,
@ -409,9 +418,14 @@ let module Procname = {
};
/** Create an objc procedure name from a class_name and method_name. */
let objc_cpp class_name method_name kind => {class_name, method_name, kind};
let objc_cpp class_name method_name kind template_args => {
class_name,
method_name,
kind,
template_args
};
let get_default_objc_class_method objc_class => {
let objc_cpp = objc_cpp objc_class "__find_class_" ObjCInternalMethod;
let objc_cpp = objc_cpp objc_class "__find_class_" ObjCInternalMethod NoTemplate;
ObjC_Cpp objc_cpp
};
@ -473,7 +487,7 @@ let module Procname = {
let get_method =
fun
| ObjC_Cpp name => name.method_name
| C (name, _) => name
| C (name, _, _) => name
| Block name => name
| Java j => j.method_name
| Linters_dummy_method => "Linters_dummy_method";
@ -676,7 +690,7 @@ let module Procname = {
};
let get_global_name_of_initializer =
fun
| C (name, _) when String.is_prefix prefix::Config.clang_initializer_prefix name => {
| C (name, _, _) when String.is_prefix prefix::Config.clang_initializer_prefix name => {
let prefix_len = String.length Config.clang_initializer_prefix;
Some (String.sub name pos::prefix_len len::(String.length name - prefix_len))
}
@ -729,7 +743,7 @@ let module Procname = {
let to_unique_id pn =>
switch pn {
| Java j => java_to_string j Verbose
| C (c1, c2) => to_readable_string (c1, c2) true
| C (c1, c2, _) => to_readable_string (c1, c2) true
| ObjC_Cpp osig => c_method_to_string osig Verbose
| Block name => name
| Linters_dummy_method => "Linters_dummy_method"
@ -739,7 +753,7 @@ let module Procname = {
let to_string p =>
switch p {
| Java j => java_to_string j Non_verbose
| C (c1, c2) => to_readable_string (c1, c2) false
| C (c1, c2, _) => to_readable_string (c1, c2) false
| ObjC_Cpp osig => c_method_to_string osig Non_verbose
| Block name => name
| Linters_dummy_method => to_unique_id p
@ -749,7 +763,7 @@ let module Procname = {
let to_simplified_string withclass::withclass=false p =>
switch p {
| Java j => java_to_string withclass::withclass j Simple
| C (c1, c2) => to_readable_string (c1, c2) false ^ "()"
| C (c1, c2, _) => to_readable_string (c1, c2) false ^ "()"
| ObjC_Cpp osig => c_method_to_string osig Simple
| Block _ => "block"
| Linters_dummy_method => to_unique_id p
@ -782,7 +796,7 @@ let module Procname = {
let pp_set fmt set => Set.iter (fun pname => F.fprintf fmt "%a " pp pname) set;
let get_qualifiers pname =>
switch pname {
| C c => fst c |> QualifiedCppName.qualifiers_of_qual_name
| C c => fst3 c |> QualifiedCppName.qualifiers_of_qual_name
| ObjC_Cpp objc_cpp =>
List.append
(QualifiedCppName.qualifiers_of_qual_name (Typename.name objc_cpp.class_name))

@ -204,7 +204,7 @@ let module Procname: {
let module Set: Caml.Set.S with type elt = t;
/** Create a C procedure name from plain and mangled name. */
let c: string => string => c;
let c: string => string => template_spec_info => c;
/** Empty block name. */
let empty_block: t;
@ -259,7 +259,7 @@ let module Procname: {
let mangled_objc_block: string => t;
/** Create an objc procedure name from a class_name and method_name. */
let objc_cpp: Typename.t => string => objc_cpp_method_kind => objc_cpp;
let objc_cpp: Typename.t => string => objc_cpp_method_kind => template_spec_info => objc_cpp;
let get_default_objc_class_method: Typename.t => t;
/** Get the class name of a Objective-C/C++ procedure name. */

@ -275,7 +275,7 @@ let objc_method_to_procname objc_method =
let method_kind = Typ.Procname.objc_method_kind_of_bool (not objc_method.is_static) in
let typename = Typename.Objc.from_string objc_method.classname in
Typ.Procname.ObjC_Cpp
(Typ.Procname.objc_cpp typename objc_method.method_name method_kind)
(Typ.Procname.objc_cpp typename objc_method.method_name method_kind Typ.NoTemplate)
let taint_spec_to_taint_info taint_spec =
let taint_source =

@ -49,7 +49,7 @@ let mk_c_function translation_unit_context name function_decl_info_opt =
if String.is_empty file && String.is_empty mangled_name then
Typ.Procname.from_string_c_fun name
else
Typ.Procname.C (Typ.Procname.c name mangled)
Typ.Procname.C (Typ.Procname.c name mangled Typ.NoTemplate)
let mk_cpp_method class_name method_name ?meth_decl mangled =
let method_kind = match meth_decl with
@ -58,11 +58,11 @@ let mk_cpp_method class_name method_name ?meth_decl mangled =
| _ ->
Typ.Procname.CPPMethod mangled in
Typ.Procname.ObjC_Cpp
(Typ.Procname.objc_cpp class_name method_name method_kind)
(Typ.Procname.objc_cpp class_name method_name method_kind Typ.NoTemplate)
let mk_objc_method class_typename method_name method_kind =
Typ.Procname.ObjC_Cpp
(Typ.Procname.objc_cpp class_typename method_name method_kind)
(Typ.Procname.objc_cpp class_typename method_name method_kind Typ.NoTemplate)
let block_procname_with_index defining_proc i =
Config.anonymous_block_prefix ^

Loading…
Cancel
Save