Exemplo n.º 1
0
        private static IPhpValue Try_UseExpressionAttribute(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            var ats = src.MethodInfo.GetCustomAttribute <UseBinaryExpressionAttribute>(true);

            if (ats == null)
            {
                return(null);
            }
            IPhpValue l, r;
            var       re = new Regex("^\\s*\\$(\\d+)\\s*$");
            var       m  = re.Match(ats.Left);

            if (m.Success)
            {
                l = ctx.TranslateValue(src.Arguments[int.Parse(m.Groups[1].Value)].MyValue);
            }
            else
            {
                l = PhpValueTranslator.GetValueForExpression(null, ats.Left);
            }

            m = re.Match(ats.Right);
            if (m.Success)
            {
                r = ctx.TranslateValue(src.Arguments[int.Parse(m.Groups[1].Value)].MyValue);
            }
            else
            {
                r = PhpValueTranslator.GetValueForExpression(null, ats.Right);
            }
            var method = new PhpBinaryOperatorExpression(ats.Operator, l, r);

            return(method);
        }