public override Value EmitSet(EmitContext context, BoundExpression valueExpression)
        {
            BoundExpression instanceValue = GetInstanceExpression(context);

            BoundInvocationExpression invocationExpression = BoundInvocationExpression.CreateBoundInvocation(context, SyntaxNode,
                                                                                                             Property.SetMethod,
                                                                                                             instanceValue, GetParameters(context, valueExpression));

            if (_isBaseCall)
            {
                invocationExpression.MarkForcedBaseCall();
            }

            invocationExpression.MarkPropertySetter();

            Value resultVal = context.EmitValue(invocationExpression);

            if (resultVal == null)
            {
                throw new NullReferenceException();
            }

            if (instanceValue != null &&
                SourceExpression.ValueType.IsValueType &&
                SourceExpression is BoundArrayAccessExpression sourceAccessExpression)
            {
                context.EmitSet(sourceAccessExpression, instanceValue);
            }

            return(resultVal);
        }
        public override Value EmitValue(EmitContext context)
        {
            BoundInvocationExpression invocationExpression = BoundInvocationExpression.CreateBoundInvocation(context, SyntaxNode,
                                                                                                             Property.GetMethod,
                                                                                                             GetInstanceExpression(context), GetParameters(context));

            if (_isBaseCall)
            {
                invocationExpression.MarkForcedBaseCall();
            }

            return(context.EmitValue(invocationExpression));
        }