[sdb] Fix a deadlock in the assembly cache invalidation code.
[mono.git] / mcs / class / Mono.Debugger.Soft / Mono.Debugger.Soft / LocalVariable.cs
1 using System;
2
3 namespace Mono.Debugger.Soft
4 {
5         public class LocalVariable : Mirror {
6
7                 MethodMirror method;
8                 string name;
9                 int index;
10                 long type_id;
11                 TypeMirror t;
12                 bool is_arg;
13                 int live_range_start, live_range_end;
14
15             internal LocalVariable (VirtualMachine vm, MethodMirror method, int index, long type_id, string name, int live_range_start, int live_range_end, bool is_arg) : base (vm, 0) {
16                         this.method = method;
17                         this.index = index;
18                         this.name = name;
19                         this.type_id = type_id;
20                         this.is_arg = is_arg;
21                         this.live_range_start = live_range_start;
22                         this.live_range_end = live_range_end;
23                 }
24
25                 public string Name {
26                         get {
27                                 return name;
28                         }
29                 }
30
31                 public int Index {
32                         get {
33                                 return index;
34                         }
35                 }
36
37                 public TypeMirror Type {
38                         get {
39                                 if (t == null)
40                                         t = vm.GetType (type_id);
41                                 return t;
42                         }
43                 }
44
45                 public bool IsArg {
46                         get {
47                                 return is_arg;
48                         }
49                 }
50
51                 public MethodMirror Method {
52                         get {
53                                 return method;
54                         }
55                 }
56
57                 internal int LiveRangeStart {
58                         get {
59                                 return live_range_start;
60                         }
61                 }
62
63                 internal int LiveRangeEnd {
64                         get {
65                                 return live_range_end;
66                         }
67                 }
68
69                 internal int GetValueIndex {
70                         get {
71                                 if (IsArg)
72                                         return (-Index) - 1;
73                                 else
74                                         return Index;
75                         }
76                 }
77         }
78 }
79