public override object Visit(AssignmentExpression assignmentExpression, object data)
        {
            if (assignmentExpression.Op == AssignmentOperatorType.Add) {

                methodReference = true;
                CodeExpression methodInvoker = (CodeExpression)assignmentExpression.Right.AcceptVisitor(this, null);
                methodReference = false;

                if (assignmentExpression.Left is IdentifierExpression)
                {
                    AddStmt(new CodeAttachEventStatement(new CodeEventReferenceExpression(new CodeThisReferenceExpression(), ((IdentifierExpression)assignmentExpression.Left).Identifier),
                                                                              methodInvoker));
                } else {
                    FieldReferenceExpression fr = (FieldReferenceExpression)assignmentExpression.Left;

                    AddStmt(new CodeAttachEventStatement(new CodeEventReferenceExpression((CodeExpression)fr.TargetObject.AcceptVisitor(this, data), fr.FieldName),
                                                                              methodInvoker));
                }
            } else {
                if (assignmentExpression.Left is IdentifierExpression) {
                    AddStmt(new CodeAssignStatement((CodeExpression)assignmentExpression.Left.AcceptVisitor(this, null), (CodeExpression)assignmentExpression.Right.AcceptVisitor(this, null)));
                } else {
                    AddStmt(new CodeAssignStatement((CodeExpression)assignmentExpression.Left.AcceptVisitor(this, null), (CodeExpression)assignmentExpression.Right.AcceptVisitor(this, null)));
                }
            }
            return null;
        }
 public override object Visit(AssignmentExpression assignmentExpression, object data)
 {
     Console.WriteLine(assignmentExpression.ToString());
     return assignmentExpression.AcceptChildren(this, data);
 }
        public override object Visit(AssignmentExpression assignmentExpression, object data)
        {
            DebugOutput(assignmentExpression);
            string op   = null;
            string left = assignmentExpression.Left.AcceptVisitor(this, data).ToString();
            string right = assignmentExpression.Right.AcceptVisitor(this, data).ToString();
            switch (assignmentExpression.Op) {
                case AssignmentOperatorType.Assign:
                    op = " = ";
                    break;
                case AssignmentOperatorType.Add:
                    op = " += ";
                    if (IsEventHandlerCreation(assignmentExpression.Right)) {
                        return String.Format("AddHandler {0}, AddressOf {1}",
                                             left,
                                             ((Expression)((ObjectCreateExpression)assignmentExpression.Right).Parameters[0]).AcceptVisitor(this, data).ToString());
                    }
                    break;
                case AssignmentOperatorType.Subtract:
                    op = " -= ";
                    if (IsEventHandlerCreation(assignmentExpression.Right)) {
                        return String.Format("RemoveHandler {0}, AddressOf {1}",
                                             left,
                                             ((Expression)((ObjectCreateExpression)assignmentExpression.Right).Parameters[0]).AcceptVisitor(this, data).ToString());
                    }
                    break;
                case AssignmentOperatorType.Multiply:
                    op = " *= ";
                    break;
                case AssignmentOperatorType.Divide:
                    op = " /= ";
                    break;
                case AssignmentOperatorType.ShiftLeft:
                    op = " <<= ";
                    break;
                case AssignmentOperatorType.ShiftRight:
                    op = " >>= ";
                    break;

                case AssignmentOperatorType.ExclusiveOr:
                    return String.Format("{0} = {0} Xor ({1})", left, right);
                case AssignmentOperatorType.Modulus:
                    return String.Format("{0} = {0} Mod ({1})", left, right);
                case AssignmentOperatorType.BitwiseAnd:
                    return String.Format("{0} = {0} And ({1})", left, right);
                case AssignmentOperatorType.BitwiseOr:
                    return String.Format("{0} = {0} Or ({1})", left, right);
            }
            return String.Concat(left,
                                 op,
                                 right);
        }
 public override object Visit(AssignmentExpression assignmentExpression, object data)
 {
     return assignmentExpression.Left.AcceptVisitor(this, data);
 }
 public virtual object Visit(AssignmentExpression assignmentExpression, object data)
 {
     if (assignmentExpression.Left == null || assignmentExpression.Right == null) return null;
     assignmentExpression.Left.AcceptVisitor(this, data);
     return assignmentExpression.Right.AcceptVisitor(this, data);
 }
Esempio n. 6
0
	void Expr(
#line  1767 "cs.ATG" 
out Expression expr) {

#line  1768 "cs.ATG" 
		expr = null; Expression expr1 = null, expr2 = null; 
		UnaryExpr(
#line  1770 "cs.ATG" 
out expr);
		if (StartOf(5)) {
			ConditionalOrExpr(
#line  1773 "cs.ATG" 
ref expr);
			if (la.kind == 11) {
				lexer.NextToken();
				Expr(
#line  1773 "cs.ATG" 
out expr1);
				Expect(9);
				Expr(
#line  1773 "cs.ATG" 
out expr2);

#line  1773 "cs.ATG" 
				expr = new ConditionalExpression(expr, expr1, expr2);  
			}
		} else if (StartOf(6)) {

#line  1775 "cs.ATG" 
			AssignmentOperatorType op; Expression val; 
			AssignmentOperator(
#line  1775 "cs.ATG" 
out op);
			Expr(
#line  1775 "cs.ATG" 
out val);

#line  1775 "cs.ATG" 
			expr = new AssignmentExpression(expr, op, val); 
		} else SynErr(128);
	}
Esempio n. 7
0
	void StatementExpr(
#line  1748 "cs.ATG" 
out Statement stmt) {

#line  1753 "cs.ATG" 
		bool mustBeAssignment = la.kind == Tokens.Plus  || la.kind == Tokens.Minus ||
		                       la.kind == Tokens.Not   || la.kind == Tokens.BitwiseComplement ||
		                       la.kind == Tokens.Times || la.kind == Tokens.BitwiseAnd   || IsTypeCast();
		Expression expr = null;
		
		UnaryExpr(
#line  1759 "cs.ATG" 
out expr);
		if (StartOf(6)) {

#line  1762 "cs.ATG" 
			AssignmentOperatorType op; Expression val; 
			AssignmentOperator(
#line  1762 "cs.ATG" 
out op);
			Expr(
#line  1762 "cs.ATG" 
out val);

#line  1762 "cs.ATG" 
			expr = new AssignmentExpression(expr, op, val); 
		} else if (la.kind == 10 || la.kind == 12 || la.kind == 19) {

#line  1763 "cs.ATG" 
			if (mustBeAssignment) Error("error in assignment."); 
		} else SynErr(172);

#line  1764 "cs.ATG" 
		stmt = new StatementExpression(expr); 
	}
 public override object Visit(AssignmentExpression assignmentExpression, object data)
 {
     assignmentExpression.Left.AcceptVisitor(this, data);
     outputFormatter.Space();
     switch (assignmentExpression.Op) {
         case AssignmentOperatorType.Assign:
             outputFormatter.PrintToken(Tokens.Assign);
             break;
         case AssignmentOperatorType.Add:
             outputFormatter.PrintToken(Tokens.PlusAssign);
             break;
         case AssignmentOperatorType.Subtract:
             outputFormatter.PrintToken(Tokens.MinusAssign);
             break;
         case AssignmentOperatorType.Multiply:
             outputFormatter.PrintToken(Tokens.TimesAssign);
             break;
         case AssignmentOperatorType.Divide:
             outputFormatter.PrintToken(Tokens.DivAssign);
             break;
         case AssignmentOperatorType.ShiftLeft:
             outputFormatter.PrintToken(Tokens.ShiftLeftAssign);
             break;
         case AssignmentOperatorType.ShiftRight:
             outputFormatter.PrintToken(Tokens.ShiftRightAssign);
             break;
         case AssignmentOperatorType.ExclusiveOr:
             outputFormatter.PrintToken(Tokens.XorAssign);
             break;
         case AssignmentOperatorType.Modulus:
             outputFormatter.PrintToken(Tokens.ModAssign);
             break;
         case AssignmentOperatorType.BitwiseAnd:
             outputFormatter.PrintToken(Tokens.BitwiseAndAssign);
             break;
         case AssignmentOperatorType.BitwiseOr:
             outputFormatter.PrintToken(Tokens.BitwiseOrAssign);
             break;
     }
     outputFormatter.Space();
     assignmentExpression.Right.AcceptVisitor(this, data);
     return null;
 }