Esempio n. 1
0
 protected virtual void _Generate(AstNodeExprArrayAccess arrayAccess)
 {
     Generate(arrayAccess.ArrayInstance);
     Output.Write("[");
     Generate(arrayAccess.Index);
     Output.Write("]");
 }
        protected virtual void _Generate(AstNodeExprArrayAccess arrayAccess)
        {
            Generate(arrayAccess.ArrayInstance);
            Generate(arrayAccess.Index);

            if (arrayAccess.ElementType == typeof(byte))
            {
                Emit(OpCodes.Ldelem_U1);
                return;
            }

            if (arrayAccess.ElementType == typeof(ushort))
            {
                Emit(OpCodes.Ldelem_U2);
                return;
            }

            if (arrayAccess.ElementType == typeof(uint))
            {
                Emit(OpCodes.Ldelem_U4);
                return;
            }
            if (arrayAccess.ElementType == typeof(ulong))
            {
                Emit(OpCodes.Ldelem_I8);
                return;
            }

            if (arrayAccess.ElementType == typeof(sbyte))
            {
                Emit(OpCodes.Ldelem_I1);
                return;
            }

            if (arrayAccess.ElementType == typeof(short))
            {
                Emit(OpCodes.Ldelem_I2);
                return;
            }
            if (arrayAccess.ElementType == typeof(int))
            {
                Emit(OpCodes.Ldelem_I4);
                return;
            }
            if (arrayAccess.ElementType == typeof(long))
            {
                Emit(OpCodes.Ldelem_I8);
                return;
            }

            if (arrayAccess.ElementType.IsPointer)
            {
                Emit(OpCodes.Ldelem_I);
                return;
            }

            Emit(OpCodes.Ldelem_Ref);
        }