1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
using System;
namespace Mono.Debugger.Languages.Native
{
internal class NativeArrayObject : TargetArrayObject
{
public NativeArrayObject (NativeArrayType type, TargetLocation location,
int lower_bound, int upper_bound)
: base (type, location)
{
bounds = new ArrayBounds [1];
bounds [0] = new ArrayBounds (lower_bound, upper_bound - lower_bound);
}
protected override void DoGetArrayBounds (TargetMemoryAccess target)
{ }
internal override TargetObject GetElement (TargetMemoryAccess target, int[] indices)
{
if (indices.Length != 1)
throw new ArgumentException ();
int index = indices [0];
int size = Type.ElementType.Size;
TargetLocation new_location = Location.GetLocationAtOffset (index * size);
if (Type.ElementType.IsByRef)
new_location = new_location.GetDereferencedLocation ();
return Type.ElementType.GetObject (target, new_location);
}
internal override void SetElement (TargetMemoryAccess target, int[] indices,
TargetObject obj)
{
throw new NotSupportedException ();
}
internal override long GetDynamicSize (TargetMemoryAccess target, TargetBlob blob,
TargetLocation location,
out TargetLocation dynamic_location)
{
throw new InvalidOperationException ();
}
internal override string Print (TargetMemoryAccess target)
{
if (Location.HasAddress)
return String.Format ("{0}", Location.GetAddress (target));
else
return String.Format ("{0}", Location);
}
public override bool HasClassObject {
get { return false; }
}
internal override TargetClassObject GetClassObject (TargetMemoryAccess target)
{
throw new InvalidOperationException ();
}
}
}
|