Browse Source

Console: Indexing of arrays using literal integers;

DebugType.IsInteger and DebugType.IsPrimitive now return true even for integers boxed on the heap

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4346 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 17 years ago
parent
commit
affaea8a94
  1. 28
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType-Helpers.cs
  2. 26
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs
  3. 37
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/AstEval.cs
  4. 6
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DebugTypes.cs

28
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType-Helpers.cs

@ -319,20 +319,20 @@ namespace Debugger.MetaData @@ -319,20 +319,20 @@ namespace Debugger.MetaData
{
switch(corElementType) {
case CorElementType.BOOLEAN: return typeof(System.Boolean);
case CorElementType.CHAR: return typeof(System.Char);
case CorElementType.I1: return typeof(System.SByte);
case CorElementType.U1: return typeof(System.Byte);
case CorElementType.I2: return typeof(System.Int16);
case CorElementType.U2: return typeof(System.UInt16);
case CorElementType.I4: return typeof(System.Int32);
case CorElementType.U4: return typeof(System.UInt32);
case CorElementType.I8: return typeof(System.Int64);
case CorElementType.U8: return typeof(System.UInt64);
case CorElementType.R4: return typeof(System.Single);
case CorElementType.R8: return typeof(System.Double);
case CorElementType.I: return typeof(System.IntPtr);
case CorElementType.U: return typeof(System.UIntPtr);
case CorElementType.STRING: return typeof(System.String);
case CorElementType.CHAR: return typeof(System.Char);
case CorElementType.I1: return typeof(System.SByte);
case CorElementType.U1: return typeof(System.Byte);
case CorElementType.I2: return typeof(System.Int16);
case CorElementType.U2: return typeof(System.UInt16);
case CorElementType.I4: return typeof(System.Int32);
case CorElementType.U4: return typeof(System.UInt32);
case CorElementType.I8: return typeof(System.Int64);
case CorElementType.U8: return typeof(System.UInt64);
case CorElementType.R4: return typeof(System.Single);
case CorElementType.R8: return typeof(System.Double);
case CorElementType.I: return typeof(System.IntPtr);
case CorElementType.U: return typeof(System.UIntPtr);
case CorElementType.STRING: return typeof(System.String);
default: return null;
}
}

26
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs

@ -237,7 +237,7 @@ namespace Debugger.MetaData @@ -237,7 +237,7 @@ namespace Debugger.MetaData
[Tests.Ignore]
public bool IsPrimitive {
get {
return this.Kind == DebugTypeKind.Primitive;
return this.PrimitiveType != null;
}
}
@ -245,16 +245,17 @@ namespace Debugger.MetaData @@ -245,16 +245,17 @@ namespace Debugger.MetaData
[Tests.Ignore]
public bool IsInteger {
get {
return this.corElementType == CorElementType.I1 ||
this.corElementType == CorElementType.U1 ||
this.corElementType == CorElementType.I2 ||
this.corElementType == CorElementType.U2 ||
this.corElementType == CorElementType.I4 ||
this.corElementType == CorElementType.U4 ||
this.corElementType == CorElementType.I8 ||
this.corElementType == CorElementType.U8 ||
this.corElementType == CorElementType.I ||
this.corElementType == CorElementType.U;
switch (this.PrimitiveType.FullName) {
case "System.SByte":
case "System.Byte":
case "System.Int16":
case "System.UInt16":
case "System.Int32":
case "System.UInt32":
case "System.Int64":
case "System.UInt64": return true;
default: return false;
}
}
}
@ -670,7 +671,8 @@ namespace Debugger.MetaData @@ -670,7 +671,8 @@ namespace Debugger.MetaData
}
if (this.IsPrimitive) {
return other.IsPrimitive &&
other.corElementType == this.corElementType;
other.PrimitiveType == this.PrimitiveType &&
other.IsValueType == this.IsValueType;
}
if (this.IsClass || this.IsValueType) {
return (other.IsClass || other.IsValueType) &&

37
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/AstEval.cs

@ -14,10 +14,12 @@ namespace Debugger.Tests.TestPrograms @@ -14,10 +14,12 @@ namespace Debugger.Tests.TestPrograms
{
public static void Main()
{
char[] array1 = "Hello".ToCharArray();
int index = 4;
char[] array = "Hello".ToCharArray();
char[] array2 = "world".ToCharArray();
char[][] arrays = new char[][] {array1, array2};
List<char> list = new List<char>(array1);
char[][] arrays = new char[][] {array, array2};
List<char> list = new List<char>(array);
System.Diagnostics.Debugger.Break();
}
@ -37,16 +39,28 @@ namespace Debugger.Tests { @@ -37,16 +39,28 @@ namespace Debugger.Tests {
{
StartTest("AstEval.cs");
Eval("array");
Eval("arrays");
Eval("array[1]");
Eval("array[index]");
Eval("array[index - 1]");
Eval("list");
Eval("list[1]");
Eval("list[index]");
EndTest();
}
void Eval(string expr)
{
Value result = AstEvaluator.Evaluate(expr, SupportedLanguage.CSharp, process.SelectedStackFrame);
string restultFmted = AstEvaluator.FormatValue(result);
ObjectDump(expr, restultFmted);
string restultFmted;
try {
Value result = AstEvaluator.Evaluate(expr, SupportedLanguage.CSharp, process.SelectedStackFrame);
restultFmted = AstEvaluator.FormatValue(result);
} catch (GetValueException e) {
restultFmted = "Error: " + e.Message;
}
ObjectDump("Eval", " " + expr + " = " + restultFmted + " ");
}
}
}
@ -60,8 +74,15 @@ namespace Debugger.Tests { @@ -60,8 +74,15 @@ namespace Debugger.Tests {
<ProcessStarted />
<ModuleLoaded>mscorlib.dll (No symbols)</ModuleLoaded>
<ModuleLoaded>AstEval.exe (Has symbols)</ModuleLoaded>
<DebuggingPaused>Break AstEval.cs:22,4-22,40</DebuggingPaused>
<arrays>Char[][] {Char[] {H, e, l, l, o}, Char[] {w, o, r, l, d}}</arrays>
<DebuggingPaused>Break AstEval.cs:24,4-24,40</DebuggingPaused>
<Eval> array = Char[] {H, e, l, l, o} </Eval>
<Eval> arrays = Char[][] {Char[] {H, e, l, l, o}, Char[] {w, o, r, l, d}} </Eval>
<Eval> array[1] = e </Eval>
<Eval> array[index] = o </Eval>
<Eval> array[index - 1] = Error: BinaryOperator: Subtract </Eval>
<Eval> list = System.Collections.Generic.List`1[System.Char] </Eval>
<Eval> list[1] = Error: Target is not array </Eval>
<Eval> list[index] = Error: Target is not array </Eval>
<ProcessExited />
</Test>
</DebuggerTests>

6
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DebugTypes.cs

@ -653,7 +653,7 @@ namespace Debugger.Tests { @@ -653,7 +653,7 @@ namespace Debugger.Tests {
Type="System.Int32">
<Type>
<DebugType
BaseType="System.ValueType"
BaseType="System.Object"
ElementType="null"
FullName="System.Int32"
GenericArguments="{}"
@ -1186,7 +1186,7 @@ namespace Debugger.Tests { @@ -1186,7 +1186,7 @@ namespace Debugger.Tests {
Type="System.Int32">
<Type>
<DebugType
BaseType="System.ValueType"
BaseType="System.Object"
ElementType="null"
FullName="System.Int32"
GenericArguments="{}"
@ -1213,7 +1213,7 @@ namespace Debugger.Tests { @@ -1213,7 +1213,7 @@ namespace Debugger.Tests {
Type="System.Int32">
<Type>
<DebugType
BaseType="System.ValueType"
BaseType="System.Object"
ElementType="null"
FullName="System.Int32"
GenericArguments="{}"

Loading…
Cancel
Save