* Makefile.am:
[monodevelop.git] / extras / MonoDevelop.Debugger.Mdb / Mono.Debugging.Server.Mdb / FieldReference.cs
blob2083a8fbd0f7662015d3c88c59dd8937d757e030
1 // FieldVariable.cs
2 //
3 // Author:
4 // Lluis Sanchez Gual <lluis@novell.com>
5 //
6 // Copyright (c) 2008 Novell, Inc (http://www.novell.com)
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 // THE SOFTWARE.
28 using System;
29 using Mono.Debugger.Languages;
30 using Mono.Debugger;
31 using Mono.Debugging.Client;
33 namespace DebuggerServer
35 public class FieldReference: ValueReference
37 TargetStructType type;
38 TargetFieldInfo field;
39 TargetStructObject thisobj;
41 public FieldReference (EvaluationContext ctx, TargetStructObject thisobj, TargetStructType type, TargetFieldInfo field): base (ctx)
43 this.type = type;
44 this.field = field;
45 if (!field.IsStatic)
46 this.thisobj = thisobj;
49 public override TargetType Type {
50 get {
51 return field.Type;
55 public override TargetObject Value {
56 get {
57 if (field.HasConstValue)
58 return Context.Frame.Language.CreateInstance (Context.Thread, field.ConstValue);
59 TargetClass cls = type.GetClass (Context.Thread);
60 return ObjectUtil.GetRealObject (Context, cls.GetField (Context.Thread, thisobj, field));
62 set {
63 TargetClass cls = type.GetClass (Context.Thread);
64 cls.SetField (Context.Thread, thisobj, field, value);
68 public override string Name {
69 get {
70 return field.Name;
74 public override ObjectValueFlags Flags {
75 get {
76 ObjectValueFlags flags = ObjectValueFlags.Field | ObjectUtil.GetAccessibility (field.Accessibility);
77 if (field.HasConstValue) flags |= ObjectValueFlags.ReadOnly;
78 return flags;