Example #1
0
 public MethodDesc GetArrayMethod(ArrayMethodKind kind)
 {
     if (_methods == null)
     {
         InitializeMethods();
     }
     return(_methods[(int)kind]);
 }
Example #2
0
        /// <summary>
        /// lazily fetches or creates a new array method.
        /// </summary>
        private ArrayMethod GetArrayMethod(Cci.IArrayTypeReference arrayType, ArrayMethodKind id)
        {
            var         key = ValueTuple.Create((byte)id, arrayType);
            ArrayMethod result;

            var dict = _dict;

            if (!dict.TryGetValue(key, out result))
            {
                result = MakeArrayMethod(arrayType, id);
                result = dict.GetOrAdd(key, result);
            }

            return(result);
        }
Example #3
0
        private static ArrayMethod MakeArrayMethod(IArrayTypeReference arrayType, ArrayMethodKind id)
        {
            switch (id)
            {
            case ArrayMethodKind.CTOR:
                return(new ArrayConstructor(arrayType));

            case ArrayMethodKind.GET:
                return(new ArrayGet(arrayType));

            case ArrayMethodKind.SET:
                return(new ArraySet(arrayType));

            case ArrayMethodKind.ADDRESS:
                return(new ArrayAddress(arrayType));
            }

            throw ExceptionUtilities.UnexpectedValue(id);
        }
Example #4
0
        /// <summary>
        /// lazily fetches or creates a new array method.
        /// </summary>
        private ArrayMethod GetArrayMethod(IArrayTypeReference arrayType, ArrayMethodKind id)
        {
            var         key = new KeyValuePair <byte, IArrayTypeReference>((byte)id, arrayType);
            ArrayMethod result;

            var dict = _dict;

            if (!dict.TryGetValue(key, out result))
            {
                result = MakeArrayMethod(arrayType, id);
                if (dict.ContainsKey(key))
                {
                    result = dict[key];
                }
                else
                {
                    dict.Add(key, result);
                }
            }

            return(result);
        }
Example #5
0
 public MethodDesc GetArrayMethod(ArrayMethodKind kind)
 {
     if (_methods == null)
         InitializeMethods();
     return _methods[(int)kind];
 }
Example #6
0
 internal ArrayMethod(ArrayType owningType, ArrayMethodKind kind)
 {
     _owningType = owningType;
     _kind = kind;
 }
Example #7
0
 internal ArrayMethod(ArrayType owningType, ArrayMethodKind kind)
 {
     _owningType = owningType;
     _kind       = kind;
 }
Example #8
0
        private static ArrayMethod MakeArrayMethod(Cci.IArrayTypeReference arrayType, ArrayMethodKind id)
        {
            switch (id)
            {
                case ArrayMethodKind.CTOR:
                    return new ArrayConstructor(arrayType);

                case ArrayMethodKind.GET:
                    return new ArrayGet(arrayType);

                case ArrayMethodKind.SET:
                    return new ArraySet(arrayType);

                case ArrayMethodKind.ADDRESS:
                    return new ArrayAddress(arrayType);
            }

            throw ExceptionUtilities.UnexpectedValue(id);
        }
Example #9
0
        /// <summary>
        /// lazily fetches or creates a new array method.
        /// </summary>
        private ArrayMethod GetArrayMethod(Cci.IArrayTypeReference arrayType, ArrayMethodKind id)
        {
            var key = ValueTuple.Create((byte)id, arrayType);
            ArrayMethod result;

            var dict = _dict;
            if (!dict.TryGetValue(key, out result))
            {
                result = MakeArrayMethod(arrayType, id);
                result = dict.GetOrAdd(key, result);
            }

            return result;
        }