FPDebug: fix Value handling / typecasts

git-svn-id: trunk@43904 -
This commit is contained in:
martin 2014-02-05 12:12:29 +00:00
parent b7d1f04c66
commit c20494536f
3 changed files with 44 additions and 10 deletions

View File

@ -1947,7 +1947,7 @@ function TDbgDwarfNumericSymbolValue.GetAsCardinal: QWord;
var
addr: TDbgPtr;
begin
// TODO: memory representation of values is not dwar, but platform - move
// TODO: memory representation of values is not dwarf, but platform - move
if doneUInt in FEvaluated then begin
Result := FValue;
exit;

View File

@ -795,19 +795,19 @@ end;
function TFpPascalExpressionPartBracketArgumentList.DoGetResultValue: TDbgSymbolValue;
var
tmp: TDbgSymbolValue;
tmp, tmp2: TDbgSymbolValue;
begin
Result := nil;
if (Count = 2) then begin
Result := Items[0].ResultValue;
if (Result <> nil) and (Result.DbgSymbol <> nil) and
(Result.DbgSymbol.SymbolType = stType)
tmp := Items[0].ResultValue;
if (tmp <> nil) and (tmp.DbgSymbol <> nil) and
(tmp.DbgSymbol.SymbolType = stType)
then begin
// This is a typecast
tmp := Items[1].ResultValue;
if tmp <> nil then
Result := Result.DbgSymbol.TypeCastValue(tmp);
tmp2 := Items[1].ResultValue;
if tmp2 <> nil then
Result := tmp.DbgSymbol.TypeCastValue(tmp2);
if Result <> nil then
{$IFDEF WITH_REFCOUNT_DEBUG}Result.DbgRenameReference(nil, 'DoGetResultValue'){$ENDIF};
exit;

View File

@ -423,11 +423,11 @@ begin
ExpResult(svfInteger, -299);
ExpFlags([svfInteger, svfOrdinal, svfAddress], [svfDataAddress]); // svfSize;
StartTest('PInt(GlobTestSetup1Pointer)^', skInteger, [ttHasType]);
StartTest('LongInt(pointer(pi)^)', skInteger, [ttHasType]);
ExpResult(svfInteger, -299);
ExpFlags([svfInteger, svfOrdinal, svfAddress], [svfDataAddress]); // svfSize;
StartTest('LongInt(pointer(pi)^)', skInteger, [ttHasType]);
StartTest('PInt(GlobTestSetup1Pointer)^', skInteger, [ttHasType]);
ExpResult(svfInteger, -299);
ExpFlags([svfInteger, svfOrdinal, svfAddress], [svfDataAddress]); // svfSize;
@ -435,6 +435,40 @@ begin
ExpResult(svfInteger, -299);
ExpFlags([svfInteger, svfOrdinal, svfAddress], [svfDataAddress]); // svfSize;
StartTest('PInt(GlobTestSetup1QWord)^', skInteger, [ttHasType]);
ExpResult(svfInteger, -299);
ExpFlags([svfInteger, svfOrdinal, svfAddress], [svfDataAddress]); // svfSize;
StartInvalTest('LongInt(GlobTestSetup1QWord^)', '');
//StartTest('LongInt(GlobTestSetup1QWord^)', skInteger, [ttHasType]);
//ExpResult(svfInteger, -299);
//ExpFlags([svfInteger, svfOrdinal, svfAddress], [svfDataAddress]); // svfSize;
ImageLoader.TestStackFrame.pi := @ImageLoader.TestStackFrame.Obj1;
GlobTestSetup1Pointer := @ImageLoader.TestStackFrame.Obj1;
GlobTestSetup1QWord := QWord(@ImageLoader.TestStackFrame.Obj1);
StartTest('TTestSetup1Class(pi^).FWord', skCardinal, [ttHasType]);
ExpResult(svfCardinal, 1019);
ExpFlags([svfCardinal, svfOrdinal, svfAddress]); // svfSize; //
StartTest('PTestSetup1Class(pi)^.FWord', skCardinal, [ttHasType]);
ExpResult(svfCardinal, 1019);
ExpFlags([svfCardinal, svfOrdinal, svfAddress]); // svfSize; //
StartTest('TTestSetup1Class(GlobTestSetup1Pointer^).FWord', skCardinal, [ttHasType]);
ExpResult(svfCardinal, 1019);
ExpFlags([svfCardinal, svfOrdinal, svfAddress]); // svfSize; //
StartTest('PTestSetup1Class(GlobTestSetup1Pointer)^.FWord', skCardinal, [ttHasType]);
ExpResult(svfCardinal, 1019);
ExpFlags([svfCardinal, svfOrdinal, svfAddress]); // svfSize; //
StartTest('PTestSetup1Class(GlobTestSetup1QWord)^.FWord', skCardinal, [ttHasType]);
ExpResult(svfCardinal, 1019);
ExpFlags([svfCardinal, svfOrdinal, svfAddress]); // svfSize; //
///////////////////////////
finally