亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
99视频精品免费视频| 91香蕉视频mp4| 一本一道波多野结衣一区二区| 美国十次综合导航| 亚洲一区欧美一区| 日韩成人一级片| 国产一区欧美一区| 美国十次综合导航| 国产在线视频一区二区| 99久久综合国产精品| 欧美在线看片a免费观看| 色婷婷亚洲婷婷| 精品欧美一区二区久久| 国产精品国产三级国产普通话三级 | 亚洲精品国产精品乱码不99| 亚洲日本丝袜连裤袜办公室| 国产精品你懂的在线欣赏| 日韩毛片一二三区| 亚洲一区欧美一区| 亚洲自拍都市欧美小说| 亚洲综合精品久久| 激情综合网av| 图片区小说区国产精品视频| 亚洲一区自拍偷拍| 一区二区三区四区蜜桃| 中文字幕在线观看一区| 奇米在线7777在线精品 | 911精品国产一区二区在线| av亚洲精华国产精华| 成人视屏免费看| 欧美三电影在线| 欧美二区在线观看| 欧美一二区视频| ㊣最新国产の精品bt伙计久久| 中文字幕免费观看一区| 国产日韩精品一区二区三区| 成人影视亚洲图片在线| 极品尤物av久久免费看| 国产不卡一区视频| 在线免费一区三区| 日韩免费福利电影在线观看| 国产亚洲精品免费| 免费成人在线播放| 国产精品女人毛片| 久久久久久久久99精品| 亚洲精选视频免费看| 日本中文一区二区三区| 东方欧美亚洲色图在线| 国产美女精品在线| 91黄色免费版| 国产女同性恋一区二区| 亚洲国产另类精品专区| 国产酒店精品激情| 91免费看`日韩一区二区| 欧美一级精品在线| 欧美激情一区二区在线| 亚洲成人tv网| 91麻豆国产香蕉久久精品| 欧美成人一级视频| 亚洲18色成人| jiyouzz国产精品久久| 欧美v日韩v国产v| 麻豆视频观看网址久久| 欧美人伦禁忌dvd放荡欲情| 一区二区在线观看免费视频播放| 国产91精品露脸国语对白| 欧美日韩一区二区三区四区 | 日韩av不卡一区二区| jlzzjlzz亚洲女人18| 国产日韩欧美激情| 韩国中文字幕2020精品| 欧美日韩免费在线视频| 国产欧美日韩另类一区| 日本欧美一区二区三区| 一本到三区不卡视频| 亚洲一区电影777| 亚洲精品欧美激情| 在线综合视频播放| 在线视频你懂得一区| 国产福利电影一区二区三区| 国产黄色精品视频| 最好看的中文字幕久久| 亚洲你懂的在线视频| 天堂在线亚洲视频| 欧美视频一区二区| 午夜久久久久久久久久一区二区| 久久9热精品视频| 极品销魂美女一区二区三区| 激情六月婷婷久久| 99久久99久久综合| 日韩三级伦理片妻子的秘密按摩| 亚洲一区二区3| 欧美精品乱码久久久久久按摩| 中文字幕日本乱码精品影院| 亚洲最大成人网4388xx| 久久国产精品99久久久久久老狼 | 中文字幕在线观看一区| 久久国产麻豆精品| 北条麻妃国产九九精品视频| 亚洲欧洲三级电影| 成人a区在线观看| 国产精品全国免费观看高清 | 中文一区在线播放| 成人丝袜18视频在线观看| 精品久久久久久久久久久院品网| 精品88久久久久88久久久| 日本一区二区三级电影在线观看| 国产精品自拍一区| 亚洲一区二区黄色| 欧美日韩一级黄| 成人一道本在线| 欧美日韩专区在线| 亚洲成人免费视频| 国产成都精品91一区二区三| 视频在线观看国产精品| 国产精品久久久久久久裸模 | 一区二区三区中文字幕| 成人午夜在线播放| 亚洲人吸女人奶水| 欧美美女一区二区在线观看| 99视频热这里只有精品免费| 秋霞午夜鲁丝一区二区老狼| 看电影不卡的网站| 国产91丝袜在线播放九色| 中文字幕+乱码+中文字幕一区| 99久久久无码国产精品| 久久人人爽爽爽人久久久| 日本在线不卡视频| 九色|91porny| 国产精品人妖ts系列视频| 欧美日本韩国一区| 精品卡一卡二卡三卡四在线| 精品视频免费看| 亚洲天堂中文字幕| 在线观看网站黄不卡| 91国模大尺度私拍在线视频| 成人国产电影网| 亚洲国产精品麻豆| 精品视频在线看| 国产精品久久久久aaaa| 久久久久久影视| 亚洲激情欧美激情| 欧美精品xxxxbbbb| 99re这里都是精品| 风间由美一区二区三区在线观看| 亚洲国产精品久久久久婷婷884 | 极品少妇xxxx精品少妇偷拍| 亚洲国产精品ⅴa在线观看| 久久精品夜色噜噜亚洲aⅴ| 99国产精品久久久| 成人少妇影院yyyy| 五月综合激情婷婷六月色窝| 有坂深雪av一区二区精品| 国产宾馆实践打屁股91| 欧美三级资源在线| 国产精品久久夜| 亚洲国产aⅴ天堂久久| 国产午夜精品一区二区三区嫩草 | 日韩写真欧美这视频| 中文字幕中文字幕在线一区| 日韩一区二区麻豆国产| 久久色中文字幕| 亚洲精品乱码久久久久久日本蜜臀| 亚洲国产精品一区二区久久| 国产精品久久久久久亚洲伦| 国模娜娜一区二区三区| 亚洲精品在线电影| 国产91露脸合集magnet| 国产精品视频在线看| 精品88久久久久88久久久| 亚洲亚洲精品在线观看| 在线国产亚洲欧美| 九九精品一区二区| 欧美肥大bbwbbw高潮| 99久久伊人精品| 亚洲影视在线播放| 91福利在线导航| 国产一区二区伦理片| 中文在线免费一区三区高中清不卡 | 亚洲色图一区二区| 久久久久久一二三区| 99精品视频一区| 日本欧美一区二区在线观看| 国产精品美女久久久久久久久久久| 男男视频亚洲欧美| 欧美日韩激情一区二区| 福利91精品一区二区三区| 国产欧美中文在线| 欧美xxx久久| 这里是久久伊人| 国产**成人网毛片九色 | 午夜精品久久久久久久久久久 | 一色屋精品亚洲香蕉网站| 欧美一区二区二区| 亚洲6080在线| 亚洲一区二区在线视频| av在线一区二区三区| 亚洲人成在线观看一区二区| 国产日韩视频一区二区三区| 色哟哟一区二区|