/// <summary> /// Gets index of variable within the context. /// </summary> public VariableHandle GetVarIndex(VariableName name) { Debug.Assert(name.IsValid()); // TODO: RW lock int index; if (!_varsIndex.TryGetValue(name, out index)) { lock (_varsIndex) { index = _varsType.Length; Array.Resize(ref _varsType, index + 1); // _varsIndex[name] = index; } } // return(new VariableHandle() { Slot = index, Name = name }); }
/// <summary> /// Gets index of variable within the context. /// </summary> public VariableHandle GetVarIndex(VariableName name) { Debug.Assert(name.IsValid()); if (_varsIndex.TryGetValue(name, out var index) == false) { lock (_varsIndex) // exclusive lock needed, ConcurrentDictionary does not lock the value factory { index = _varsType.Length; Array.Resize(ref _varsType, index + 1); // _varsIndex[name] = index; } } // return(new VariableHandle() { Slot = index, Name = name }); }