codetools: extended code context infos for predefined identifiers

git-svn-id: trunk@20891 -
This commit is contained in:
mattias 2009-07-18 18:38:01 +00:00
parent 201de2d822
commit 8a18239e07
2 changed files with 31 additions and 16 deletions

View File

@ -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;

View File

@ -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;