mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-08 12:39:22 +02:00
fixed searching in parent nodes of ancestors
git-svn-id: trunk@4322 -
This commit is contained in:
parent
8aa2da1a71
commit
d62057d9dc
@ -51,8 +51,10 @@ type
|
|||||||
FCount: integer;
|
FCount: integer;
|
||||||
FMinFree: integer;
|
FMinFree: integer;
|
||||||
FMaxFreeRatio: integer;
|
FMaxFreeRatio: integer;
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
FAllocatedCount: int64;
|
FAllocatedCount: int64;
|
||||||
FFreedCount: int64;
|
FFreedCount: int64;
|
||||||
|
{$ENDIF}
|
||||||
procedure DisposeItem(AnItem: PCodeToolMemManagerItem);
|
procedure DisposeItem(AnItem: PCodeToolMemManagerItem);
|
||||||
function NewItem: PCodeToolMemManagerItem;
|
function NewItem: PCodeToolMemManagerItem;
|
||||||
procedure FreeFirstItem; virtual;
|
procedure FreeFirstItem; virtual;
|
||||||
@ -62,8 +64,10 @@ type
|
|||||||
read FMaxFreeRatio write SetMaxFreeRatio; // in one eighth steps
|
read FMaxFreeRatio write SetMaxFreeRatio; // in one eighth steps
|
||||||
property Count: integer read FCount;
|
property Count: integer read FCount;
|
||||||
property FreeCount: integer read FFreeCount;
|
property FreeCount: integer read FFreeCount;
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
property AllocatedCount: int64 read FAllocatedCount;
|
property AllocatedCount: int64 read FAllocatedCount;
|
||||||
property FreedCount: int64 read FFreedCount;
|
property FreedCount: int64 read FFreedCount;
|
||||||
|
{$ENDIF}
|
||||||
procedure Clear;
|
procedure Clear;
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -79,7 +83,9 @@ procedure TCodeToolMemManager.Clear;
|
|||||||
begin
|
begin
|
||||||
while FFirstFree<>nil do begin
|
while FFirstFree<>nil do begin
|
||||||
FreeFirstItem;
|
FreeFirstItem;
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FFreedCount);
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
FFreeCount:=0;
|
FFreeCount:=0;
|
||||||
end;
|
end;
|
||||||
@ -90,8 +96,10 @@ begin
|
|||||||
FFirstFree:=nil;
|
FFirstFree:=nil;
|
||||||
FFreeCount:=0;
|
FFreeCount:=0;
|
||||||
FCount:=0;
|
FCount:=0;
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
FAllocatedCount:=0;
|
FAllocatedCount:=0;
|
||||||
FFreedCount:=0;
|
FFreedCount:=0;
|
||||||
|
{$ENDIF}
|
||||||
FMinFree:=100000;
|
FMinFree:=100000;
|
||||||
FMaxFreeRatio:=8; // 1:1
|
FMaxFreeRatio:=8; // 1:1
|
||||||
end;
|
end;
|
||||||
@ -112,7 +120,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list full -> free the ANode
|
// free list full -> free the ANode
|
||||||
//FreeItem(AnItem);
|
//FreeItem(AnItem);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FFreedCount);
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
dec(FCount);
|
dec(FCount);
|
||||||
end;
|
end;
|
||||||
@ -128,7 +138,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list empty -> create new node
|
// free list empty -> create new node
|
||||||
New(Result);
|
New(Result);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FAllocatedCount);
|
inc(FAllocatedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
inc(FCount);
|
inc(FCount);
|
||||||
end;
|
end;
|
||||||
|
@ -684,7 +684,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list empty -> create new node
|
// free list empty -> create new node
|
||||||
Result:=TCodeTreeNode.Create;
|
Result:=TCodeTreeNode.Create;
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FAllocatedCount);
|
inc(FAllocatedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
inc(FCount);
|
inc(FCount);
|
||||||
end;
|
end;
|
||||||
@ -701,7 +703,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list full -> free the ANode
|
// free list full -> free the ANode
|
||||||
ANode.Free;
|
ANode.Free;
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FFreedCount);
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
dec(FCount);
|
dec(FCount);
|
||||||
end;
|
end;
|
||||||
@ -777,7 +781,9 @@ end;
|
|||||||
procedure InternalFinal;
|
procedure InternalFinal;
|
||||||
begin
|
begin
|
||||||
NodeExtMemManager.Free;
|
NodeExtMemManager.Free;
|
||||||
|
NodeExtMemManager:=nil;
|
||||||
NodeMemManager.Free;
|
NodeMemManager.Free;
|
||||||
|
NodeMemManager:=nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
@ -299,7 +299,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list full -> free the Entry
|
// free list full -> free the Entry
|
||||||
Dispose(Entry);
|
Dispose(Entry);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FFreedCount);
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
dec(FCount);
|
dec(FCount);
|
||||||
end;
|
end;
|
||||||
@ -315,7 +317,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list empty -> create new Entry
|
// free list empty -> create new Entry
|
||||||
New(Result);
|
New(Result);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FAllocatedCount);
|
inc(FAllocatedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
inc(FCount);
|
inc(FCount);
|
||||||
end;
|
end;
|
||||||
@ -343,7 +347,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list full -> free the Entry
|
// free list full -> free the Entry
|
||||||
Dispose(Entry);
|
Dispose(Entry);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FFreedCount);
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
dec(FCount);
|
dec(FCount);
|
||||||
end;
|
end;
|
||||||
@ -359,7 +365,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list empty -> create new Entry
|
// free list empty -> create new Entry
|
||||||
New(Result);
|
New(Result);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FAllocatedCount);
|
inc(FAllocatedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
inc(FCount);
|
inc(FCount);
|
||||||
end;
|
end;
|
||||||
@ -939,7 +947,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list full -> free the NodeCache
|
// free list full -> free the NodeCache
|
||||||
NodeCache.Free;
|
NodeCache.Free;
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FFreedCount);
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
dec(FCount);
|
dec(FCount);
|
||||||
end;
|
end;
|
||||||
@ -965,7 +975,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list empty -> create new NodeCache
|
// free list empty -> create new NodeCache
|
||||||
Result:=TCodeTreeNodeCache.Create(AnOwner);
|
Result:=TCodeTreeNodeCache.Create(AnOwner);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FAllocatedCount);
|
inc(FAllocatedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
inc(FCount);
|
inc(FCount);
|
||||||
end;
|
end;
|
||||||
@ -1042,7 +1054,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list full -> free the BaseType
|
// free list full -> free the BaseType
|
||||||
BaseTypeCache.Free;
|
BaseTypeCache.Free;
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FFreedCount);
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
dec(FCount);
|
dec(FCount);
|
||||||
end;
|
end;
|
||||||
@ -1067,7 +1081,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list empty -> create new BaseType
|
// free list empty -> create new BaseType
|
||||||
Result:=TBaseTypeCache.Create(AnOwner);
|
Result:=TBaseTypeCache.Create(AnOwner);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FAllocatedCount);
|
inc(FAllocatedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
inc(FCount);
|
inc(FCount);
|
||||||
end;
|
end;
|
||||||
|
@ -1838,7 +1838,8 @@ var
|
|||||||
Params.SetResult(Self,ContextNode,CurPos.StartPos);
|
Params.SetResult(Self,ContextNode,CurPos.StartPos);
|
||||||
Result:=CheckResult(true,true);
|
Result:=CheckResult(true,true);
|
||||||
end;
|
end;
|
||||||
if FindIdentifierInHiddenUsedUnits(Params) then begin
|
if (not (fdfIgnoreUsedUnits in Params.Flags))
|
||||||
|
and FindIdentifierInHiddenUsedUnits(Params) then begin
|
||||||
Result:=CheckResult(true,false);
|
Result:=CheckResult(true,false);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -2881,7 +2882,7 @@ begin
|
|||||||
|
|
||||||
Params.Save(OldInput);
|
Params.Save(OldInput);
|
||||||
Params.ContextNode:=Params.NewNode;
|
Params.ContextNode:=Params.NewNode;
|
||||||
Exclude(Params.Flags,fdfIgnoreCurContextNode);
|
Params.Flags:=Params.Flags-[fdfIgnoreCurContextNode,fdfSearchInParentNodes];
|
||||||
Result:=Params.NewCodeTool.FindIdentifierInContext(Params);
|
Result:=Params.NewCodeTool.FindIdentifierInContext(Params);
|
||||||
Params.Load(OldInput);
|
Params.Load(OldInput);
|
||||||
end;
|
end;
|
||||||
@ -3188,7 +3189,8 @@ begin
|
|||||||
Result:=false;
|
Result:=false;
|
||||||
// build code tree
|
// build code tree
|
||||||
{$IFDEF ShowTriedContexts}
|
{$IFDEF ShowTriedContexts}
|
||||||
writeln(DebugPrefix,'TFindDeclarationTool.FindIdentifierInInterface',
|
writeln({$IFDEF DebugPrefix}DebugPrefix,{$ENDIF}
|
||||||
|
'TFindDeclarationTool.FindIdentifierInInterface',
|
||||||
' Ident="',GetIdentifier(Params.Identifier),'"',
|
' Ident="',GetIdentifier(Params.Identifier),'"',
|
||||||
' IgnoreUsedUnits=',fdfIgnoreUsedUnits in Params.Flags,
|
' IgnoreUsedUnits=',fdfIgnoreUsedUnits in Params.Flags,
|
||||||
' Self=',TCodeBuffer(Scanner.MainCode).Filename
|
' Self=',TCodeBuffer(Scanner.MainCode).Filename
|
||||||
@ -3311,7 +3313,7 @@ end;
|
|||||||
|
|
||||||
function TFindDeclarationTool.FindIdentifierInUsedUnit(
|
function TFindDeclarationTool.FindIdentifierInUsedUnit(
|
||||||
const AnUnitName: string; Params: TFindDeclarationParams): boolean;
|
const AnUnitName: string; Params: TFindDeclarationParams): boolean;
|
||||||
{ this function is internally used by FindIdentifierInUsesSection
|
{ this function is internally used by FindIdentifierInHiddenUsedUnits
|
||||||
for hidden used units, like the system unit or the objpas unit
|
for hidden used units, like the system unit or the objpas unit
|
||||||
}
|
}
|
||||||
var
|
var
|
||||||
|
@ -56,7 +56,7 @@ uses
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Classes, SysUtils, CodeToolsStrConsts, CodeTree, CodeAtom, CustomCodeTool,
|
Classes, SysUtils, CodeToolsStrConsts, CodeTree, CodeAtom, CustomCodeTool,
|
||||||
SourceLog, KeywordFuncLists, BasicCodeTools, LinkScanner, CodeCache, AVL_Tree,
|
SourceLog, KeywordFuncLists, BasicCodeTools, LinkScanner, CodeCache, AVL_Tree,
|
||||||
SourceChanger, FindDeclarationTool, PascalParserTool;
|
CodeToolMemManager, SourceChanger, FindDeclarationTool, PascalParserTool;
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -82,6 +82,7 @@ type
|
|||||||
|
|
||||||
TIdentifierListItem = class
|
TIdentifierListItem = class
|
||||||
private
|
private
|
||||||
|
FNext: TIdentifierListItem;
|
||||||
FParamList: string;
|
FParamList: string;
|
||||||
FParamListValid: boolean;
|
FParamListValid: boolean;
|
||||||
function GetParamList: string;
|
function GetParamList: string;
|
||||||
@ -109,6 +110,7 @@ type
|
|||||||
function CanBeAssigned: boolean;
|
function CanBeAssigned: boolean;
|
||||||
procedure UpdateBaseContext;
|
procedure UpdateBaseContext;
|
||||||
function HasChilds: boolean;
|
function HasChilds: boolean;
|
||||||
|
procedure Clear;
|
||||||
public
|
public
|
||||||
property ParamList: string read GetParamList write SetParamList;
|
property ParamList: string read GetParamList write SetParamList;
|
||||||
end;
|
end;
|
||||||
@ -322,6 +324,78 @@ begin
|
|||||||
Result:=AnsiCompareText(HistItem.ParamList,IdentItem.ParamList);
|
Result:=AnsiCompareText(HistItem.ParamList,IdentItem.ParamList);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
TIdentifierListItemMemManager = class(TCodeToolMemManager)
|
||||||
|
protected
|
||||||
|
procedure FreeFirstItem; override;
|
||||||
|
public
|
||||||
|
procedure DisposeIdentListItem(IdentListItem: TIdentifierListItem);
|
||||||
|
function NewIdentListItem(NewCompatibility: TIdentifierCompatibility;
|
||||||
|
NewHasChilds: boolean; NewHistoryIndex: integer;
|
||||||
|
NewIdentifier: PChar; NewLevel: integer;
|
||||||
|
NewNode: TCodeTreeNode; NewTool: TFindDeclarationTool;
|
||||||
|
NewDefaultDesc: TCodeTreeNodeDesc): TIdentifierListItem;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
IdentifierListItemMemManager: TIdentifierListItemMemManager;
|
||||||
|
|
||||||
|
{ TIdentifierListItemMemManager }
|
||||||
|
|
||||||
|
procedure TIdentifierListItemMemManager.FreeFirstItem;
|
||||||
|
var Item: TIdentifierListItem;
|
||||||
|
begin
|
||||||
|
Item:=TIdentifierListItem(FFirstFree);
|
||||||
|
TIdentifierListItem(FFirstFree):=Item.FNext;
|
||||||
|
Item.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIdentifierListItemMemManager.DisposeIdentListItem(
|
||||||
|
IdentListItem: TIdentifierListItem);
|
||||||
|
begin
|
||||||
|
if (FFreeCount<FMinFree) or (FFreeCount<((FCount shr 3)*FMaxFreeRatio)) then
|
||||||
|
begin
|
||||||
|
// add IdentListItem to Free list
|
||||||
|
IdentListItem.FNext:=TIdentifierListItem(FFirstFree);
|
||||||
|
TIdentifierListItem(FFirstFree):=IdentListItem;
|
||||||
|
inc(FFreeCount);
|
||||||
|
end else begin
|
||||||
|
// free list full -> free IdentListItem
|
||||||
|
IdentListItem.Free;
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
dec(FCount);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TIdentifierListItemMemManager.NewIdentListItem(
|
||||||
|
NewCompatibility: TIdentifierCompatibility;
|
||||||
|
NewHasChilds: boolean; NewHistoryIndex: integer;
|
||||||
|
NewIdentifier: PChar; NewLevel: integer;
|
||||||
|
NewNode: TCodeTreeNode; NewTool: TFindDeclarationTool;
|
||||||
|
NewDefaultDesc: TCodeTreeNodeDesc): TIdentifierListItem;
|
||||||
|
begin
|
||||||
|
if FFirstFree<>nil then begin
|
||||||
|
// take from free list
|
||||||
|
Result:=TIdentifierListItem(FFirstFree);
|
||||||
|
// ToDo: set values
|
||||||
|
TIdentifierListItem(FFirstFree):=Result.FNext;
|
||||||
|
Result.FNext:=nil;
|
||||||
|
dec(FFreeCount);
|
||||||
|
end else begin
|
||||||
|
// free list empty -> create new node
|
||||||
|
Result:=TIdentifierListItem.Create(NewCompatibility,
|
||||||
|
NewHasChilds,NewHistoryIndex,NewIdentifier,NewLevel,
|
||||||
|
NewNode,NewTool,
|
||||||
|
NewDefaultDesc);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
|
inc(FAllocatedCount);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
inc(FCount);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TIdentifierList }
|
{ TIdentifierList }
|
||||||
|
|
||||||
procedure TIdentifierList.SetPrefix(const AValue: string);
|
procedure TIdentifierList.SetPrefix(const AValue: string);
|
||||||
@ -438,6 +512,7 @@ begin
|
|||||||
Include(FFlags,ilfFilteredListNeedsUpdate);
|
Include(FFlags,ilfFilteredListNeedsUpdate);
|
||||||
end else begin
|
end else begin
|
||||||
// redefined identifier -> ignore
|
// redefined identifier -> ignore
|
||||||
|
//writeln('TIdentifierList.Add redefined: ',NewItem.AsString);
|
||||||
NewItem.Free;
|
NewItem.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -552,7 +627,7 @@ begin
|
|||||||
Ident:=@FoundContext.Tool.Src[FoundContext.Node.StartPos];
|
Ident:=@FoundContext.Tool.Src[FoundContext.Node.StartPos];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
ctnVarDefinition,ctnConstDefinition:
|
ctnVarDefinition,ctnConstDefinition,ctnEnumIdentifier:
|
||||||
Ident:=@FoundContext.Tool.Src[FoundContext.Node.StartPos];
|
Ident:=@FoundContext.Tool.Src[FoundContext.Node.StartPos];
|
||||||
|
|
||||||
ctnProcedure,ctnProcedureHead:
|
ctnProcedure,ctnProcedureHead:
|
||||||
@ -979,6 +1054,21 @@ begin
|
|||||||
Result:=iliHasChilds in Flags;
|
Result:=iliHasChilds in Flags;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TIdentifierListItem.Clear;
|
||||||
|
begin
|
||||||
|
FParamList:='';
|
||||||
|
FParamListValid:=false;
|
||||||
|
Compatibility:=icompUnknown;
|
||||||
|
HistoryIndex:=0;
|
||||||
|
Identifier:=nil;
|
||||||
|
Level:=0;
|
||||||
|
Node:=nil;
|
||||||
|
Tool:=nil;
|
||||||
|
DefaultDesc:=ctnNone;
|
||||||
|
Flags:=[];
|
||||||
|
BaseExprType:=CleanExpressionType;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TIdentifierHistoryList }
|
{ TIdentifierHistoryList }
|
||||||
|
|
||||||
procedure TIdentifierHistoryList.SetCapacity(const AValue: integer);
|
procedure TIdentifierHistoryList.SetCapacity(const AValue: integer);
|
||||||
@ -1070,7 +1160,7 @@ var
|
|||||||
begin
|
begin
|
||||||
AnAVLNode:=FindItem(AnItem);
|
AnAVLNode:=FindItem(AnItem);
|
||||||
if AnAVLNode=nil then
|
if AnAVLNode=nil then
|
||||||
Result:=3333333 // a very high value
|
Result:=33333333 // a very high value
|
||||||
else
|
else
|
||||||
Result:=TIdentHistListItem(AnAVLNode.Data).HistoryIndex;
|
Result:=TIdentHistListItem(AnAVLNode.Data).HistoryIndex;
|
||||||
end;
|
end;
|
||||||
@ -1080,5 +1170,12 @@ begin
|
|||||||
Result:=FItems.Count;
|
Result:=FItems.Count;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
IdentifierListItemMemManager:=TIdentifierListItemMemManager.Create;
|
||||||
|
|
||||||
|
finalization
|
||||||
|
IdentifierListItemMemManager.Free;
|
||||||
|
IdentifierListItemMemManager:=nil;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -2799,7 +2799,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list full -> free Link
|
// free list full -> free Link
|
||||||
Dispose(Link);
|
Dispose(Link);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FFreedCount);
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
dec(FCount);
|
dec(FCount);
|
||||||
end;
|
end;
|
||||||
@ -2816,7 +2818,9 @@ begin
|
|||||||
// free list empty -> create new PSourceLink
|
// free list empty -> create new PSourceLink
|
||||||
New(Result);
|
New(Result);
|
||||||
FillChar(Result^,SizeOf(TSourceLink),0);
|
FillChar(Result^,SizeOf(TSourceLink),0);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FAllocatedCount);
|
inc(FAllocatedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
inc(FCount);
|
inc(FCount);
|
||||||
end;
|
end;
|
||||||
@ -2844,7 +2848,9 @@ begin
|
|||||||
end else begin
|
end else begin
|
||||||
// free list full -> free Step
|
// free list full -> free Step
|
||||||
Dispose(Step);
|
Dispose(Step);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FFreedCount);
|
inc(FFreedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
dec(FCount);
|
dec(FCount);
|
||||||
end;
|
end;
|
||||||
@ -2861,7 +2867,9 @@ begin
|
|||||||
// free list empty -> create new PSourceChangeStep
|
// free list empty -> create new PSourceChangeStep
|
||||||
New(Result);
|
New(Result);
|
||||||
FillChar(Result^,SizeOf(TSourceChangeStep),0);
|
FillChar(Result^,SizeOf(TSourceChangeStep),0);
|
||||||
|
{$IFDEF DebugCTMemManager}
|
||||||
inc(FAllocatedCount);
|
inc(FAllocatedCount);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
inc(FCount);
|
inc(FCount);
|
||||||
end;
|
end;
|
||||||
|
@ -3122,12 +3122,11 @@ begin
|
|||||||
if ExtractMemStream=nil then
|
if ExtractMemStream=nil then
|
||||||
ExtractMemStream:=TMemoryStream.Create;
|
ExtractMemStream:=TMemoryStream.Create;
|
||||||
ExtractMemStream.Position:=0;
|
ExtractMemStream.Position:=0;
|
||||||
ExtractMemStream.Size:=0;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPascalParserTool.GetExtraction: string;
|
function TPascalParserTool.GetExtraction: string;
|
||||||
begin
|
begin
|
||||||
SetLength(Result,ExtractMemStream.Size);
|
SetLength(Result,ExtractMemStream.Position);
|
||||||
ExtractMemStream.Position:=0;
|
ExtractMemStream.Position:=0;
|
||||||
ExtractMemStream.Read(Result[1],length(Result));
|
ExtractMemStream.Read(Result[1],length(Result));
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user