//
//
//
//
// $Revision$
//
namespace Debugger.Expressions
{
///
/// A placeholder expression which can not be evaluated.
///
public class DereferenceExpression: Expression
{
Expression targetObject;
public Expression TargetObject {
get { return targetObject; }
}
public DereferenceExpression(Expression targetObject)
{
this.targetObject = targetObject;
}
public override string Code {
get { return "*" + targetObject.Code; }
}
public override string CodeTail {
get { return base.CodeTail; }
}
protected override Value EvaluateInternal(StackFrame context)
{
Value targetValue = targetObject.Evaluate(context);
if (!targetValue.Type.IsPointer) throw new GetValueException("Target object is not a pointer");
return targetValue.Dereference();
}
#region GetHashCode and Equals
public override int GetHashCode()
{
int hashCode = 0;
unchecked {
if (targetObject != null) hashCode += 1000000007 * targetObject.GetHashCode();
}
return hashCode;
}
public override bool Equals(object obj)
{
DereferenceExpression other = obj as DereferenceExpression;
if (other == null) return false;
return object.Equals(this.targetObject, other.targetObject);
}
#endregion
}
}