[clang] Treat class method as a static self only as the first argument of an instance method call, not a class method

Reviewed By: mbouaziz

Differential Revision: D8574945

fbshipit-source-id: 1476729
master
Dulma Churchill 7 years ago committed by Facebook Github Bot
parent 848ef3da21
commit 2cf0e7a1d2

@ -775,7 +775,7 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
let return =
if Self.is_var_self pvar (CContext.is_objc_method context) && CType.is_class typ then
let class_name = CContext.get_curr_class_typename stmt_info context in
if trans_state.is_fst_arg_objc_method_call then
if trans_state.is_fst_arg_objc_instance_method_call then
raise
(Self.SelfClassException
{class_name; position= __POS__; source_range= stmt_info.Clang_ast_t.si_source_range})
@ -1198,7 +1198,7 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
CMethod_trans.get_class_name_method_call_from_receiver_kind context obj_c_message_expr_info
act_params
in
if trans_state.is_fst_arg_objc_method_call then
if trans_state.is_fst_arg_objc_instance_method_call then
raise
(Self.SelfClassException
{class_name; position= __POS__; source_range= si.Clang_ast_t.si_source_range})
@ -1232,7 +1232,13 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
List.map ~f:(exec_with_glvalue_as_reference instruction trans_state_param) rest
in
try
let trans_state_param' = {trans_state_param with is_fst_arg_objc_method_call= true} in
let trans_state_param' =
match obj_c_message_expr_info.Clang_ast_t.omei_receiver_kind with
| `Instance | `SuperInstance ->
{trans_state_param with is_fst_arg_objc_instance_method_call= true}
| _ ->
{trans_state_param with is_fst_arg_objc_instance_method_call= false}
in
let fst_res_trans = instruction trans_state_param' stmt in
(obj_c_message_expr_info, fst_res_trans :: param_trans_results)
with Self.SelfClassException e ->

@ -126,7 +126,7 @@ type trans_state =
; priority: priority_node
; var_exp_typ: (Exp.t * Typ.t) option
; opaque_exp: (Exp.t * Typ.t) option
; is_fst_arg_objc_method_call: bool }
; is_fst_arg_objc_instance_method_call: bool }
let default_trans_state context =
{ context
@ -135,7 +135,7 @@ let default_trans_state context =
; priority= Free
; var_exp_typ= None
; opaque_exp= None
; is_fst_arg_objc_method_call= false }
; is_fst_arg_objc_instance_method_call= false }
type control =

@ -26,7 +26,7 @@ type trans_state =
; priority: priority_node
; var_exp_typ: (Exp.t * Typ.t) option
; opaque_exp: (Exp.t * Typ.t) option
; is_fst_arg_objc_method_call: bool }
; is_fst_arg_objc_instance_method_call: bool }
val default_trans_state : CContext.t -> trans_state

@ -6,6 +6,7 @@
*/
#import <Foundation/NSObject.h>
#import <Foundation/NSBundle.h>
@interface B : NSObject
@ -105,4 +106,18 @@ BOOL class_method_in_conditional() {
}
return NO;
}
- (NSBundle*)class_method_fst_arg_of_class_method {
return [NSBundle bundleForClass:[A class]];
}
+ (NSBundle*)class_method_fst_arg_of_class_method_inside_instance_method {
static NSBundle* bundle;
NSString* stringsBundlePath =
[[NSBundle bundleForClass:[B class]] pathForResource:@"Strings"
ofType:@"bundle"];
bundle = [NSBundle bundleWithPath:stringsBundlePath] ?: [NSBundle mainBundle];
return bundle;
}
@end

@ -1,13 +1,13 @@
/* @generated */
digraph cfg {
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_1" [label="1: Start class_method_in_conditional\nFormals: \nLocals: c:objc_class* \n DECLARE_LOCALS(&return,&c); [line 101, column 1]\n " color=yellow style=filled]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_1" [label="1: Start class_method_in_conditional\nFormals: \nLocals: c:objc_class* \n DECLARE_LOCALS(&return,&c); [line 102, column 1]\n " color=yellow style=filled]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_1" -> "class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_8" ;
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_2" [label="2: Exit class_method_in_conditional \n " color=yellow style=filled]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_3" [label="3: Return Stmt \n *&return:_Bool=0 [line 106, column 3]\n " shape="box"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_3" [label="3: Return Stmt \n *&return:_Bool=0 [line 107, column 3]\n " shape="box"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_3" -> "class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_2" ;
@ -15,64 +15,108 @@ digraph cfg {
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_4" -> "class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_3" ;
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_5" [label="5: Prune (true branch, if) \n PRUNE(sizeof(t=objc_class), true); [line 103, column 7]\n " shape="invhouse"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_5" [label="5: Prune (true branch, if) \n PRUNE(sizeof(t=objc_class), true); [line 104, column 7]\n " shape="invhouse"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_5" -> "class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_7" ;
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_6" [label="6: Prune (false branch, if) \n PRUNE(!sizeof(t=objc_class), false); [line 103, column 7]\n " shape="invhouse"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_6" [label="6: Prune (false branch, if) \n PRUNE(!sizeof(t=objc_class), false); [line 104, column 7]\n " shape="invhouse"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_6" -> "class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_4" ;
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_7" [label="7: Return Stmt \n *&return:_Bool=1 [line 104, column 5]\n " shape="box"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_7" [label="7: Return Stmt \n *&return:_Bool=1 [line 105, column 5]\n " shape="box"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_7" -> "class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_2" ;
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_8" [label="8: DeclStmt \n n$3=_fun_foo() [line 102, column 13]\n *&c:objc_class*=n$3 [line 102, column 3]\n " shape="box"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_8" [label="8: DeclStmt \n n$3=_fun_foo() [line 103, column 13]\n *&c:objc_class*=n$3 [line 103, column 3]\n " shape="box"]
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_8" -> "class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_5" ;
"class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_8" -> "class_method_in_conditional.2a19b0bd8eafdb3235f52585a49ef84a_6" ;
"call_alloc_class#A#class.0cef99601cab56333305f5f96f227079_1" [label="1: Start A_call_alloc_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 55, column 1]\n " color=yellow style=filled]
"call_alloc_class#A#class.0cef99601cab56333305f5f96f227079_1" [label="1: Start A_call_alloc_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 56, column 1]\n " color=yellow style=filled]
"call_alloc_class#A#class.0cef99601cab56333305f5f96f227079_1" -> "call_alloc_class#A#class.0cef99601cab56333305f5f96f227079_3" ;
"call_alloc_class#A#class.0cef99601cab56333305f5f96f227079_2" [label="2: Exit A_call_alloc_class \n " color=yellow style=filled]
"call_alloc_class#A#class.0cef99601cab56333305f5f96f227079_3" [label="3: Call alloc \n n$5=_fun___objc_alloc_no_fail(sizeof(t=A):unsigned long) [line 56, column 3]\n " shape="box"]
"call_alloc_class#A#class.0cef99601cab56333305f5f96f227079_3" [label="3: Call alloc \n n$5=_fun___objc_alloc_no_fail(sizeof(t=A):unsigned long) [line 57, column 3]\n " shape="box"]
"call_alloc_class#A#class.0cef99601cab56333305f5f96f227079_3" -> "call_alloc_class#A#class.0cef99601cab56333305f5f96f227079_2" ;
"call_test_class#A#class.cc4e8c6ada1c4f85dad976d179e36c9a_1" [label="1: Start A_call_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 51, column 1]\n " color=yellow style=filled]
"call_test_class#A#class.cc4e8c6ada1c4f85dad976d179e36c9a_1" [label="1: Start A_call_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 52, column 1]\n " color=yellow style=filled]
"call_test_class#A#class.cc4e8c6ada1c4f85dad976d179e36c9a_1" -> "call_test_class#A#class.cc4e8c6ada1c4f85dad976d179e36c9a_3" ;
"call_test_class#A#class.cc4e8c6ada1c4f85dad976d179e36c9a_2" [label="2: Exit A_call_test_class \n " color=yellow style=filled]
"call_test_class#A#class.cc4e8c6ada1c4f85dad976d179e36c9a_3" [label="3: Message Call: test_class \n n$4=_fun_C_test_class() [line 52, column 3]\n " shape="box"]
"call_test_class#A#class.cc4e8c6ada1c4f85dad976d179e36c9a_3" [label="3: Message Call: test_class \n n$4=_fun_C_test_class() [line 53, column 3]\n " shape="box"]
"call_test_class#A#class.cc4e8c6ada1c4f85dad976d179e36c9a_3" -> "call_test_class#A#class.cc4e8c6ada1c4f85dad976d179e36c9a_2" ;
"calling_super#A#class.0edc1d1d1c4ade7cd9adaa77e7322ad1_1" [label="1: Start A_calling_super\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 80, column 1]\n " color=yellow style=filled]
"calling_super#A#class.0edc1d1d1c4ade7cd9adaa77e7322ad1_1" [label="1: Start A_calling_super\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 81, column 1]\n " color=yellow style=filled]
"calling_super#A#class.0edc1d1d1c4ade7cd9adaa77e7322ad1_1" -> "calling_super#A#class.0edc1d1d1c4ade7cd9adaa77e7322ad1_3" ;
"calling_super#A#class.0edc1d1d1c4ade7cd9adaa77e7322ad1_2" [label="2: Exit A_calling_super \n " color=yellow style=filled]
"calling_super#A#class.0edc1d1d1c4ade7cd9adaa77e7322ad1_3" [label="3: Message Call: test_class \n n$18=_fun_C_test_class() [line 81, column 3]\n " shape="box"]
"calling_super#A#class.0edc1d1d1c4ade7cd9adaa77e7322ad1_3" [label="3: Message Call: test_class \n n$18=_fun_C_test_class() [line 82, column 3]\n " shape="box"]
"calling_super#A#class.0edc1d1d1c4ade7cd9adaa77e7322ad1_3" -> "calling_super#A#class.0edc1d1d1c4ade7cd9adaa77e7322ad1_2" ;
"test_class#A#class.97324b18f626e66a3c32cec03286eb8d_1" [label="1: Start A_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 48, column 1]\n " color=yellow style=filled]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_1" [label="1: Start A_class_method_fst_arg_of_class_method_inside_instance_method\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$30:NSBundle* stringsBundlePath:NSString* \n DECLARE_LOCALS(&return,&0$?%__sil_tmpSIL_temp_conditional___n$30,&stringsBundlePath); [line 114, column 1]\n " color=yellow style=filled]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_1" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_11" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_2" [label="2: Exit A_class_method_fst_arg_of_class_method_inside_instance_method \n " color=yellow style=filled]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_3" [label="3: Return Stmt \n n$27=*&#GB<codetoanalyze/objc/frontend/self_static/Self.m>$A_class_method_fst_arg_of_class_method_inside_instance_method.bundle:NSBundle* [line 120, column 10]\n *&return:NSBundle*=n$27 [line 120, column 3]\n " shape="box"]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_3" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_2" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_4" [label="4: + \n " ]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_4" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_10" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_5" [label="5: Prune (true branch, boolean exp) \n PRUNE(n$29, true); [line 119, column 12]\n " shape="invhouse"]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_5" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_7" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_6" [label="6: Prune (false branch, boolean exp) \n PRUNE(!n$29, false); [line 119, column 12]\n " shape="invhouse"]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_6" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_8" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_7" [label="7: ConditionalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$30:NSBundle*=n$29 [line 119, column 12]\n " shape="box"]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_7" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_4" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_8" [label="8: ConditionalStmt Branch \n n$31=_fun_NSBundle_mainBundle() [line 119, column 59]\n *&0$?%__sil_tmpSIL_temp_conditional___n$30:NSBundle*=n$31 [line 119, column 12]\n " shape="box"]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_8" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_4" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_9" [label="9: BinaryConditionalStmt Init \n n$28=*&stringsBundlePath:NSString* [line 119, column 37]\n n$29=_fun_NSBundle_bundleWithPath:(n$28:NSString*) [line 119, column 12]\n " shape="box"]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_9" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_5" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_9" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_6" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_10" [label="10: BinaryOperatorStmt: Assign \n n$32=*&0$?%__sil_tmpSIL_temp_conditional___n$30:NSBundle* [line 119, column 12]\n *&#GB<codetoanalyze/objc/frontend/self_static/Self.m>$A_class_method_fst_arg_of_class_method_inside_instance_method.bundle:NSBundle*=n$32 [line 119, column 3]\n " shape="box"]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_10" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_3" ;
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_11" [label="11: DeclStmt \n n$35=_fun_NSBundle_bundleForClass:(sizeof(t=B):unsigned long) [line 117, column 8]\n n$33=_fun_NSString_stringWithUTF8String:(\"Strings\":char* const ) [line 117, column 60]\n n$34=_fun_NSString_stringWithUTF8String:(\"bundle\":char* const ) [line 118, column 60]\n n$36=_fun_NSBundle_pathForResource:ofType:(n$35:NSBundle*,n$33:NSString*,n$34:NSString*) virtual [line 117, column 7]\n *&stringsBundlePath:NSString*=n$36 [line 116, column 3]\n " shape="box"]
"class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_11" -> "class_method_fst_arg_of_class_method_inside_instance_method#A#class.7bda69c598fb7e024d776cec3122e2a6_9" ;
"test_class#A#class.97324b18f626e66a3c32cec03286eb8d_1" [label="1: Start A_test_class\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 49, column 1]\n " color=yellow style=filled]
"test_class#A#class.97324b18f626e66a3c32cec03286eb8d_1" -> "test_class#A#class.97324b18f626e66a3c32cec03286eb8d_2" ;
"test_class#A#class.97324b18f626e66a3c32cec03286eb8d_2" [label="2: Exit A_test_class \n " color=yellow style=filled]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_1" [label="1: Start A_used_in_binary_op:\nFormals: c:objc_class*\nLocals: \n DECLARE_LOCALS(&return); [line 92, column 1]\n " color=yellow style=filled]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_1" [label="1: Start A_used_in_binary_op:\nFormals: c:objc_class*\nLocals: \n DECLARE_LOCALS(&return); [line 93, column 1]\n " color=yellow style=filled]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_1" -> "used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_5" ;
@ -87,141 +131,152 @@ digraph cfg {
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_4" -> "used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_2" ;
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_5" [label="5: BinaryOperatorStmt: NE \n n$23=*sizeof(t=A):objc_class* [line 93, column 7]\n n$24=*&c:objc_class* [line 93, column 15]\n " shape="box"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_5" [label="5: BinaryOperatorStmt: NE \n n$23=*sizeof(t=A):objc_class* [line 94, column 7]\n n$24=*&c:objc_class* [line 94, column 15]\n " shape="box"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_5" -> "used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_6" ;
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_5" -> "used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_7" ;
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_6" [label="6: Prune (true branch, if) \n PRUNE((n$23 != n$24), true); [line 93, column 7]\n " shape="invhouse"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_6" [label="6: Prune (true branch, if) \n PRUNE((n$23 != n$24), true); [line 94, column 7]\n " shape="invhouse"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_6" -> "used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_8" ;
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_7" [label="7: Prune (false branch, if) \n PRUNE(!(n$23 != n$24), false); [line 93, column 7]\n " shape="invhouse"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_7" [label="7: Prune (false branch, if) \n PRUNE(!(n$23 != n$24), false); [line 94, column 7]\n " shape="invhouse"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_7" -> "used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_9" ;
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_8" [label="8: Return Stmt \n *&return:int=1 [line 94, column 5]\n " shape="box"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_8" [label="8: Return Stmt \n *&return:int=1 [line 95, column 5]\n " shape="box"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_8" -> "used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_2" ;
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_9" [label="9: Return Stmt \n *&return:int=0 [line 96, column 5]\n " shape="box"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_9" [label="9: Return Stmt \n *&return:int=0 [line 97, column 5]\n " shape="box"]
"used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_9" -> "used_in_binary_op:#A(struct objc_class)#class.da9fc6494d494952f5246c6cf4478263_2" ;
"call_alloc_instance#A#instance.70a20314d55f22fb46408deb70d9aabb_1" [label="1: Start A_call_alloc_instance\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 59, column 1]\n " color=yellow style=filled]
"call_alloc_instance#A#instance.70a20314d55f22fb46408deb70d9aabb_1" [label="1: Start A_call_alloc_instance\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 60, column 1]\n " color=yellow style=filled]
"call_alloc_instance#A#instance.70a20314d55f22fb46408deb70d9aabb_1" -> "call_alloc_instance#A#instance.70a20314d55f22fb46408deb70d9aabb_3" ;
"call_alloc_instance#A#instance.70a20314d55f22fb46408deb70d9aabb_2" [label="2: Exit A_call_alloc_instance \n " color=yellow style=filled]
"call_alloc_instance#A#instance.70a20314d55f22fb46408deb70d9aabb_3" [label="3: Call alloc \n n$7=_fun___objc_alloc_no_fail(sizeof(t=A):unsigned long) [line 60, column 3]\n " shape="box"]
"call_alloc_instance#A#instance.70a20314d55f22fb46408deb70d9aabb_3" [label="3: Call alloc \n n$7=_fun___objc_alloc_no_fail(sizeof(t=A):unsigned long) [line 61, column 3]\n " shape="box"]
"call_alloc_instance#A#instance.70a20314d55f22fb46408deb70d9aabb_3" -> "call_alloc_instance#A#instance.70a20314d55f22fb46408deb70d9aabb_2" ;
"call_class_instance#A#instance.eb1ae02cd94582eb1fc7cb426794f9f0_1" [label="1: Start A_call_class_instance\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 63, column 1]\n " color=yellow style=filled]
"call_class_instance#A#instance.eb1ae02cd94582eb1fc7cb426794f9f0_1" [label="1: Start A_call_class_instance\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 64, column 1]\n " color=yellow style=filled]
"call_class_instance#A#instance.eb1ae02cd94582eb1fc7cb426794f9f0_1" -> "call_class_instance#A#instance.eb1ae02cd94582eb1fc7cb426794f9f0_3" ;
"call_class_instance#A#instance.eb1ae02cd94582eb1fc7cb426794f9f0_2" [label="2: Exit A_call_class_instance \n " color=yellow style=filled]
"call_class_instance#A#instance.eb1ae02cd94582eb1fc7cb426794f9f0_3" [label="3: Message Call: test_class \n n$9=_fun_C_test_class() [line 64, column 3]\n " shape="box"]
"call_class_instance#A#instance.eb1ae02cd94582eb1fc7cb426794f9f0_3" [label="3: Message Call: test_class \n n$9=_fun_C_test_class() [line 65, column 3]\n " shape="box"]
"call_class_instance#A#instance.eb1ae02cd94582eb1fc7cb426794f9f0_3" -> "call_class_instance#A#instance.eb1ae02cd94582eb1fc7cb426794f9f0_2" ;
"call_class_instance_with_class_name#A#instance.1baf88c0fb5549c04909fab0bed63c39_1" [label="1: Start A_call_class_instance_with_class_name\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 67, column 1]\n " color=yellow style=filled]
"call_class_instance_with_class_name#A#instance.1baf88c0fb5549c04909fab0bed63c39_1" [label="1: Start A_call_class_instance_with_class_name\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 68, column 1]\n " color=yellow style=filled]
"call_class_instance_with_class_name#A#instance.1baf88c0fb5549c04909fab0bed63c39_1" -> "call_class_instance_with_class_name#A#instance.1baf88c0fb5549c04909fab0bed63c39_3" ;
"call_class_instance_with_class_name#A#instance.1baf88c0fb5549c04909fab0bed63c39_2" [label="2: Exit A_call_class_instance_with_class_name \n " color=yellow style=filled]
"call_class_instance_with_class_name#A#instance.1baf88c0fb5549c04909fab0bed63c39_3" [label="3: Message Call: test_class \n n$10=_fun_A_test_class() [line 68, column 3]\n " shape="box"]
"call_class_instance_with_class_name#A#instance.1baf88c0fb5549c04909fab0bed63c39_3" [label="3: Message Call: test_class \n n$10=_fun_A_test_class() [line 69, column 3]\n " shape="box"]
"call_class_instance_with_class_name#A#instance.1baf88c0fb5549c04909fab0bed63c39_3" -> "call_class_instance_with_class_name#A#instance.1baf88c0fb5549c04909fab0bed63c39_2" ;
"call_test#A#instance.41031d78ab8c6914ebc9851c442cbd4e_1" [label="1: Start A_call_test\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 44, column 1]\n " color=yellow style=filled]
"call_test#A#instance.41031d78ab8c6914ebc9851c442cbd4e_1" [label="1: Start A_call_test\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 45, column 1]\n " color=yellow style=filled]
"call_test#A#instance.41031d78ab8c6914ebc9851c442cbd4e_1" -> "call_test#A#instance.41031d78ab8c6914ebc9851c442cbd4e_3" ;
"call_test#A#instance.41031d78ab8c6914ebc9851c442cbd4e_2" [label="2: Exit A_call_test \n " color=yellow style=filled]
"call_test#A#instance.41031d78ab8c6914ebc9851c442cbd4e_3" [label="3: Message Call: test \n n$1=*&self:A* [line 45, column 4]\n n$2=_fun_A_test(n$1:A*) virtual [line 45, column 3]\n " shape="box"]
"call_test#A#instance.41031d78ab8c6914ebc9851c442cbd4e_3" [label="3: Message Call: test \n n$1=*&self:A* [line 46, column 4]\n n$2=_fun_A_test(n$1:A*) virtual [line 46, column 3]\n " shape="box"]
"call_test#A#instance.41031d78ab8c6914ebc9851c442cbd4e_3" -> "call_test#A#instance.41031d78ab8c6914ebc9851c442cbd4e_2" ;
"init#A#instance.eee79aaaddd644404e17691a7e7d809a_1" [label="1: Start A_init\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 84, column 1]\n " color=yellow style=filled]
"class_method_fst_arg_of_class_method#A#instance.cf9f3087f45649c74ef1f7ca002450f2_1" [label="1: Start A_class_method_fst_arg_of_class_method\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 110, column 1]\n " color=yellow style=filled]
"class_method_fst_arg_of_class_method#A#instance.cf9f3087f45649c74ef1f7ca002450f2_1" -> "class_method_fst_arg_of_class_method#A#instance.cf9f3087f45649c74ef1f7ca002450f2_3" ;
"class_method_fst_arg_of_class_method#A#instance.cf9f3087f45649c74ef1f7ca002450f2_2" [label="2: Exit A_class_method_fst_arg_of_class_method \n " color=yellow style=filled]
"class_method_fst_arg_of_class_method#A#instance.cf9f3087f45649c74ef1f7ca002450f2_3" [label="3: Return Stmt \n n$26=_fun_NSBundle_bundleForClass:(sizeof(t=A):unsigned long) [line 111, column 10]\n *&return:NSBundle*=n$26 [line 111, column 3]\n " shape="box"]
"class_method_fst_arg_of_class_method#A#instance.cf9f3087f45649c74ef1f7ca002450f2_3" -> "class_method_fst_arg_of_class_method#A#instance.cf9f3087f45649c74ef1f7ca002450f2_2" ;
"init#A#instance.eee79aaaddd644404e17691a7e7d809a_1" [label="1: Start A_init\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 85, column 1]\n " color=yellow style=filled]
"init#A#instance.eee79aaaddd644404e17691a7e7d809a_1" -> "init#A#instance.eee79aaaddd644404e17691a7e7d809a_3" ;
"init#A#instance.eee79aaaddd644404e17691a7e7d809a_2" [label="2: Exit A_init \n " color=yellow style=filled]
"init#A#instance.eee79aaaddd644404e17691a7e7d809a_3" [label="3: Message Call: init \n n$19=*&self:A* [line 85, column 3]\n n$20=_fun_NSObject_init(n$19:A*) [line 85, column 3]\n " shape="box"]
"init#A#instance.eee79aaaddd644404e17691a7e7d809a_3" [label="3: Message Call: init \n n$19=*&self:A* [line 86, column 3]\n n$20=_fun_NSObject_init(n$19:A*) [line 86, column 3]\n " shape="box"]
"init#A#instance.eee79aaaddd644404e17691a7e7d809a_3" -> "init#A#instance.eee79aaaddd644404e17691a7e7d809a_2" ;
"loggerName#A#instance.36b9a42412bcf7d8d3f8397eb2bcb555_1" [label="1: Start A_loggerName\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 88, column 1]\n " color=yellow style=filled]
"loggerName#A#instance.36b9a42412bcf7d8d3f8397eb2bcb555_1" [label="1: Start A_loggerName\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 89, column 1]\n " color=yellow style=filled]
"loggerName#A#instance.36b9a42412bcf7d8d3f8397eb2bcb555_1" -> "loggerName#A#instance.36b9a42412bcf7d8d3f8397eb2bcb555_3" ;
"loggerName#A#instance.36b9a42412bcf7d8d3f8397eb2bcb555_2" [label="2: Exit A_loggerName \n " color=yellow style=filled]
"loggerName#A#instance.36b9a42412bcf7d8d3f8397eb2bcb555_3" [label="3: Return Stmt \n n$22=_fun_NSStringFromClass(sizeof(t=A):unsigned long) [line 89, column 10]\n *&return:NSString*=n$22 [line 89, column 3]\n " shape="box"]
"loggerName#A#instance.36b9a42412bcf7d8d3f8397eb2bcb555_3" [label="3: Return Stmt \n n$22=_fun_NSStringFromClass(sizeof(t=A):unsigned long) [line 90, column 10]\n *&return:NSString*=n$22 [line 90, column 3]\n " shape="box"]
"loggerName#A#instance.36b9a42412bcf7d8d3f8397eb2bcb555_3" -> "loggerName#A#instance.36b9a42412bcf7d8d3f8397eb2bcb555_2" ;
"t#A#instance.e31b9a7bced712626784e2860af1a31b_1" [label="1: Start A_t\nFormals: self:A*\nLocals: b:B* \n DECLARE_LOCALS(&return,&b); [line 71, column 1]\n " color=yellow style=filled]
"t#A#instance.e31b9a7bced712626784e2860af1a31b_1" [label="1: Start A_t\nFormals: self:A*\nLocals: b:B* \n DECLARE_LOCALS(&return,&b); [line 72, column 1]\n " color=yellow style=filled]
"t#A#instance.e31b9a7bced712626784e2860af1a31b_1" -> "t#A#instance.e31b9a7bced712626784e2860af1a31b_4" ;
"t#A#instance.e31b9a7bced712626784e2860af1a31b_2" [label="2: Exit A_t \n " color=yellow style=filled]
"t#A#instance.e31b9a7bced712626784e2860af1a31b_3" [label="3: Message Call: b_m \n n$12=_fun_B_b_m() [line 73, column 3]\n " shape="box"]
"t#A#instance.e31b9a7bced712626784e2860af1a31b_3" [label="3: Message Call: b_m \n n$12=_fun_B_b_m() [line 74, column 3]\n " shape="box"]
"t#A#instance.e31b9a7bced712626784e2860af1a31b_3" -> "t#A#instance.e31b9a7bced712626784e2860af1a31b_2" ;
"t#A#instance.e31b9a7bced712626784e2860af1a31b_4" [label="4: DeclStmt \n n$13=_fun___objc_alloc_no_fail(sizeof(t=B):unsigned long) [line 72, column 10]\n n$14=_fun_NSObject_init(n$13:B*) virtual [line 72, column 10]\n *&b:B*=n$14 [line 72, column 3]\n " shape="box"]
"t#A#instance.e31b9a7bced712626784e2860af1a31b_4" [label="4: DeclStmt \n n$13=_fun___objc_alloc_no_fail(sizeof(t=B):unsigned long) [line 73, column 10]\n n$14=_fun_NSObject_init(n$13:B*) virtual [line 73, column 10]\n *&b:B*=n$14 [line 73, column 3]\n " shape="box"]
"t#A#instance.e31b9a7bced712626784e2860af1a31b_4" -> "t#A#instance.e31b9a7bced712626784e2860af1a31b_3" ;
"test#A#instance.561395dd5ffb844cbbb6c52cf21ce047_1" [label="1: Start A_test\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 41, column 1]\n " color=yellow style=filled]
"test#A#instance.561395dd5ffb844cbbb6c52cf21ce047_1" [label="1: Start A_test\nFormals: self:A*\nLocals: \n DECLARE_LOCALS(&return); [line 42, column 1]\n " color=yellow style=filled]
"test#A#instance.561395dd5ffb844cbbb6c52cf21ce047_1" -> "test#A#instance.561395dd5ffb844cbbb6c52cf21ce047_2" ;
"test#A#instance.561395dd5ffb844cbbb6c52cf21ce047_2" [label="2: Exit A_test \n " color=yellow style=filled]
"use_class_in_other_ways:#A(class B)#instance.7a96604c2c855db834d214f72f83a306_1" [label="1: Start A_use_class_in_other_ways:\nFormals: self:A* object:B*\nLocals: \n DECLARE_LOCALS(&return); [line 76, column 1]\n " color=yellow style=filled]
"use_class_in_other_ways:#A(class B)#instance.7a96604c2c855db834d214f72f83a306_1" [label="1: Start A_use_class_in_other_ways:\nFormals: self:A* object:B*\nLocals: \n DECLARE_LOCALS(&return); [line 77, column 1]\n " color=yellow style=filled]
"use_class_in_other_ways:#A(class B)#instance.7a96604c2c855db834d214f72f83a306_1" -> "use_class_in_other_ways:#A(class B)#instance.7a96604c2c855db834d214f72f83a306_3" ;
"use_class_in_other_ways:#A(class B)#instance.7a96604c2c855db834d214f72f83a306_2" [label="2: Exit A_use_class_in_other_ways: \n " color=yellow style=filled]
"use_class_in_other_ways:#A(class B)#instance.7a96604c2c855db834d214f72f83a306_3" [label="3: Return Stmt \n n$16=*&object:B* [line 77, column 11]\n n$17=_fun_B_isC:(n$16:B*,sizeof(t=A):unsigned long) virtual [line 77, column 10]\n *&return:_Bool=n$17 [line 77, column 3]\n " shape="box"]
"use_class_in_other_ways:#A(class B)#instance.7a96604c2c855db834d214f72f83a306_3" [label="3: Return Stmt \n n$16=*&object:B* [line 78, column 11]\n n$17=_fun_B_isC:(n$16:B*,sizeof(t=A):unsigned long) virtual [line 78, column 10]\n *&return:_Bool=n$17 [line 78, column 3]\n " shape="box"]
"use_class_in_other_ways:#A(class B)#instance.7a96604c2c855db834d214f72f83a306_3" -> "use_class_in_other_ways:#A(class B)#instance.7a96604c2c855db834d214f72f83a306_2" ;
"b_m#B#class.82af96ad418803b2f96fc1bfa1572c10_1" [label="1: Start B_b_m\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 18, column 1]\n " color=yellow style=filled]
"b_m#B#class.82af96ad418803b2f96fc1bfa1572c10_1" [label="1: Start B_b_m\nFormals: \nLocals: \n DECLARE_LOCALS(&return); [line 19, column 1]\n " color=yellow style=filled]
"b_m#B#class.82af96ad418803b2f96fc1bfa1572c10_1" -> "b_m#B#class.82af96ad418803b2f96fc1bfa1572c10_2" ;
"b_m#B#class.82af96ad418803b2f96fc1bfa1572c10_2" [label="2: Exit B_b_m \n " color=yellow style=filled]
"isC:#B(struct objc_class)#instance.ab14fb7a19510df6032d65aa27b0f12d_1" [label="1: Start B_isC:\nFormals: self:B* aClass:objc_class*\nLocals: \n DECLARE_LOCALS(&return); [line 21, column 1]\n " color=yellow style=filled]
"isC:#B(struct objc_class)#instance.ab14fb7a19510df6032d65aa27b0f12d_1" [label="1: Start B_isC:\nFormals: self:B* aClass:objc_class*\nLocals: \n DECLARE_LOCALS(&return); [line 22, column 1]\n " color=yellow style=filled]
"isC:#B(struct objc_class)#instance.ab14fb7a19510df6032d65aa27b0f12d_1" -> "isC:#B(struct objc_class)#instance.ab14fb7a19510df6032d65aa27b0f12d_3" ;
"isC:#B(struct objc_class)#instance.ab14fb7a19510df6032d65aa27b0f12d_2" [label="2: Exit B_isC: \n " color=yellow style=filled]
"isC:#B(struct objc_class)#instance.ab14fb7a19510df6032d65aa27b0f12d_3" [label="3: Return Stmt \n *&return:_Bool=1 [line 22, column 3]\n " shape="box"]
"isC:#B(struct objc_class)#instance.ab14fb7a19510df6032d65aa27b0f12d_3" [label="3: Return Stmt \n *&return:_Bool=1 [line 23, column 3]\n " shape="box"]
"isC:#B(struct objc_class)#instance.ab14fb7a19510df6032d65aa27b0f12d_3" -> "isC:#B(struct objc_class)#instance.ab14fb7a19510df6032d65aa27b0f12d_2" ;

Loading…
Cancel
Save