Exemple #1
0
        /// <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
            });
        }
Exemple #2
0
        /// <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
            });
        }