@@ -5,9 +5,11 @@ use crate::model::definitions::Definition;
55use crate :: model:: document:: Document ;
66use crate :: model:: graph:: NameDependent ;
77use crate :: model:: identity_maps:: IdentityHashMap ;
8- use crate :: model:: ids:: { ConstantReferenceId , DefinitionId , MethodReferenceId , NameId , StringId , UriId } ;
8+ use crate :: model:: ids:: {
9+ ConstantReferenceId , DefinitionId , InstanceVariableReferenceId , MethodReferenceId , NameId , StringId , UriId ,
10+ } ;
911use crate :: model:: name:: { Name , NameRef } ;
10- use crate :: model:: references:: { ConstantReference , MethodRef } ;
12+ use crate :: model:: references:: { ConstantReference , InstanceVariableRef , MethodRef } ;
1113use crate :: model:: string_ref:: StringRef ;
1214use crate :: offset:: Offset ;
1315
@@ -19,6 +21,7 @@ type LocalGraphParts = (
1921 IdentityHashMap < NameId , NameRef > ,
2022 IdentityHashMap < ConstantReferenceId , ConstantReference > ,
2123 IdentityHashMap < MethodReferenceId , MethodRef > ,
24+ IdentityHashMap < InstanceVariableReferenceId , InstanceVariableRef > ,
2225 IdentityHashMap < NameId , Vec < NameDependent > > ,
2326) ;
2427
@@ -31,6 +34,7 @@ pub struct LocalGraph {
3134 names : IdentityHashMap < NameId , NameRef > ,
3235 constant_references : IdentityHashMap < ConstantReferenceId , ConstantReference > ,
3336 method_references : IdentityHashMap < MethodReferenceId , MethodRef > ,
37+ instance_variable_references : IdentityHashMap < InstanceVariableReferenceId , InstanceVariableRef > ,
3438 name_dependents : IdentityHashMap < NameId , Vec < NameDependent > > ,
3539}
3640
@@ -45,6 +49,7 @@ impl LocalGraph {
4549 names : IdentityHashMap :: default ( ) ,
4650 constant_references : IdentityHashMap :: default ( ) ,
4751 method_references : IdentityHashMap :: default ( ) ,
52+ instance_variable_references : IdentityHashMap :: default ( ) ,
4853 name_dependents : IdentityHashMap :: default ( ) ,
4954 }
5055 }
@@ -187,6 +192,28 @@ impl LocalGraph {
187192 reference_id
188193 }
189194
195+ // Instance variable references
196+
197+ #[ must_use]
198+ pub fn instance_variable_references ( & self ) -> & IdentityHashMap < InstanceVariableReferenceId , InstanceVariableRef > {
199+ & self . instance_variable_references
200+ }
201+
202+ pub fn add_instance_variable_reference ( & mut self , reference : InstanceVariableRef ) -> InstanceVariableReferenceId {
203+ let reference_id = reference. id ( ) ;
204+
205+ if self
206+ . instance_variable_references
207+ . insert ( reference_id, reference)
208+ . is_some ( )
209+ {
210+ debug_assert ! ( false , "InstanceVariableReferenceId collision in local graph" ) ;
211+ }
212+
213+ self . document . add_instance_variable_reference ( reference_id) ;
214+ reference_id
215+ }
216+
190217 // Diagnostics
191218
192219 #[ must_use]
@@ -218,6 +245,7 @@ impl LocalGraph {
218245 self . names ,
219246 self . constant_references ,
220247 self . method_references ,
248+ self . instance_variable_references ,
221249 self . name_dependents ,
222250 )
223251 }
0 commit comments