mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 19:19:19 +02:00
DBG: Small optimizations for array watches (test)
git-svn-id: trunk@39464 -
This commit is contained in:
parent
b4c7cffa66
commit
97c63bee5e
@ -308,7 +308,7 @@
|
|||||||
{$IFDEF Global_Type}
|
{$IFDEF Global_Type}
|
||||||
//type
|
//type
|
||||||
TClassTCast = class public b: Integer; end;
|
TClassTCast = class public b: Integer; end;
|
||||||
TClassTCastObject = class(TObject) public b: Integer; end;
|
TClassTCastObject = class(TObject) public b: Integer; l: Array of Integer; end;
|
||||||
TClassTCastComponent = class(TComponent) public b: Integer; end;
|
TClassTCastComponent = class(TComponent) public b: Integer; end;
|
||||||
|
|
||||||
{$IFDEF USE_W1}
|
{$IFDEF USE_W1}
|
||||||
@ -359,6 +359,8 @@
|
|||||||
// Declared TObject
|
// Declared TObject
|
||||||
VarOTestTCast := TClassTCast.Create;
|
VarOTestTCast := TClassTCast.Create;
|
||||||
VarOTestTCastObj := TClassTCastObject.Create;
|
VarOTestTCastObj := TClassTCastObject.Create;
|
||||||
|
SetLength(TClassTCastObject(VarOTestTCastObj).l, 3);
|
||||||
|
TClassTCastObject(VarOTestTCastObj).l[1] := 1144;
|
||||||
VarOTestTCastComp := TClassTCastComponent.Create(nil);
|
VarOTestTCastComp := TClassTCastComponent.Create(nil);
|
||||||
VarOTestTCast2 := TClassTCast.Create;
|
VarOTestTCast2 := TClassTCast.Create;
|
||||||
VarNOTestTCast := nil;
|
VarNOTestTCast := nil;
|
||||||
|
@ -606,14 +606,16 @@ end;
|
|||||||
|
|
||||||
procedure TTestGdbType.TestExpressionBreaker;
|
procedure TTestGdbType.TestExpressionBreaker;
|
||||||
|
|
||||||
procedure InitExpr(e: String; var b: TGDBExpression; out r: PGDBPTypeRequest; out v: Boolean);
|
procedure InitExpr(e: String; var b: TGDBExpression; out r: PGDBPTypeRequest; out v: Boolean; rewritten: string = '');
|
||||||
begin
|
begin
|
||||||
FreeAndNil(b);
|
FreeAndNil(b);
|
||||||
r := nil;
|
r := nil;
|
||||||
b := TGDBExpression.Create(e);
|
b := TGDBExpression.Create(e);
|
||||||
debugln('##### '+e);
|
debugln('##### '+e);
|
||||||
DumpGExp(b);
|
DumpGExp(b);
|
||||||
AssertEquals(e+' as text', e, b.Text);
|
if rewritten <> ''
|
||||||
|
then AssertEquals(e+' as text', rewritten, b.Text)
|
||||||
|
else AssertEquals(e+' as text', e, b.Text);
|
||||||
v := b.NeedValidation(r);
|
v := b.NeedValidation(r);
|
||||||
if r <> nil then DumpReq(r);
|
if r <> nil then DumpReq(r);
|
||||||
debugln;
|
debugln;
|
||||||
@ -799,13 +801,13 @@ begin
|
|||||||
InitExpr(n, b, r, v);
|
InitExpr(n, b, r, v);
|
||||||
|
|
||||||
n := 'abc[1,2,3].x[1]';
|
n := 'abc[1,2,3].x[1]';
|
||||||
InitExpr(n, b, r, v);
|
InitExpr(n, b, r, v, 'abc[1][2][3].x[1]');
|
||||||
|
|
||||||
n := 'abc[1,2,3].x and abc[1,2][3].y';
|
n := 'abc[1,2,3].x and abc[1,2][3].y';
|
||||||
InitExpr(n, b, r, v);
|
InitExpr(n, b, r, v, 'abc[1][2][3].x and abc[1][2][3].y');
|
||||||
|
|
||||||
n := '1+abc[1,2,3].x and b . cc [ 1 , 2 or x ]';
|
n := '1+abc[1,2,3].x and b . cc [ 1 , 2 or x ]';
|
||||||
InitExpr(n, b, r, v);
|
InitExpr(n, b, r, v, '1+abc[1][2][3].x and b . cc [ 1 ][ 2 or x ]');
|
||||||
|
|
||||||
|
|
||||||
b.Free;
|
b.Free;
|
||||||
|
@ -726,7 +726,6 @@ begin
|
|||||||
{%region * Classes * }
|
{%region * Classes * }
|
||||||
|
|
||||||
AddFmtDef('ArgTFoo', Match_ArgTFoo, skClass, 'TFoo', []);
|
AddFmtDef('ArgTFoo', Match_ArgTFoo, skClass, 'TFoo', []);
|
||||||
AddFmtDef('TFoo(ArgTFoo)',Match_ArgTFoo, skClass, 'TFoo', []);
|
|
||||||
AddFmtDef('@ArgTFoo', '(P|\^T)Foo\('+Match_Pointer, skPointer, '(P|\^T)Foo', [fTpMtch]);
|
AddFmtDef('@ArgTFoo', '(P|\^T)Foo\('+Match_Pointer, skPointer, '(P|\^T)Foo', [fTpMtch]);
|
||||||
// Only with brackets...
|
// Only with brackets...
|
||||||
AddFmtDef('(@ArgTFoo)^', Match_ArgTFoo, skClass, 'TFoo', []);
|
AddFmtDef('(@ArgTFoo)^', Match_ArgTFoo, skClass, 'TFoo', []);
|
||||||
@ -742,7 +741,6 @@ begin
|
|||||||
|
|
||||||
|
|
||||||
AddFmtDef('VArgTFoo', Match_ArgTFoo, skClass, 'TFoo', []);
|
AddFmtDef('VArgTFoo', Match_ArgTFoo, skClass, 'TFoo', []);
|
||||||
AddFmtDef('TFoo(VArgTFoo)',Match_ArgTFoo, skClass, 'TFoo', []);
|
|
||||||
AddFmtDef('@VArgTFoo', '(P|\^T)Foo\('+Match_Pointer, skPointer, '(P|\^T)Foo', [fTpMtch]);
|
AddFmtDef('@VArgTFoo', '(P|\^T)Foo\('+Match_Pointer, skPointer, '(P|\^T)Foo', [fTpMtch]);
|
||||||
AddFmtDef('(@VArgTFoo)^', Match_ArgTFoo, skClass, 'TFoo', []);
|
AddFmtDef('(@VArgTFoo)^', Match_ArgTFoo, skClass, 'TFoo', []);
|
||||||
|
|
||||||
@ -776,6 +774,16 @@ begin
|
|||||||
Add('ArgTFoo', wdfPointer, Match_Pointer, skClass, 'TFoo', []);
|
Add('ArgTFoo', wdfPointer, Match_Pointer, skClass, 'TFoo', []);
|
||||||
Add('ArgTFoo', wdfMemDump, ':.*?6D 65 6D 20 6F 66 20 54 46 6F 6F', skClass, 'TFoo', []);
|
Add('ArgTFoo', wdfMemDump, ':.*?6D 65 6D 20 6F 66 20 54 46 6F 6F', skClass, 'TFoo', []);
|
||||||
|
|
||||||
|
{%region * Classes * typecasts }
|
||||||
|
// typecast does not change class
|
||||||
|
AddFmtDef('TFoo(ArgTFoo)',Match_ArgTFoo, skClass, 'TFoo', []);
|
||||||
|
AddFmtDef('TFoo(VArgTFoo)',Match_ArgTFoo, skClass, 'TFoo', []);
|
||||||
|
// typecast does change class
|
||||||
|
AddFmtDef('TObject(ArgTFoo)', '<TObject> = \{.*(<|vptr\$)', skClass, 'TObject', []);
|
||||||
|
AddFmtDef('TObject(VArgTFoo)', '<TObject> = \{.*(<|vptr\$)', skClass, 'TObject', []);
|
||||||
|
{%endregion * Classes * typecasts}
|
||||||
|
|
||||||
|
|
||||||
(*
|
(*
|
||||||
|
|
||||||
AddFmtDef('ArgTSamePFoo', '', sk, 'TSamePFoo', []);
|
AddFmtDef('ArgTSamePFoo', '', sk, 'TSamePFoo', []);
|
||||||
@ -827,7 +835,7 @@ begin
|
|||||||
//AddFmtDef('not(ArgTFoo=nil)', 'True', skSimple, 'bool', []);
|
//AddFmtDef('not(ArgTFoo=nil)', 'True', skSimple, 'bool', []);
|
||||||
//AddFmtDef('ArgTFoo<>nil', 'True', skSimple, 'bool', []);
|
//AddFmtDef('ArgTFoo<>nil', 'True', skSimple, 'bool', []);
|
||||||
|
|
||||||
{ casting }
|
{%region * Classes * typecasts }
|
||||||
{ gdb below 6.7.50 with stabs may fail }
|
{ gdb below 6.7.50 with stabs may fail }
|
||||||
r := AddFmtDef('VarOTestTCast2', [defFullTypeInfo],
|
r := AddFmtDef('VarOTestTCast2', [defFullTypeInfo],
|
||||||
MatchClass('TObject'), skClass, 'TObject', []);
|
MatchClass('TObject'), skClass, 'TObject', []);
|
||||||
@ -878,6 +886,12 @@ begin
|
|||||||
//if (DebuggerInfo.Version > 0) and (DebuggerInfo.Version < 060750) then
|
//if (DebuggerInfo.Version > 0) and (DebuggerInfo.Version < 060750) then
|
||||||
UpdRes(r, stStabs, '.', skClass, '.', [fTpMtch]);
|
UpdRes(r, stStabs, '.', skClass, '.', [fTpMtch]);
|
||||||
|
|
||||||
|
// access dyn array in casted object
|
||||||
|
|
||||||
|
{%endregion * Classes * typecasts}
|
||||||
|
r := AddFmtDef('TClassTCastObject(VarOTestTCastObj).l[1]', [], '1144', skSimple, 'Integer|LongInt', [fTpMtch]);
|
||||||
|
// if (DebuggerInfo.Version > 0) and (DebuggerInfo.Version < 060750) then UpdRes(r, stStabs, '.', skClass, '.', [fTpMtch]);
|
||||||
|
|
||||||
|
|
||||||
{%endregion * Classes * }
|
{%endregion * Classes * }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user