protected virtual void _visit( JsPostUnaryExpression node )
 {
     throw new NotImplementedException( "JsPostUnaryExpression" );
 }
 protected override void _visit(JsPostUnaryExpression node)
 {
     if (node != null)
     {
         visit(node.Left);
     }
 }
        private JsNode Unary(OperatorResolveResult res)
        {
            if (res.UserDefinedOperatorMethod != null && !Sk.UseNativeOperatorOverloads(res.UserDefinedOperatorMethod.DeclaringTypeDefinition))
            {
                var fake = Cs.InvokeMethod(res.UserDefinedOperatorMethod, null, res.Operands[0]);
                return Visit(fake);
            }

            var isProperty = false;
            var meRes = res.Operands[0] as MemberResolveResult;
            if (meRes != null && meRes.Member != null && IsEntityFunctionProperty(meRes.Member, res))
                isProperty = true;

            JsExpression node2;
            if (res.OperatorType.IsAny(ExpressionType.Negate, ExpressionType.PreDecrementAssign, ExpressionType.PreIncrementAssign, ExpressionType.Not, ExpressionType.OnesComplement))
            {
                var simpler = res.OperatorType.ExtractCompoundAssignment();
                if (isProperty && simpler != null)
                {
                    var fakeCs = meRes.ShallowClone().Binary(simpler.Value, Cs.Value(1, Project), meRes.Type);
                    node2 = VisitExpression(fakeCs);
                }
                else
                {
                    node2 = new JsPreUnaryExpression { Operator = Visit(res.OperatorType), Right = VisitExpression(res.Operands[0]) };
                }
            }
            else if (res.OperatorType.IsAny(ExpressionType.PostIncrementAssign, ExpressionType.PostDecrementAssign, ExpressionType.PreIncrementAssign, ExpressionType.PreDecrementAssign))
            {
                if (isProperty)
                {
                    var simpler = res.OperatorType.ExtractCompoundAssignment();
                    var fakeCs = meRes.ShallowClone().Binary(simpler.Value, Cs.Value(1, Project), meRes.Type);
                    node2 = VisitExpression(fakeCs);

                }
                else
                {
                    node2 = new JsPostUnaryExpression { Operator = Visit(res.OperatorType), Left = VisitExpression(res.Operands[0]) };
                }
            }
            else
            {
                throw new NotImplementedException();
            }
            return node2;
        }
Example #4
0
 void _Visit(JsPostUnaryExpression node)
 {
     Visit(node.Left);
     Control(node.Operator);
 }