Beispiel #1
0
        override public void LeaveMemberReferenceExpression(MemberReferenceExpression node)
        {
            if (!TypeSystemServices.IsQuackBuiltin(node))
            {
                return;
            }

            if (node.IsTargetOfAssignment() ||
                AstUtil.IsTargetOfSlicing(node))
            {
                return;
            }

            MethodInvocationExpression mie = CodeBuilder.CreateMethodInvocation(
                node.LexicalInfo,
                GetGetPropertyMethod(),
                node.Target,
                CodeBuilder.CreateStringLiteral(node.Name));

            Replace(mie);
        }
Beispiel #2
0
        public override void LeaveMemberReferenceExpression(MemberReferenceExpression node)
        {
            var property = node.Entity as IProperty;

            if (property == null || node.IsTargetOfAssignment())
            {
                return;
            }

            var getter = CodeBuilder.CreatePropertyGet(node.Target, property);

            // preserve duck typing...
            if (property.IsDuckTyped)
            {
                ReplaceCurrentNode(
                    CodeBuilder.CreateCast(
                        TypeSystemServices.DuckType, getter));
            }
            else
            {
                ReplaceCurrentNode(getter);
            }
        }