@@ -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 , InstanceVariableReference , 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 , InstanceVariableReference > ,
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 , InstanceVariableReference > ,
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,27 @@ impl LocalGraph {
187192 reference_id
188193 }
189194
195+ // Instance variable references
196+
197+ #[ must_use]
198+ pub fn instance_variable_references (
199+ & self ,
200+ ) -> & IdentityHashMap < InstanceVariableReferenceId , InstanceVariableReference > {
201+ & self . instance_variable_references
202+ }
203+
204+ pub fn add_instance_variable_reference ( & mut self , reference : InstanceVariableRef ) -> InstanceVariableReferenceId {
205+ let reference_id = reference. id ( ) ;
206+ let entry = InstanceVariableReference :: Unresolved ( Box :: new ( reference) ) ;
207+
208+ if self . instance_variable_references . insert ( reference_id, entry) . is_some ( ) {
209+ debug_assert ! ( false , "InstanceVariableReferenceId collision in local graph" ) ;
210+ }
211+
212+ self . document . add_instance_variable_reference ( reference_id) ;
213+ reference_id
214+ }
215+
190216 // Diagnostics
191217
192218 #[ must_use]
@@ -218,6 +244,7 @@ impl LocalGraph {
218244 self . names ,
219245 self . constant_references ,
220246 self . method_references ,
247+ self . instance_variable_references ,
221248 self . name_dependents ,
222249 )
223250 }
0 commit comments