public FieldValueReference (EvaluationContext ctx, CorValRef thisobj, CorDebugType type, FieldDefinition field, string vname, ObjectValueFlags vflags) : base (ctx)
		{
			this.thisobj = thisobj;
			this.type = type;
			this.field = field;
			this.vname = vname;
			if (field.IsStatic)
				this.thisobj = null;

			flags = vflags | GetFlags (field);

			loader = delegate {
				return ((CorValRef)Value).Val;
			};
		}
		public CorDebugValue RuntimeInvoke (CorDebugFunction function, CorDebugType[] typeArgs, CorDebugValue thisObj, CorDebugValue[] arguments)
		{
			return Session.RuntimeInvoke (this, function, typeArgs, thisObj, arguments);
		}
		public CorDebugValue RuntimeInvoke (CorEvaluationContext corEvaluationContext, CorDebugFunction function, CorDebugType[] typeArgs, CorDebugValue thisObj, CorDebugValue[] arguments)
		{
			return null;
		}
		public CorDebugValue NewArray (CorEvaluationContext ctx, CorDebugType elemType, int size)
		{
			return null;
//			ManualResetEvent doneEvent = new ManualResetEvent (false);
//			CorDebugValue result = null;
//
//			EvalEventHandler completeHandler = delegate (object o, CorEvalEventArgs eargs) {
//				OnEndEvaluating ();
//				result = eargs.Eval.Result;
//				doneEvent.Set ();
//				eargs.Continue = false;
//			};
//
//			EvalEventHandler exceptionHandler = delegate (object o, CorEvalEventArgs eargs) {
//				OnEndEvaluating ();
//				result = eargs.Eval.Result;
//				doneEvent.Set ();
//				eargs.Continue = false;
//			};
//
//			try {
//				process.OnEvalComplete += completeHandler;
//				process.OnEvalException += exceptionHandler;
//
//				ctx.Eval.NewParameterizedArray (elemType, 1, 1, 0);
//				process.SetAllThreadsDebugState (CorDebugThreadState.THREAD_SUSPEND, ctx.Thread);
//				OnStartEvaluating ();
//				ClearEvalStatus ();
//				process.Continue (false);
//
//				if (doneEvent.WaitOne (ctx.Options.EvaluationTimeout, false))
//					return result;
//				else
//					return null;
//			} finally {
//				process.OnEvalComplete -= completeHandler;
//				process.OnEvalException -= exceptionHandler;
//			}
		}
		public FieldValueReference (EvaluationContext ctx, CorValRef thisobj, CorDebugType type, FieldDefinition field)
			: this (ctx, thisobj, type, field, null, ObjectValueFlags.Field)
		{
		}
		public PropertyValueReference (EvaluationContext ctx, PropertyDefinition prop, CorValRef thisobj, CorDebugType declaringType, CorValRef[] index)
				: base (ctx)
		{
			this.prop = prop;
			this.declaringType = declaringType;
			this.module = declaringType.Class.Assembly;
			this.index = index;
			if (!prop.GetMethod.IsStatic)
				this.thisobj = thisobj;
	
			flags = GetFlags (prop);
	
			loader = delegate {
				return ((CorValRef)Value).Val;
			};
		}
		public PropertyValueReference (EvaluationContext ctx, PropertyDefinition prop, CorValRef thisobj, CorDebugType declaringType)
				: this (ctx, prop, thisobj, declaringType, null)
		{
		}