Browse Source

Console: Indexing using the indexer property

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4348 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 17 years ago
parent
commit
09ca330bb6
  1. 23
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/EvaluateAstVisitor.cs
  2. 4
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/AstEval.cs

23
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/EvaluateAstVisitor.cs

@ -81,15 +81,26 @@ namespace Debugger.AddIn @@ -81,15 +81,26 @@ namespace Debugger.AddIn
public override object VisitIndexerExpression(IndexerExpression indexerExpression, object data)
{
List<int> indexes = new List<int>();
List<Value> indexes = new List<Value>();
foreach(Expression indexExpr in indexerExpression.Indexes) {
Value indexValue = (Value)indexExpr.AcceptVisitor(this, null);
if (!indexValue.Type.IsInteger) throw new GetValueException("Integer expected");
indexes.Add((int)indexValue.PrimitiveValue);
Value indexValue = ((Value)indexExpr.AcceptVisitor(this, null)).GetPermanentReference();
indexes.Add(indexValue);
}
Value target = (Value)indexerExpression.TargetObject.AcceptVisitor(this, null);
if (!target.Type.IsArray) throw new GetValueException("Target is not array");
return target.GetArrayElement(indexes.ToArray());
if (target.Type.IsArray) {
List<int> intIndexes = new List<int>();
foreach(Value index in indexes) {
if (!index.Type.IsInteger) throw new GetValueException("Integer expected for indexer");
intIndexes.Add((int)index.PrimitiveValue);
}
return target.GetArrayElement(intIndexes.ToArray());
}
PropertyInfo pi = target.Type.GetProperty("Item");
if (pi == null) throw new GetValueException("The object does not have an indexer property");
return target.GetPropertyValue(pi, indexes.ToArray());
}
public override object VisitInvocationExpression(InvocationExpression invocationExpression, object data)

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

@ -81,8 +81,8 @@ namespace Debugger.Tests { @@ -81,8 +81,8 @@ namespace Debugger.Tests {
<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>
<Eval> list[1] = e </Eval>
<Eval> list[index] = o </Eval>
<ProcessExited />
</Test>
</DebuggerTests>

Loading…
Cancel
Save