@@ -5,10 +5,21 @@ def initialize(genv)
55 end
66
77 def class_new ( changes , node , ty , a_args , ret )
8- ty = ty . get_instance_type ( @genv )
9- recv = Source . new ( ty )
10- changes . add_method_call_box ( @genv , recv , :initialize , a_args , false )
11- changes . add_edge ( @genv , Source . new ( ty ) , ret )
8+ if ty . is_a? ( Type ::Singleton )
9+ ty = ty . get_instance_type ( @genv )
10+ recv = Source . new ( ty )
11+ changes . add_method_call_box ( @genv , recv , :initialize , a_args , false )
12+ changes . add_edge ( @genv , Source . new ( ty ) , ret )
13+ end
14+ true
15+ end
16+
17+ def object_class ( changes , node , ty , a_args , ret )
18+ ty = ty . base_type ( @genv )
19+ mod = ty . is_a? ( Type ::Instance ) ? ty . mod : @genv . mod_class
20+ ty = Type ::Singleton . new ( @genv , mod )
21+ vtx = Source . new ( ty )
22+ changes . add_edge ( @genv , vtx , ret )
1223 true
1324 end
1425
@@ -119,6 +130,7 @@ def hash_aset(changes, node, ty, a_args, ret)
119130 def deploy
120131 {
121132 class_new : [ [ :Class ] , false , :new ] ,
133+ object_class : [ [ :Object ] , false , :class ] ,
122134 proc_call : [ [ :Proc ] , false , :call ] ,
123135 array_aref : [ [ :Array ] , false , :[] ] ,
124136 array_aset : [ [ :Array ] , false , :[]= ] ,
0 commit comments