亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? expression.cs

?? C#編譯器源代碼。Micorsoft開放源代碼
?? CS
?? 第 1 頁 / 共 5 頁
字號:
				//				// For this to be used, both arguments have to be reference-types.				// Read the rationale on the spec (14.9.6)				//				if (!(l.IsValueType || r.IsValueType)){					type = TypeManager.bool_type;					if (l == r)						return this;										//					// Also, a standard conversion must exist from either one					//					bool left_to_right =						Convert.ImplicitStandardConversionExists (ec, left, r);					bool right_to_left = !left_to_right &&						Convert.ImplicitStandardConversionExists (ec, right, l);					if (!left_to_right && !right_to_left) {						Error_OperatorCannotBeApplied ();						return null;					}					if (left_to_right && left_operators != null &&					    RootContext.WarningLevel >= 2) {						ArrayList args = new ArrayList (2);						args.Add (new Argument (left, Argument.AType.Expression));						args.Add (new Argument (left, Argument.AType.Expression));						MethodBase method = Invocation.OverloadResolve (							ec, (MethodGroupExpr) left_operators, args, true, Location.Null);						if (method != null)							Warning_UnintendedReferenceComparison (loc, "right", l);					}					if (right_to_left && right_operators != null &&					    RootContext.WarningLevel >= 2) {						ArrayList args = new ArrayList (2);						args.Add (new Argument (right, Argument.AType.Expression));						args.Add (new Argument (right, Argument.AType.Expression));						MethodBase method = Invocation.OverloadResolve (							ec, (MethodGroupExpr) right_operators, args, true, Location.Null);						if (method != null)							Warning_UnintendedReferenceComparison (loc, "left", r);					}					//					// We are going to have to convert to an object to compare					//					if (l != TypeManager.object_type)						left = new EmptyCast (left, TypeManager.object_type);					if (r != TypeManager.object_type)						right = new EmptyCast (right, TypeManager.object_type);					//					// FIXME: CSC here catches errors cs254 and cs252					//					return this;				}				//				// One of them is a valuetype, but the other one is not.				//				if (!l.IsValueType || !r.IsValueType) {					Error_OperatorCannotBeApplied ();					return null;				}			}			// Only perform numeric promotions on:			// +, -, *, /, %, &, |, ^, ==, !=, <, >, <=, >=			//			if (oper == Operator.Addition || oper == Operator.Subtraction) {				if (l.IsSubclassOf (TypeManager.delegate_type)){					if (((right.eclass == ExprClass.MethodGroup) ||					     (r == TypeManager.anonymous_method_type))){						if ((RootContext.Version != LanguageVersion.ISO_1)){							Expression tmp = Convert.ImplicitConversionRequired (ec, right, l, loc);							if (tmp == null)								return null;							right = tmp;							r = right.Type;						}					}										if (r.IsSubclassOf (TypeManager.delegate_type)){						MethodInfo method;						ArrayList args = new ArrayList (2);												args = new ArrayList (2);						args.Add (new Argument (left, Argument.AType.Expression));						args.Add (new Argument (right, Argument.AType.Expression));												if (oper == Operator.Addition)							method = TypeManager.delegate_combine_delegate_delegate;						else							method = TypeManager.delegate_remove_delegate_delegate;												if (l != r) {							Error_OperatorCannotBeApplied ();							return null;						}												return new BinaryDelegate (l, method, args);					}				}								//				// Pointer arithmetic:				//				// T* operator + (T* x, int y);				// T* operator + (T* x, uint y);				// T* operator + (T* x, long y);				// T* operator + (T* x, ulong y);				//				// T* operator + (int y,   T* x);				// T* operator + (uint y,  T *x);				// T* operator + (long y,  T *x);				// T* operator + (ulong y, T *x);				//				// T* operator - (T* x, int y);				// T* operator - (T* x, uint y);				// T* operator - (T* x, long y);				// T* operator - (T* x, ulong y);				//				// long operator - (T* x, T *y)				//				if (l.IsPointer){					if (r.IsPointer && oper == Operator.Subtraction){						if (r == l)							return new PointerArithmetic (								false, left, right, TypeManager.int64_type,								loc).Resolve (ec);					} else {						Expression t = Make32or64 (ec, right);						if (t != null)							return new PointerArithmetic (oper == Operator.Addition, left, t, l, loc).Resolve (ec);					}				} else if (r.IsPointer && oper == Operator.Addition){					Expression t = Make32or64 (ec, left);					if (t != null)						return new PointerArithmetic (true, right, t, r, loc).Resolve (ec);				}			}						//			// Enumeration operators			//			bool lie = TypeManager.IsEnumType (l);			bool rie = TypeManager.IsEnumType (r);			if (lie || rie){				Expression temp;				// U operator - (E e, E f)				if (lie && rie){					if (oper == Operator.Subtraction){						if (l == r){							type = TypeManager.EnumToUnderlying (l);							return this;						}						Error_OperatorCannotBeApplied ();						return null;					}				}									//				// operator + (E e, U x)				// operator - (E e, U x)				//				if (oper == Operator.Addition || oper == Operator.Subtraction){					Type enum_type = lie ? l : r;					Type other_type = lie ? r : l;					Type underlying_type = TypeManager.EnumToUnderlying (enum_type);										if (underlying_type != other_type){						temp = Convert.ImplicitConversion (ec, lie ? right : left, underlying_type, loc);						if (temp != null){							if (lie)								right = temp;							else								left = temp;							type = enum_type;							return this;						}													Error_OperatorCannotBeApplied ();						return null;					}					type = enum_type;					return this;				}								if (!rie){					temp = Convert.ImplicitConversion (ec, right, l, loc);					if (temp != null)						right = temp;					else {						Error_OperatorCannotBeApplied ();						return null;					}				} if (!lie){					temp = Convert.ImplicitConversion (ec, left, r, loc);					if (temp != null){						left = temp;						l = r;					} else {						Error_OperatorCannotBeApplied ();						return null;					}				}				if (oper == Operator.Equality || oper == Operator.Inequality ||				    oper == Operator.LessThanOrEqual || oper == Operator.LessThan ||				    oper == Operator.GreaterThanOrEqual || oper == Operator.GreaterThan){					if (left.Type != right.Type){						Error_OperatorCannotBeApplied ();						return null;					}					type = TypeManager.bool_type;					return this;				}				if (oper == Operator.BitwiseAnd ||				    oper == Operator.BitwiseOr ||				    oper == Operator.ExclusiveOr){					if (left.Type != right.Type){						Error_OperatorCannotBeApplied ();						return null;					}					type = l;					return this;				}				Error_OperatorCannotBeApplied ();				return null;			}						if (oper == Operator.LeftShift || oper == Operator.RightShift)				return CheckShiftArguments (ec);			if (oper == Operator.LogicalOr || oper == Operator.LogicalAnd){				if (l == TypeManager.bool_type && r == TypeManager.bool_type) {					type = TypeManager.bool_type;					return this;				}				if (l != r) {					Error_OperatorCannotBeApplied ();					return null;				}				Expression e = new ConditionalLogicalOperator (					oper == Operator.LogicalAnd, left, right, l, loc);				return e.Resolve (ec);			} 			//			// operator & (bool x, bool y)			// operator | (bool x, bool y)			// operator ^ (bool x, bool y)			//			if (l == TypeManager.bool_type && r == TypeManager.bool_type){				if (oper == Operator.BitwiseAnd ||				    oper == Operator.BitwiseOr ||				    oper == Operator.ExclusiveOr){					type = l;					return this;				}			}						//			// Pointer comparison			//			if (l.IsPointer && r.IsPointer){				if (oper == Operator.LessThan || oper == Operator.LessThanOrEqual ||				    oper == Operator.GreaterThan || oper == Operator.GreaterThanOrEqual){					type = TypeManager.bool_type;					return this;				}			}						//			// This will leave left or right set to null if there is an error			//			bool check_user_conv = is_user_defined (l) && is_user_defined (r);			DoNumericPromotions (ec, l, r, left, right, check_user_conv);			if (left == null || right == null){				Error_OperatorCannotBeApplied (loc, OperName (oper), l, r);				return null;			}			//			// reload our cached types if required			//			l = left.Type;			r = right.Type;						if (oper == Operator.BitwiseAnd ||			    oper == Operator.BitwiseOr ||			    oper == Operator.ExclusiveOr){				if (l == r){					if (((l == TypeManager.int32_type) ||					     (l == TypeManager.uint32_type) ||					     (l == TypeManager.short_type) ||					     (l == TypeManager.ushort_type) ||					     (l == TypeManager.int64_type) ||					     (l == TypeManager.uint64_type))){						type = l;					} else {						Error_OperatorCannotBeApplied ();						return null;					}				} else {					Error_OperatorCannotBeApplied ();					return null;				}			}			if (oper == Operator.Equality ||			    oper == Operator.Inequality ||			    oper == Operator.LessThanOrEqual ||			    oper == Operator.LessThan ||			    oper == Operator.GreaterThanOrEqual ||			    oper == Operator.GreaterThan){				type = TypeManager.bool_type;			}			return this;		}		Constant EnumLiftUp (EmitContext ec, Constant left, Constant right)		{			switch (oper) {				case Operator.BitwiseOr:				case Operator.BitwiseAnd:				case Operator.ExclusiveOr:				case Operator.Equality:				case Operator.Inequality:				case Operator.LessThan:				case Operator.LessThanOrEqual:				case Operator.GreaterThan:				case Operator.GreaterThanOrEqual:					if (left is EnumConstant)						return left;					if (left.IsZeroInteger)						return new EnumConstant (left, right.Type);					break;				case Operator.Addition:				case Operator.Subtraction:					return left;				case Operator.Multiply:				case Operator.Division:				case Operator.Modulus:				case Operator.LeftShift:				case Operator.RightShift:					if (right is EnumConstant || left is EnumConstant)						break;					return left;			}			Error_OperatorCannotBeApplied (loc, Binary.OperName (oper), left.Type, right.Type);			return null;		}		public override Expression DoResolve (EmitContext ec)		{			if ((oper == Operator.Subtraction) && (left is ParenthesizedExpression)) {				left = ((ParenthesizedExpression) left).Expr;				left = left.Resolve (ec, ResolveFlags.VariableOrValue | ResolveFlags.Type);				if (left == null)					return null;				if (left.eclass == ExprClass.Type) {					Report.Error (75, loc, "To cast a negative value, you must enclose the value in parentheses");					return null;				}			} else				left = left.Resolve (ec);			if (left == null)				return null;			Constant lc = left as Constant;			if (lc != null && lc.Type == TypeManager.bool_type && 				((oper == Operator.LogicalAnd && (bool)lc.GetValue () == false) ||				 (oper == Operator.LogicalOr && (bool)lc.GetValue () == true))) {				// TODO: make a sense to resolve unreachable expression as we do for statement				Report.Warning (429, 4, loc, "Unreachable expression code detected");				return left;			}			right = right.Resolve (ec);			if (right == null)				return null;			eclass = ExprClass.Value;			Constant rc = right as Constant;			// The conversion rules are ignored in enum context but why			if (!ec.InEnumContext && lc != null && rc != null && (TypeManager.IsEnumType (left.Type) || TypeManager.IsEnumType (right.Type))) {				left = lc = EnumLiftUp (ec, lc, rc);				if (lc == null)					return null;				right = rc = EnumLiftUp (ec, rc, lc);				if (rc == null)					return null;			}			if (oper == Operator.BitwiseAnd) {				if (rc != null && rc.IsZeroInteger) {					return lc is EnumConstant ?						new EnumConstant (rc, lc.Type):						rc;				}				if (lc != null && lc.IsZeroInteger) {					return rc is EnumConstant ?						new EnumConstant (lc, rc.Type):						lc;				}			}			else if (oper == Operator.BitwiseOr) {				if (lc is EnumConstant &&				    rc != null && rc.IsZeroInteger)					return lc;				if (rc is EnumConstant &&				    lc != null && lc.IsZeroInteger)					return rc;			} else if (oper == Operator.LogicalAnd) {				if (rc != null && rc.IsDefaultValue && rc.Type == TypeManager.bool_type)					return rc;				if (lc != null && lc.IsDefaultValue && lc.Type == TypeManager.bool_type)					return lc;			}			if (rc != null && lc != null){				int prev_e = Report.Errors;				Expression e = ConstantFold.BinaryFold (					ec, oper, lc, rc, loc);				if (e != null || Report.Errors != prev_e)					return e;			}			// Comparison warnings			if (oper == Operator.Equality || oper == Operator.Inequality ||			    oper == Operator.LessThanOrEqual || oper == Operator.LessThan ||			    oper == Operator.GreaterThanOrEqual || oper == Operator.GreaterThan){				if (left.Equals (right)) {					Report.Warning (1718, 3, loc, "Comparison made to same variable; did you mean to compare something else?");				}				CheckUselessComparison (lc, right.Type);				CheckUselessComparison (rc, left.Type);			}			return ResolveOperator (ec);		}		private void CheckUselessComparison (Constant c, Type type)		{			if (c == null || !IsTypeIntegral (type)				|| c is StringConstant				|| c is BoolConstant				|| c is CharConstant				|| c is FloatConstant				|| c is DoubleConstant				|| c is DecimalConstant				)				return;			long value = 0;			if (c is ULongConstant) {				ulong uvalue = ((ULongConstant) c).Value;				if (uvalue > long.MaxValue) {					if (type == TypeManager.byte_type ||					    type == TypeManager.sbyte_type ||					    type == TypeManager.short_type ||					   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久香蕉的特点| av电影在线不卡| 久久人人爽爽爽人久久久| 色网综合在线观看| 久久97超碰色| 亚洲一区二三区| 久久精品夜色噜噜亚洲a∨| 欧美日韩综合一区| www.亚洲在线| 精品一区二区三区蜜桃| 午夜亚洲福利老司机| 国产欧美一区二区精品秋霞影院 | 欧美视频三区在线播放| 国产一区三区三区| 亚洲成在线观看| 亚洲免费三区一区二区| 中文字幕不卡三区| 精品久久免费看| 日韩午夜三级在线| 欧美日韩和欧美的一区二区| 97久久超碰国产精品| 粉嫩av一区二区三区| 久热成人在线视频| 日欧美一区二区| 亚洲超丰满肉感bbw| 亚洲男同性视频| 欧美激情一区在线观看| 欧美精品一区二区三区高清aⅴ| 在线观看一区二区视频| 色综合欧美在线| youjizz国产精品| www.综合网.com| 成人97人人超碰人人99| 国产成人精品影视| 成人午夜又粗又硬又大| 国产精品1区2区| 国产精品一区二区在线看| 精品一区二区日韩| 精品中文字幕一区二区| 激情国产一区二区| 国产在线国偷精品产拍免费yy| 蜜臀av性久久久久av蜜臀妖精| 麻豆国产欧美一区二区三区| 久久国产精品色| 韩国精品一区二区| 国产精品中文字幕一区二区三区| 激情国产一区二区| 国产成人av一区二区三区在线 | 91网上在线视频| 在线视频国内一区二区| 欧美亚洲动漫精品| 欧美一区二区久久久| 日韩午夜三级在线| 久久综合色婷婷| 国产精品无遮挡| 亚洲另类春色校园小说| 亚洲va天堂va国产va久| 日韩成人午夜精品| 九色综合狠狠综合久久| 成人理论电影网| 在线观看欧美日本| 欧美一区二区免费| 国产午夜精品理论片a级大结局 | 日本一区二区三区在线不卡| 国产精品久久久久久久久快鸭| 一区二区三区四区蜜桃| 视频一区二区欧美| 国产一区二区视频在线播放| 粉嫩av一区二区三区| 91国偷自产一区二区三区观看| 欧美日韩1区2区| 精品美女一区二区| 国产精品免费丝袜| 亚洲国产美国国产综合一区二区| 久久99精品国产麻豆婷婷洗澡| 国产精品亚洲综合一区在线观看| 99久久777色| 91精品欧美久久久久久动漫| 久久久久久电影| 亚洲永久精品国产| 国产一区二三区| 色伊人久久综合中文字幕| 欧美一区二区啪啪| 蓝色福利精品导航| 精品一区二区三区香蕉蜜桃| 色综合天天综合网国产成人综合天| 久久久久久亚洲综合影院红桃| 最新中文字幕一区二区三区 | 欧美一区二区三区视频免费播放| 欧美精品一区二区蜜臀亚洲| 一区二区三区四区国产精品| 韩国一区二区在线观看| 色综合久久久久网| 精品卡一卡二卡三卡四在线| 亚洲欧美另类久久久精品 | 韩日av一区二区| 欧美性感一类影片在线播放| 久久精品一区蜜桃臀影院| 亚洲成av人片在线| 成人午夜私人影院| 精品国产伦一区二区三区免费 | 国产成人在线视频网址| 欧美日韩国产一级| 国产精品久久久久影院色老大| 日本不卡1234视频| 在线免费视频一区二区| 久久久99久久| 蜜臀va亚洲va欧美va天堂| 色欧美日韩亚洲| 国产喷白浆一区二区三区| 免费看精品久久片| 91国在线观看| 中文字幕在线一区免费| 国产精品自拍三区| 精品国产99国产精品| 日本伊人午夜精品| 欧美日韩激情一区二区| 亚洲精品日韩综合观看成人91| 懂色一区二区三区免费观看| 欧美成人精品1314www| 五月天久久比比资源色| 欧美在线三级电影| 亚洲精品成人悠悠色影视| 成人午夜av电影| 亚洲国产激情av| 成人视屏免费看| 欧美国产亚洲另类动漫| 国产精品一区三区| 久久久久久久综合日本| 紧缚捆绑精品一区二区| 精品国产自在久精品国产| 免费观看日韩av| 日韩欧美在线影院| 美国十次综合导航| 欧美成人艳星乳罩| 久久国产视频网| 欧美精品一区二区三区很污很色的| 久久爱另类一区二区小说| 日韩一区二区三区视频在线观看 | 色综合视频在线观看| 亚洲三级在线观看| 一区二区三区毛片| 麻豆国产91在线播放| 欧美一区二区三区不卡| 日韩精品成人一区二区在线| 欧美精品一卡二卡| 麻豆精品蜜桃视频网站| 日韩欧美一二三| 国产美女精品人人做人人爽| 日本一区二区成人| 99精品久久久久久| 一区二区不卡在线视频 午夜欧美不卡在| 91麻豆文化传媒在线观看| 一区二区三区中文字幕电影 | 国产午夜亚洲精品不卡| 国产成人免费xxxxxxxx| 亚洲天堂久久久久久久| 91蝌蚪porny| 日韩电影在线一区二区三区| 日韩欧美国产成人一区二区| 国产高清不卡一区| 自拍偷拍欧美激情| 欧美日韩电影在线播放| 久久av资源网| 国产精品网站在线| 欧美三片在线视频观看| 极品少妇xxxx精品少妇| 中文字幕一区视频| 欧美狂野另类xxxxoooo| 精品一区二区三区欧美| 国产精品激情偷乱一区二区∴| 欧美午夜精品一区二区三区| 麻豆国产精品视频| 亚洲欧美日韩国产中文在线| 欧美一二三区精品| 成人v精品蜜桃久久一区| 一区二区三区四区乱视频| 精品成人一区二区三区四区| 99久久精品久久久久久清纯| 日韩专区欧美专区| 中文无字幕一区二区三区| 欧美少妇性性性| 国产一区二区三区在线看麻豆| 亚洲精品视频一区二区| 精品国产免费一区二区三区香蕉 | 欧美一个色资源| av高清不卡在线| 日本va欧美va精品| 国产精品久久久久久久久晋中| 欧美日韩欧美一区二区| 国产成人日日夜夜| 同产精品九九九| 成人欧美一区二区三区| 欧美一卡二卡三卡| 91福利资源站| 成人avav在线| 国产一区免费电影| 日本在线播放一区二区三区| 亚洲老妇xxxxxx| 中文字幕 久热精品 视频在线|