From 8a18239e07f993d18d1a6cdf236b15f58e953c67 Mon Sep 17 00:00:00 2001 From: mattias Date: Sat, 18 Jul 2009 18:38:01 +0000 Subject: [PATCH] codetools: extended code context infos for predefined identifiers git-svn-id: trunk@20891 - --- components/codetools/identcompletiontool.pas | 43 +++++++++++++------- ide/codecontextform.pas | 4 +- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/components/codetools/identcompletiontool.pas b/components/codetools/identcompletiontool.pas index 270db1c419..3bcb06fa07 100644 --- a/components/codetools/identcompletiontool.pas +++ b/components/codetools/identcompletiontool.pas @@ -269,22 +269,30 @@ type //---------------------------------------------------------------------------- { TCodeContextInfo } + TCodeContextInfoItem = class + public + Expr: TExpressionType; + // compiler predefined proc + ProcName: string; + Params: TStringList; + ResultType: string; + end; + TCodeContextInfo = class private FEndPos: integer; - FItems: PExpressionType; - FCount: integer; + FItems: TFPList; // list of TCodeContextInfoItem FParameterIndex: integer; FProcName: string; FProcNameAtom: TAtomPosition; FStartPos: integer; FTool: TFindDeclarationTool; - function GetItems(Index: integer): TExpressionType; + function GetItems(Index: integer): TCodeContextInfoItem; public constructor Create; destructor Destroy; override; 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; procedure Clear; property Tool: TFindDeclarationTool read FTool write FTool; @@ -2711,45 +2719,50 @@ end; { TCodeContextInfo } -function TCodeContextInfo.GetItems(Index: integer): TExpressionType; +function TCodeContextInfo.GetItems(Index: integer): TCodeContextInfoItem; begin - Result:=FItems[Index]; + Result:=TCodeContextInfoItem(FItems[Index]); end; constructor TCodeContextInfo.Create; begin - + FItems:=TFPList.Create; end; destructor TCodeContextInfo.Destroy; begin Clear; + FreeAndNil(FItems); inherited Destroy; end; function TCodeContextInfo.Count: integer; begin - Result:=FCount; + Result:=FItems.Count; end; function TCodeContextInfo.Add(const Context: TExpressionType): integer; +var + Item: TCodeContextInfoItem; begin - inc(FCount); - Result:=Count; - ReAllocMem(FItems,SizeOf(TExpressionType)*FCount); - FItems[FCount-1]:=Context; + Item:=TCodeContextInfoItem.Create; + Item.Expr:=Context; + Result:=FItems.Add(Item); end; procedure TCodeContextInfo.Clear; +var + i: Integer; begin - FCount:=0; - ReAllocMem(FItems,0); + for i:=0 to FItems.Count-1 do + TObject(FItems[i]).Free; + FItems.Clear; end; function TCodeContextInfo.CalcMemSize: PtrUInt; begin Result:=PtrUInt(InstanceSize) - +PtrUInt(FCount)*SizeOf(TExpressionType) + +PtrUInt(TCodeContextInfoItem)*SizeOf(FItems.Count) +MemSizeString(FProcName); end; diff --git a/ide/codecontextform.pas b/ide/codecontextform.pas index a7908df84c..8fc718ab1d 100644 --- a/ide/codecontextform.pas +++ b/ide/codecontextform.pas @@ -326,11 +326,13 @@ var CodeTool: TFindDeclarationTool; s: String; p: Integer; + CurContext: TCodeContextInfoItem; begin FHints.Clear; if (CodeContexts=nil) or (CodeContexts.Count=0) then exit; for i:=0 to CodeContexts.Count-1 do begin - CurExprType:=CodeContexts[i]; + CurContext:=CodeContexts[i]; + CurExprType:=CurContext.Expr; s:=ExpressionTypeDescNames[CurExprType.Desc]; if CurExprType.Context.Node<>nil then begin CodeNode:=CurExprType.Context.Node;