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

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

?? expression.cs

?? C#編譯器源代碼。Micorsoft開放源代碼
?? CS
?? 第 1 頁 / 共 5 頁
字號:
//// expression.cs: Expression representation for the IL tree.//// Author://   Miguel de Icaza (miguel@ximian.com)//   Marek Safar (marek.safar@seznam.cz)//// (C) 2001, 2002, 2003 Ximian, Inc.// (C) 2003, 2004 Novell, Inc.//#define USE_OLDnamespace Mono.CSharp {	using System;	using System.Collections;	using System.Reflection;	using System.Reflection.Emit;	using System.Text;	/// <summary>	///   This is just a helper class, it is generated by Unary, UnaryMutator	///   when an overloaded method has been found.  It just emits the code for a	///   static call.	/// </summary>	public class StaticCallExpr : ExpressionStatement {		ArrayList args;		MethodInfo mi;		public StaticCallExpr (MethodInfo m, ArrayList a, Location l)		{			mi = m;			args = a;			type = m.ReturnType;			eclass = ExprClass.Value;			loc = l;		}		public override Expression DoResolve (EmitContext ec)		{			//			// We are born fully resolved			//			return this;		}		public override void Emit (EmitContext ec)		{			if (args != null) 				Invocation.EmitArguments (ec, mi, args, false, null);			ec.ig.Emit (OpCodes.Call, mi);			return;		}				static public StaticCallExpr MakeSimpleCall (EmitContext ec, MethodGroupExpr mg,							 Expression e, Location loc)		{			ArrayList args;			MethodBase method;						args = new ArrayList (1);			Argument a = new Argument (e, Argument.AType.Expression);                        // We need to resolve the arguments before sending them in !                        if (!a.Resolve (ec, loc))                                return null;                        args.Add (a);			method = Invocation.OverloadResolve (				ec, (MethodGroupExpr) mg, args, false, loc);			if (method == null)				return null;			return new StaticCallExpr ((MethodInfo) method, args, loc);		}		public override void EmitStatement (EmitContext ec)		{			Emit (ec);			if (TypeManager.TypeToCoreType (type) != TypeManager.void_type)				ec.ig.Emit (OpCodes.Pop);		}				public MethodInfo Method {			get { return mi; }		}	}	public class ParenthesizedExpression : Expression	{		public Expression Expr;		public ParenthesizedExpression (Expression expr)		{			this.Expr = expr;		}		public override Expression DoResolve (EmitContext ec)		{			Expr = Expr.Resolve (ec);			return Expr;		}		public override void Emit (EmitContext ec)		{			throw new Exception ("Should not happen");		}		public override Location Location		{			get {				return Expr.Location;			}		}	}		/// <summary>	///   Unary expressions.  	/// </summary>	///	/// <remarks>	///   Unary implements unary expressions.   It derives from	///   ExpressionStatement becuase the pre/post increment/decrement	///   operators can be used in a statement context.	/// </remarks>	public class Unary : Expression {		public enum Operator : byte {			UnaryPlus, UnaryNegation, LogicalNot, OnesComplement,			Indirection, AddressOf,  TOP		}		public Operator Oper;		public Expression Expr;				public Unary (Operator op, Expression expr, Location loc)		{			this.Oper = op;			this.Expr = expr;			this.loc = loc;		}		/// <summary>		///   Returns a stringified representation of the Operator		/// </summary>		static public string OperName (Operator oper)		{			switch (oper){			case Operator.UnaryPlus:				return "+";			case Operator.UnaryNegation:				return "-";			case Operator.LogicalNot:				return "!";			case Operator.OnesComplement:				return "~";			case Operator.AddressOf:				return "&";			case Operator.Indirection:				return "*";			}			return oper.ToString ();		}		public static readonly string [] oper_names;		static Unary ()		{			oper_names = new string [(int)Operator.TOP];			oper_names [(int) Operator.UnaryPlus] = "op_UnaryPlus";			oper_names [(int) Operator.UnaryNegation] = "op_UnaryNegation";			oper_names [(int) Operator.LogicalNot] = "op_LogicalNot";			oper_names [(int) Operator.OnesComplement] = "op_OnesComplement";			oper_names [(int) Operator.Indirection] = "op_Indirection";			oper_names [(int) Operator.AddressOf] = "op_AddressOf";		}		void Error23 (Type t)		{			Report.Error (23, loc, "Operator `{0}' cannot be applied to operand of type `{1}'",				OperName (Oper), TypeManager.CSharpName (t));		}		/// <remarks>		///   The result has been already resolved:		///		///   FIXME: a minus constant -128 sbyte cant be turned into a		///   constant byte.		/// </remarks>		static Expression TryReduceNegative (Constant expr)		{			Expression e = null;			if (expr is IntConstant)				e = new IntConstant (-((IntConstant) expr).Value, expr.Location);			else if (expr is UIntConstant){				uint value = ((UIntConstant) expr).Value;				if (value < 2147483649)					return new IntConstant (-(int)value, expr.Location);				else					e = new LongConstant (-value, expr.Location);			}			else if (expr is LongConstant)				e = new LongConstant (-((LongConstant) expr).Value, expr.Location);			else if (expr is ULongConstant){				ulong value = ((ULongConstant) expr).Value;				if (value < 9223372036854775809)					return new LongConstant(-(long)value, expr.Location);			}			else if (expr is FloatConstant)				e = new FloatConstant (-((FloatConstant) expr).Value, expr.Location);			else if (expr is DoubleConstant)				e = new DoubleConstant (-((DoubleConstant) expr).Value, expr.Location);			else if (expr is DecimalConstant)				e = new DecimalConstant (-((DecimalConstant) expr).Value, expr.Location);			else if (expr is ShortConstant)				e = new IntConstant (-((ShortConstant) expr).Value, expr.Location);			else if (expr is UShortConstant)				e = new IntConstant (-((UShortConstant) expr).Value, expr.Location);			else if (expr is SByteConstant)				e = new IntConstant (-((SByteConstant) expr).Value, expr.Location);			else if (expr is ByteConstant)				e = new IntConstant (-((ByteConstant) expr).Value, expr.Location);			return e;		}		// <summary>		//   This routine will attempt to simplify the unary expression when the		//   argument is a constant.  The result is returned in `result' and the		//   function returns true or false depending on whether a reduction		//   was performed or not		// </summary>		bool Reduce (EmitContext ec, Constant e, out Expression result)		{			Type expr_type = e.Type;						switch (Oper){			case Operator.UnaryPlus:				if (expr_type == TypeManager.bool_type){					result = null;					Error23 (expr_type);					return false;				}								result = e;				return true;							case Operator.UnaryNegation:				result = TryReduceNegative (e);				return result != null;							case Operator.LogicalNot:				if (expr_type != TypeManager.bool_type) {					result = null;					Error23 (expr_type);					return false;				}								BoolConstant b = (BoolConstant) e;				result = new BoolConstant (!(b.Value), b.Location);				return true;							case Operator.OnesComplement:				if (!((expr_type == TypeManager.int32_type) ||				      (expr_type == TypeManager.uint32_type) ||				      (expr_type == TypeManager.int64_type) ||				      (expr_type == TypeManager.uint64_type) ||				      (expr_type.IsSubclassOf (TypeManager.enum_type)))){					result = null;					if (Convert.ImplicitConversionExists (ec, e, TypeManager.int32_type)){						result = new Cast (new TypeExpression (TypeManager.int32_type, loc), e, loc);						result = result.Resolve (ec);					} else if (Convert.ImplicitConversionExists (ec, e, TypeManager.uint32_type)){						result = new Cast (new TypeExpression (TypeManager.uint32_type, loc), e, loc);						result = result.Resolve (ec);					} else if (Convert.ImplicitConversionExists (ec, e, TypeManager.int64_type)){						result = new Cast (new TypeExpression (TypeManager.int64_type, loc), e, loc);						result = result.Resolve (ec);					} else if (Convert.ImplicitConversionExists (ec, e, TypeManager.uint64_type)){						result = new Cast (new TypeExpression (TypeManager.uint64_type, loc), e, loc);						result = result.Resolve (ec);					}					if (result == null || !(result is Constant)){						result = null;						Error23 (expr_type);						return false;					}					expr_type = result.Type;					e = (Constant) result;				}				if (e is EnumConstant){					EnumConstant enum_constant = (EnumConstant) e;					Expression reduced;										if (Reduce (ec, enum_constant.Child, out reduced)){						result = new EnumConstant ((Constant) reduced, enum_constant.Type);						return true;					} else {						result = null;						return false;					}				}				if (expr_type == TypeManager.int32_type){					result = new IntConstant (~ ((IntConstant) e).Value, e.Location);				} else if (expr_type == TypeManager.uint32_type){					result = new UIntConstant (~ ((UIntConstant) e).Value, e.Location);				} else if (expr_type == TypeManager.int64_type){					result = new LongConstant (~ ((LongConstant) e).Value, e.Location);				} else if (expr_type == TypeManager.uint64_type){					result = new ULongConstant (~ ((ULongConstant) e).Value, e.Location);				} else {					result = null;					Error23 (expr_type);					return false;				}				return true;			case Operator.AddressOf:				result = this;				return false;			case Operator.Indirection:				result = this;				return false;			}			throw new Exception ("Can not constant fold: " + Oper.ToString());		}		Expression ResolveOperator (EmitContext ec)		{			//			// Step 1: Default operations on CLI native types.			//			// Attempt to use a constant folding operation.			if (Expr is Constant){				Expression result;								if (Reduce (ec, (Constant) Expr, out result))					return result;			}			//			// Step 2: Perform Operator Overload location			//			Type expr_type = Expr.Type;			Expression mg;			string op_name;						op_name = oper_names [(int) Oper];			mg = MemberLookup (ec, expr_type, op_name, MemberTypes.Method, AllBindingFlags, loc);						if (mg != null) {				Expression e = StaticCallExpr.MakeSimpleCall (					ec, (MethodGroupExpr) mg, Expr, loc);				if (e == null){					Error23 (expr_type);					return null;				}								return e;			}			// Only perform numeric promotions on:			// +, - 			if (expr_type == null)				return null;						switch (Oper){			case Operator.LogicalNot:				if (expr_type != TypeManager.bool_type) {					Expr = ResolveBoolean (ec, Expr, loc);					if (Expr == null){						Error23 (expr_type);						return null;					}				}								type = TypeManager.bool_type;				return this;			case Operator.OnesComplement:				if (!((expr_type == TypeManager.int32_type) ||				      (expr_type == TypeManager.uint32_type) ||				      (expr_type == TypeManager.int64_type) ||				      (expr_type == TypeManager.uint64_type) ||				      (expr_type.IsSubclassOf (TypeManager.enum_type)))){					Expression e;					e = Convert.ImplicitConversion (ec, Expr, TypeManager.int32_type, loc);					if (e != null)						goto ok;					e = Convert.ImplicitConversion (ec, Expr, TypeManager.uint32_type, loc);					if (e != null)						goto ok;					e = Convert.ImplicitConversion (ec, Expr, TypeManager.int64_type, loc);					if (e != null)						goto ok;					e = Convert.ImplicitConversion (ec, Expr, TypeManager.uint64_type, loc);					if (e != null)						goto ok;					Error23 (expr_type);					return null;				ok:					Expr = e;					expr_type = e.Type;				}				type = expr_type;				return this;			case Operator.AddressOf:				if (!ec.InUnsafe) {					UnsafeError (loc); 					return null;				}								if (!TypeManager.VerifyUnManaged (Expr.Type, loc)){					return null;				}				IVariable variable = Expr as IVariable;				bool is_fixed = variable != null && variable.VerifyFixed ();				if (!ec.InFixedInitializer && !is_fixed) {					Error (212, "You can only take the address of unfixed expression inside " +					       "of a fixed statement initializer");					return null;				}				if (ec.InFixedInitializer && is_fixed) {					Error (213, "You cannot use the fixed statement to take the address of an already fixed expression");					return null;				}				LocalVariableReference lr = Expr as LocalVariableReference;				if (lr != null){					if (lr.local_info.IsCaptured){						AnonymousMethod.Error_AddressOfCapturedVar (lr.Name, loc);						return null;					}					lr.local_info.AddressTaken = true;					lr.local_info.Used = true;				}				// According to the specs, a variable is considered definitely assigned if you take				// its address.				if ((variable != null) && (variable.VariableInfo != null)){					variable.VariableInfo.SetAssigned (ec);				}				type = TypeManager.GetPointerType (Expr.Type);				return this;			case Operator.Indirection:				if (!ec.InUnsafe){					UnsafeError (loc);					return null;				}								if (!expr_type.IsPointer){					Error (193, "The * or -> operator must be applied to a pointer");					return null;				}								//				// We create an Indirection expression, because				// it can implement the IMemoryLocation.				// 				return new Indirection (Expr, loc);						case Operator.UnaryPlus:				//

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区在线观看视频| 成人亚洲一区二区一| 欧美日韩第一区日日骚| 丝袜国产日韩另类美女| 91精品国产色综合久久ai换脸| 日本不卡一二三区黄网| 精品国产免费一区二区三区香蕉| 国产剧情在线观看一区二区| 国产精品高清亚洲| 欧美日韩一二三| 成人一道本在线| 日韩av在线播放中文字幕| 国产精品久99| 精品国产麻豆免费人成网站| 日本高清成人免费播放| 免费在线看成人av| 亚洲国产精品精华液网站| 精品成人佐山爱一区二区| 99在线热播精品免费| 日韩av不卡在线观看| 日韩综合小视频| 国产欧美日韩精品a在线观看| 色激情天天射综合网| 国产精品一级片在线观看| 久久成人免费网| 视频一区欧美精品| 一区二区三区在线观看动漫| 国产精品青草久久| 综合激情网...| 国产精品久线在线观看| 中文一区在线播放| 国产天堂亚洲国产碰碰| 26uuu欧美| 久久免费精品国产久精品久久久久| 欧美精品色一区二区三区| 欧美性猛交xxxxxxxx| 欧美一级视频精品观看| 国产婷婷色一区二区三区四区| 中文字幕av不卡| 亚洲国产精品一区二区www在线| 日韩精品一级中文字幕精品视频免费观看 | 欧美视频一区在线| 欧美日韩精品欧美日韩精品一| 欧美精品久久一区二区三区| 欧美电影免费观看完整版| 欧美精品一区二区久久婷婷| 国产欧美一区二区在线观看| 一区二区三区蜜桃| 蓝色福利精品导航| 99re这里都是精品| 91久久精品一区二区三| 欧美日韩国产中文| 26uuu亚洲综合色| 亚洲精品乱码久久久久久日本蜜臀| 亚洲午夜久久久久久久久久久| 麻豆国产精品777777在线| 91麻豆国产香蕉久久精品| 3d动漫精品啪啪1区2区免费| 久久久精品中文字幕麻豆发布| 成人欧美一区二区三区1314| 另类欧美日韩国产在线| 欧美性xxxxx极品少妇| 亚洲品质自拍视频网站| 丁香六月综合激情| 欧美zozo另类异族| 日韩精品一二三四| 欧美视频三区在线播放| 一区二区三区在线免费观看| 国产一区二区女| 久久精品亚洲精品国产欧美kt∨ | 亚洲视频网在线直播| 国产成人aaa| 成人免费在线视频| 欧美中文一区二区三区| 99re热视频精品| 欧美变态tickle挠乳网站| 久草中文综合在线| 成人免费一区二区三区在线观看| 国产精品99精品久久免费| 日韩在线卡一卡二| 亚洲精选免费视频| 久久综合色8888| 色网综合在线观看| 美女一区二区久久| 亚洲成人tv网| 911精品国产一区二区在线| 精品亚洲国产成人av制服丝袜| 一区二区免费看| 精品国产91洋老外米糕| 欧美色综合网站| 国产91丝袜在线观看| 亚洲美女免费在线| 中文字幕日韩一区| 中文字幕一区二区三区在线不卡| 欧美一二区视频| 欧美午夜在线观看| 不卡一区二区中文字幕| 久久精品国产免费看久久精品| 亚洲图片激情小说| 欧美国产成人在线| 精品国产污污免费网站入口| 欧美日本一区二区在线观看| 91美女片黄在线观看| 国产福利一区在线| 日韩av网站在线观看| 日韩精品一卡二卡三卡四卡无卡| 亚洲激情自拍视频| 一区二区三区产品免费精品久久75| 国产欧美一区二区精品仙草咪| 日韩女优视频免费观看| 欧美精品视频www在线观看 | 精品三级在线观看| 欧美第一区第二区| 精品国产一区二区三区久久久蜜月| 91福利视频在线| 91免费国产视频网站| 欧美日韩视频不卡| 欧洲一区在线观看| 欧美一区二区三区不卡| 18欧美亚洲精品| 蜜臀久久99精品久久久画质超高清 | 2017欧美狠狠色| 精品国精品国产| 国产精品视频一二| 亚洲一级不卡视频| 韩国精品在线观看| 色88888久久久久久影院野外| 99精品视频一区二区| 色欧美片视频在线观看| 精品剧情v国产在线观看在线| 一区二区三区成人在线视频| 亚洲国产精品激情在线观看| 亚洲精品久久嫩草网站秘色| 国产在线精品一区在线观看麻豆| 在线看国产日韩| 久久精品网站免费观看| 夜夜操天天操亚洲| 成人黄色网址在线观看| 日韩精品一区二区三区蜜臀| 午夜伦欧美伦电影理论片| 北条麻妃一区二区三区| 久久久久高清精品| 久久99国产精品尤物| 日韩一区二区免费高清| 视频在线在亚洲| 欧美三级日韩在线| 国产精品久久久久久久久图文区| 国模大尺度一区二区三区| 91麻豆精品国产91久久久久久久久| 亚洲精品国产成人久久av盗摄| 国产剧情一区在线| 久久久久久影视| 国产成人av电影| 久久精品人人爽人人爽| 精品一区二区成人精品| 国产人成亚洲第一网站在线播放| 99视频精品全部免费在线| 亚洲激情自拍偷拍| 欧美日韩专区在线| 亚洲一区二区在线播放相泽| 91麻豆精品91久久久久久清纯| 国产在线一区观看| 亚洲一卡二卡三卡四卡无卡久久| 777a∨成人精品桃花网| 波多野结衣的一区二区三区| 视频一区二区三区入口| 亚洲视频一二区| 欧美韩国日本不卡| 精品国产三级电影在线观看| 欧美精品一二三四| 欧美三级电影网| 欧美特级限制片免费在线观看| 99国产一区二区三精品乱码| 国产精品一线二线三线精华| 日韩电影在线观看网站| 99国产欧美另类久久久精品 | 欧美国产一区视频在线观看| 欧美精品一区二区三区视频| 日韩手机在线导航| 亚洲国产成人91porn| 91精品国产高清一区二区三区| gogo大胆日本视频一区| 色婷婷综合在线| 91精品国产丝袜白色高跟鞋| www久久精品| 中文字幕亚洲电影| 日本在线播放一区二区三区| 国内精品久久久久影院色| 91麻豆蜜桃一区二区三区| 97国产一区二区| 色94色欧美sute亚洲线路一久| 欧美日韩精品福利| 日韩视频在线你懂得| 久久久久久久免费视频了| 国产日产精品1区| 亚洲一区在线观看免费观看电影高清| 亚洲综合色视频| 国产福利不卡视频| 欧亚一区二区三区| 亚洲精品一区二区三区蜜桃下载 |