forked from EvilBeaver/OneScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStackFrame.cs
More file actions
86 lines (71 loc) · 2.19 KB
/
StackFrame.cs
File metadata and controls
86 lines (71 loc) · 2.19 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*----------------------------------------------------------
This Source Code Form is subject to the terms of the
Mozilla Public License, v.2.0. If a copy of the MPL
was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.
----------------------------------------------------------*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
namespace OneScript.DebugProtocol
{
[DataContract]
public class StackFrame : IVariableLocator
{
[DataMember]
public int Index { get; set; }
[DataMember]
public string MethodName { get; set; }
[DataMember]
public int LineNumber { get; set; }
[DataMember]
public string Source { get; set; }
[DataMember]
public Variable[] Variables { get; set; }
public int ThreadId { get; set; }
int IVariableLocator.Count
{
get
{
ThrowIfNoVariables();
return Variables.Length;
}
}
private void ThrowIfNoVariables()
{
if (Variables == null)
throw new InvalidOperationException("No variables aquired yet");
}
Variable IVariableLocator.this[int index]
{
get
{
ThrowIfNoVariables();
return Variables[index];
}
}
IEnumerator<Variable> IEnumerable<Variable>.GetEnumerator()
{
ThrowIfNoVariables();
return ((IEnumerable<Variable>)Variables).GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return ((IVariableLocator) this).GetEnumerator();
}
void IVariableLocator.Hydrate(IDebuggerService process)
{
if (Variables != null)
return;
var variables = process.GetVariables(1, Index, new int[0]);
Variables = variables;
}
public IVariableLocator CreateChildLocator(int variableIndex)
{
return new VariableLocator(Index, variableIndex);
}
}
}