mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 01:19:16 +02:00
codetools: extended code context infos for predefined identifiers
git-svn-id: trunk@20891 -
This commit is contained in:
parent
201de2d822
commit
8a18239e07
@ -269,22 +269,30 @@ type
|
|||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
{ TCodeContextInfo }
|
{ TCodeContextInfo }
|
||||||
|
|
||||||
|
TCodeContextInfoItem = class
|
||||||
|
public
|
||||||
|
Expr: TExpressionType;
|
||||||
|
// compiler predefined proc
|
||||||
|
ProcName: string;
|
||||||
|
Params: TStringList;
|
||||||
|
ResultType: string;
|
||||||
|
end;
|
||||||
|
|
||||||
TCodeContextInfo = class
|
TCodeContextInfo = class
|
||||||
private
|
private
|
||||||
FEndPos: integer;
|
FEndPos: integer;
|
||||||
FItems: PExpressionType;
|
FItems: TFPList; // list of TCodeContextInfoItem
|
||||||
FCount: integer;
|
|
||||||
FParameterIndex: integer;
|
FParameterIndex: integer;
|
||||||
FProcName: string;
|
FProcName: string;
|
||||||
FProcNameAtom: TAtomPosition;
|
FProcNameAtom: TAtomPosition;
|
||||||
FStartPos: integer;
|
FStartPos: integer;
|
||||||
FTool: TFindDeclarationTool;
|
FTool: TFindDeclarationTool;
|
||||||
function GetItems(Index: integer): TExpressionType;
|
function GetItems(Index: integer): TCodeContextInfoItem;
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
function Count: integer;
|
function Count: integer;
|
||||||
property Items[Index: integer]: TExpressionType read GetItems; default;
|
property Items[Index: integer]: TCodeContextInfoItem read GetItems; default;
|
||||||
function Add(const Context: TExpressionType): integer;
|
function Add(const Context: TExpressionType): integer;
|
||||||
procedure Clear;
|
procedure Clear;
|
||||||
property Tool: TFindDeclarationTool read FTool write FTool;
|
property Tool: TFindDeclarationTool read FTool write FTool;
|
||||||
@ -2711,45 +2719,50 @@ end;
|
|||||||
|
|
||||||
{ TCodeContextInfo }
|
{ TCodeContextInfo }
|
||||||
|
|
||||||
function TCodeContextInfo.GetItems(Index: integer): TExpressionType;
|
function TCodeContextInfo.GetItems(Index: integer): TCodeContextInfoItem;
|
||||||
begin
|
begin
|
||||||
Result:=FItems[Index];
|
Result:=TCodeContextInfoItem(FItems[Index]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TCodeContextInfo.Create;
|
constructor TCodeContextInfo.Create;
|
||||||
begin
|
begin
|
||||||
|
FItems:=TFPList.Create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCodeContextInfo.Destroy;
|
destructor TCodeContextInfo.Destroy;
|
||||||
begin
|
begin
|
||||||
Clear;
|
Clear;
|
||||||
|
FreeAndNil(FItems);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCodeContextInfo.Count: integer;
|
function TCodeContextInfo.Count: integer;
|
||||||
begin
|
begin
|
||||||
Result:=FCount;
|
Result:=FItems.Count;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCodeContextInfo.Add(const Context: TExpressionType): integer;
|
function TCodeContextInfo.Add(const Context: TExpressionType): integer;
|
||||||
|
var
|
||||||
|
Item: TCodeContextInfoItem;
|
||||||
begin
|
begin
|
||||||
inc(FCount);
|
Item:=TCodeContextInfoItem.Create;
|
||||||
Result:=Count;
|
Item.Expr:=Context;
|
||||||
ReAllocMem(FItems,SizeOf(TExpressionType)*FCount);
|
Result:=FItems.Add(Item);
|
||||||
FItems[FCount-1]:=Context;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCodeContextInfo.Clear;
|
procedure TCodeContextInfo.Clear;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
FCount:=0;
|
for i:=0 to FItems.Count-1 do
|
||||||
ReAllocMem(FItems,0);
|
TObject(FItems[i]).Free;
|
||||||
|
FItems.Clear;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCodeContextInfo.CalcMemSize: PtrUInt;
|
function TCodeContextInfo.CalcMemSize: PtrUInt;
|
||||||
begin
|
begin
|
||||||
Result:=PtrUInt(InstanceSize)
|
Result:=PtrUInt(InstanceSize)
|
||||||
+PtrUInt(FCount)*SizeOf(TExpressionType)
|
+PtrUInt(TCodeContextInfoItem)*SizeOf(FItems.Count)
|
||||||
+MemSizeString(FProcName);
|
+MemSizeString(FProcName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -326,11 +326,13 @@ var
|
|||||||
CodeTool: TFindDeclarationTool;
|
CodeTool: TFindDeclarationTool;
|
||||||
s: String;
|
s: String;
|
||||||
p: Integer;
|
p: Integer;
|
||||||
|
CurContext: TCodeContextInfoItem;
|
||||||
begin
|
begin
|
||||||
FHints.Clear;
|
FHints.Clear;
|
||||||
if (CodeContexts=nil) or (CodeContexts.Count=0) then exit;
|
if (CodeContexts=nil) or (CodeContexts.Count=0) then exit;
|
||||||
for i:=0 to CodeContexts.Count-1 do begin
|
for i:=0 to CodeContexts.Count-1 do begin
|
||||||
CurExprType:=CodeContexts[i];
|
CurContext:=CodeContexts[i];
|
||||||
|
CurExprType:=CurContext.Expr;
|
||||||
s:=ExpressionTypeDescNames[CurExprType.Desc];
|
s:=ExpressionTypeDescNames[CurExprType.Desc];
|
||||||
if CurExprType.Context.Node<>nil then begin
|
if CurExprType.Context.Node<>nil then begin
|
||||||
CodeNode:=CurExprType.Context.Node;
|
CodeNode:=CurExprType.Context.Node;
|
||||||
|
Loading…
Reference in New Issue
Block a user