/// <exception cref="VariantException"></exception>
        public static void DoVariantOperation(int op, Variant target, Variant param)
        {
            switch (op)
            {
            case OP_BAND:
            {
                target.AndEqual(param);
                return;
            }

            case OP_BOR:
            {
                target.OrEqual(param);
                return;
            }

            case OP_BXOR:
            {
                target.BitXorEqual(param);
                return;
            }

            case OP_SUB:
            {
                target.SubtractEqual(param);
                return;
            }

            case OP_ADD:
            {
                target.AddEqual(param);
                return;
            }

            case OP_MOD:
            {
                target.ResidueEqual(param);
                return;
            }

            case OP_DIV:
            {
                target.DivideEqual(param);
                return;
            }

            case OP_IDIV:
            {
                target.Idivequal(param);
                return;
            }

            case OP_MUL:
            {
                target.MultiplyEqual(param);
                return;
            }

            case OP_LOR:
            {
                target.Logicalorequal(param);
                return;
            }

            case OP_LAND:
            {
                target.Logicalandequal(param);
                return;
            }

            case OP_SAR:
            {
                target.RightShiftEqual(param);
                return;
            }

            case OP_SAL:
            {
                target.LeftShiftEqual(param);
                return;
            }

            case OP_SR:
            {
                target.Rbitshiftequal(param);
                return;
            }

            case OP_INC:
            {
                target.Increment();
                return;
            }

            case OP_DEC:
            {
                target.Decrement();
                return;
            }
            }
        }