@@ -82,7 +82,7 @@ def tapp_subst(name, args)
8282 AST ::TypeParam . application ( params , args ) || Substitution . new ( )
8383 end
8484
85- def define_instance ( definition , type_name , subst )
85+ def define_instance ( definition , type_name , subst , define_class_vars : )
8686 one_ancestors = ancestor_builder . one_instance_ancestors ( type_name )
8787 methods = method_builder . build_instance ( type_name )
8888
@@ -104,7 +104,7 @@ def define_instance(definition, type_name, subst)
104104 validate_type_presence ( arg )
105105 end
106106
107- define_instance ( definition , mod . name , subst + tapp_subst ( mod . name , mod . args ) )
107+ define_instance ( definition , mod . name , subst + tapp_subst ( mod . name , mod . args ) , define_class_vars : define_class_vars )
108108 end
109109
110110 all_interfaces = one_ancestors . each_included_interface . flat_map do |interface |
@@ -120,7 +120,7 @@ def define_instance(definition, type_name, subst)
120120 validate_type_presence ( arg )
121121 end
122122
123- define_instance ( definition , mod . name , subst + tapp_subst ( mod . name , mod . args ) )
123+ define_instance ( definition , mod . name , subst + tapp_subst ( mod . name , mod . args ) , define_class_vars : define_class_vars )
124124 end
125125
126126 entry = env . class_decls [ type_name ] or raise "Unknown name for build_instance: #{ type_name } "
@@ -161,7 +161,9 @@ def define_instance(definition, type_name, subst)
161161 )
162162
163163 when AST ::Members ::ClassVariable
164- insert_variable ( type_name , definition . class_variables , name : member . name , type : member . type , source : member )
164+ if define_class_vars
165+ insert_variable ( type_name , definition . class_variables , name : member . name , type : member . type , source : member )
166+ end
165167 end
166168 end
167169 end
@@ -216,13 +218,13 @@ def build_instance(type_name)
216218 if ans . name . interface?
217219 define_interface ( definition , ans . name , subst )
218220 else
219- define_instance ( definition , ans . name , subst )
221+ define_instance ( definition , ans . name , subst , define_class_vars : true )
220222 end
221223 end
222224 end
223225 end
224226
225- define_instance ( definition , type_name , Substitution . new )
227+ define_instance ( definition , type_name , Substitution . new , define_class_vars : true )
226228 end
227229 end
228230 end
@@ -251,7 +253,6 @@ def build_singleton0(type_name)
251253
252254 definition . methods . merge! ( defn . methods )
253255 definition . instance_variables . merge! ( defn . instance_variables )
254- definition . class_variables . merge! ( defn . class_variables )
255256 end
256257
257258 one_ancestors . each_extended_module do |mod |
@@ -260,7 +261,7 @@ def build_singleton0(type_name)
260261 end
261262
262263 subst = tapp_subst ( mod . name , mod . args )
263- define_instance ( definition , mod . name , subst )
264+ define_instance ( definition , mod . name , subst , define_class_vars : false )
264265 end
265266
266267 all_interfaces = one_ancestors . each_extended_interface . flat_map do |interface |
@@ -290,12 +291,12 @@ def build_singleton0(type_name)
290291
291292 when AST ::Members ::ClassInstanceVariable
292293 insert_variable ( type_name , definition . instance_variables , name : member . name , type : member . type , source : member )
293-
294- when AST ::Members ::ClassVariable
295- insert_variable ( type_name , definition . class_variables , name : member . name , type : member . type , source : member )
296294 end
297295 end
298296 end
297+
298+ instance_definition = build_instance ( type_name )
299+ definition . class_variables . replace ( instance_definition . class_variables )
299300 end
300301 end
301302 end
0 commit comments