mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-25 08:43:36 +02:00
SynEdit: Ifdef highlight, more verbose assert.
git-svn-id: trunk@43064 -
This commit is contained in:
parent
82ba28e80b
commit
af8af08094
@ -115,6 +115,7 @@ type
|
||||
procedure SetStateByUser(AValue: Boolean);
|
||||
protected
|
||||
procedure SetNodeType(ANodeType: TSynMarkupIfdefNodeType);
|
||||
function DebugText(Short: Boolean = False): String;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
@ -194,6 +195,7 @@ type
|
||||
protected
|
||||
procedure AdjustPositionOffset(AnAdjustment: integer); // Caller is responsible for staying between neighbours
|
||||
property NextDispose: TSynSizedDifferentialAVLNode read FParent write FParent;
|
||||
function DebugText: String;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
@ -238,6 +240,7 @@ type
|
||||
procedure SetScanEndLine(AValue: Integer);
|
||||
procedure SetScanEndOffs(AValue: Integer);
|
||||
procedure SetStartLine(AValue: Integer); // Caller is responsible for staying between neighbours
|
||||
function DebugText: String;
|
||||
public
|
||||
procedure ClearInfo;
|
||||
procedure InitForNode(ANode: TSynMarkupHighIfDefLinesNode; ALine: Integer);
|
||||
@ -504,6 +507,7 @@ function dbgs(AFlag: TSynMarkupIfDefNodeFlag): String; overload;
|
||||
function dbgs(AFlags: SynMarkupIfDefNodeFlags): String; overload;
|
||||
function dbgs(AFlag: TSynMarkupIfdefNodeType): String; overload;
|
||||
function dbgs(AFlag: TSynMarkupIfdefNodeStateEx): String; overload;
|
||||
function dbgs(APeerType: TSynMarkupIfdefPeerType): String; overload;
|
||||
|
||||
implementation
|
||||
|
||||
@ -588,6 +592,12 @@ begin
|
||||
WriteStr(Result, AFlag);
|
||||
end;
|
||||
|
||||
function dbgs(APeerType: TSynMarkupIfdefPeerType): String;
|
||||
begin
|
||||
Result := '';
|
||||
WriteStr(Result, APeerType);
|
||||
end;
|
||||
|
||||
{ TSynEditMarkupIfDefNodes }
|
||||
|
||||
function TSynEditMarkupIfDefNodes.GetMarkupInfo: TSynSelectedColor;
|
||||
@ -787,7 +797,7 @@ end;
|
||||
|
||||
function TSynMarkupHighIfDefLinesNodeInfoList.GetNode(AIndex: Integer): TSynMarkupHighIfDefLinesNodeInfo;
|
||||
begin
|
||||
Assert((AIndex < Count) and (AIndex >= 0), 'TSynMarkupHighIfDefLinesNodeInfoList.GetNode Index');
|
||||
Assert((AIndex < Count) and (AIndex >= 0), 'TSynMarkupHighIfDefLinesNodeInfoList.GetNode Index='+IntToStr(AIndex)+' Cnt='+IntToStr(Count));
|
||||
Result := FNestOpenNodes[AIndex];
|
||||
end;
|
||||
|
||||
@ -811,7 +821,7 @@ end;
|
||||
procedure TSynMarkupHighIfDefLinesNodeInfoList.SetNode( AIndex: Integer;
|
||||
AValue: TSynMarkupHighIfDefLinesNodeInfo);
|
||||
begin
|
||||
Assert(( AIndex < Count) and ( AIndex >= 0), 'TSynMarkupHighIfDefLinesNodeInfoList.SetNode Index');
|
||||
Assert(( AIndex < Count) and ( AIndex >= 0), 'TSynMarkupHighIfDefLinesNodeInfoList.SetNode Index='+IntToStr(AIndex)+' Cnt='+IntToStr(Count));
|
||||
FNestOpenNodes[ AIndex] := AValue;
|
||||
end;
|
||||
|
||||
@ -1029,7 +1039,7 @@ begin
|
||||
if (ClosingPeer <> nil) then
|
||||
ClosingPeer.SetOpeningPeerNodeState(NodeState, NodeStateForPeer(ClosingPeer.NodeType))
|
||||
end;
|
||||
idnCommentedNode: Assert(AValue = idnUnknown, 'SetOpeningPeerNodeState for idnCommentedIfdef not possible');
|
||||
idnCommentedNode: Assert(AValue = idnUnknown, 'SetOpeningPeerNodeState for idnCommentedIfdef not possible. '+DebugText);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1041,13 +1051,13 @@ end;
|
||||
procedure TSynMarkupHighIfDefEntry.SetPeer(APeerType: TSynMarkupIfdefPeerType;
|
||||
ANewPeer: TSynMarkupHighIfDefEntry);
|
||||
begin
|
||||
assert( ((APeerType=idpOpeningPeer) and (NodeType <> idnIfdef)) OR ((APeerType=idpClosingPeer) and (NodeType <> idnEndIf)), 'Invalid peertype for this node');
|
||||
assert( ((APeerType=idpOpeningPeer) and (NodeType <> idnIfdef)) OR ((APeerType=idpClosingPeer) and (NodeType <> idnEndIf)), 'Invalid peertype ('+dbgs(APeerType)+') for this node'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||
assert((ANewPeer=nil) OR
|
||||
((APeerType=idpOpeningPeer) and (ANewPeer.NodeType <> idnEndIf)) OR ((APeerType=idpClosingPeer) and (ANewPeer.NodeType <> idnIfdef))
|
||||
, 'New peer not allowed for peertype');
|
||||
, 'New peer not allowed for peertype ('+dbgs(APeerType)+') Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||
if FPeers[APeerType] = ANewPeer then begin
|
||||
assert((ANewPeer = nil) or (ANewPeer.GetPeer(ReversePeerType[APeerType]) = self), 'Peer does not point back to self');
|
||||
assert((NodeType in [idnElse, idnElseIf]) or (FPeers[idpOpeningPeer] = nil) or (FPeers[idpClosingPeer] = nil), 'Only ELSE has 2 peers');
|
||||
assert((ANewPeer = nil) or (ANewPeer.GetPeer(ReversePeerType[APeerType]) = self), 'Peer does not point back to self. Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||
assert((NodeType in [idnElse, idnElseIf]) or (FPeers[idpOpeningPeer] = nil) or (FPeers[idpClosingPeer] = nil), 'Only ELSE has 2 peers. Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||
exit;
|
||||
end;
|
||||
|
||||
@ -1061,7 +1071,7 @@ begin
|
||||
end
|
||||
else begin
|
||||
// If new peer is part of another pair, disolve that pair. This may set FPeers[APeerType] = nil, if new pair points to this node
|
||||
assert(ANewPeer.GetPeer(ReversePeerType[APeerType]) <> self, 'New peer points to this, but was not known by this / link is not bidirectional');
|
||||
assert(ANewPeer.GetPeer(ReversePeerType[APeerType]) <> self, 'New peer points to this, but was not known by this / link is not bidirectional. Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||
ANewPeer.ClearPeerField(ReversePeerType[APeerType]);
|
||||
|
||||
ANewPeer.FPeers[ReversePeerType[APeerType]] := Self;
|
||||
@ -1072,7 +1082,7 @@ begin
|
||||
else
|
||||
SetOpeningPeerNodeState(FPeers[APeerType].NodeState, FPeers[APeerType].NodeStateForPeer(NodeType));
|
||||
end;
|
||||
assert((NodeType in [idnElse, idnElseIf]) or (FPeers[idpOpeningPeer] = nil) or (FPeers[idpClosingPeer] = nil), 'Only ELSE has 2 peers');
|
||||
assert((NodeType in [idnElse, idnElseIf]) or (FPeers[idpOpeningPeer] = nil) or (FPeers[idpClosingPeer] = nil), 'Only ELSE has 2 peers. Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||
end;
|
||||
|
||||
procedure TSynMarkupHighIfDefEntry.MakeDisabled;
|
||||
@ -1133,7 +1143,7 @@ end;
|
||||
procedure TSynMarkupHighIfDefEntry.ClearPeerField(APeerType: TSynMarkupIfdefPeerType);
|
||||
begin
|
||||
if FPeers[APeerType] = nil then exit;
|
||||
assert(FPeers[APeerType].GetPeer(ReversePeerType[APeerType]) = self, 'ClearPeerField: Peer does not point back to self');
|
||||
assert(FPeers[APeerType].GetPeer(ReversePeerType[APeerType]) = self, 'ClearPeerField('+dbgs(APeerType)+'): Peer does not point back to self. '+DebugText);
|
||||
|
||||
if APeerType = idpClosingPeer then
|
||||
FPeers[APeerType].SetOpeningPeerNodeState(idnUnknown, idnUnknown)
|
||||
@ -1187,7 +1197,7 @@ procedure TSynMarkupHighIfDefEntry.SetStartColumn(AValue: Integer);
|
||||
begin
|
||||
if FStartColumn = AValue then Exit;
|
||||
FStartColumn := AValue;
|
||||
Assert(AValue>0, 'Startcol negative');
|
||||
Assert(AValue>0, 'Startcol negative'+DebugText);
|
||||
end;
|
||||
|
||||
procedure TSynMarkupHighIfDefEntry.SetStateByUser(AValue: Boolean);
|
||||
@ -1206,6 +1216,26 @@ begin
|
||||
ApplyNodeStateToLine;
|
||||
end;
|
||||
|
||||
function TSynMarkupHighIfDefEntry.DebugText(Short: Boolean): String;
|
||||
begin
|
||||
If Self = nil then
|
||||
exit('NODE IS NIL');
|
||||
Result := Format('Line=%d NType=%s State=%s OpenState=%s Flags=%s ' +
|
||||
' StartCol=%d EndCol=%d',
|
||||
[FLine, dbgs(FNodeType), dbgs(FNodeState), dbgs(FOpeningPeerNodeState) ,
|
||||
dbgs(FNodeFlags), FStartColumn, FEndColumn]
|
||||
);
|
||||
if Short or (FPeers[idpOpeningPeer] = nil) then
|
||||
Result := Result + ' OpenPeer='+dbgs(FPeers[idpOpeningPeer])
|
||||
else
|
||||
Result := Result + ' OpenPeer='+FPeers[idpOpeningPeer].DebugText(True);
|
||||
|
||||
if Short or (FPeers[idpClosingPeer] = nil) then
|
||||
Result := Result + ' ClosePeer='+dbgs(FPeers[idpClosingPeer])
|
||||
else
|
||||
Result := Result + ' OpenPeer='+FPeers[idpClosingPeer].DebugText(True);
|
||||
end;
|
||||
|
||||
function TSynMarkupHighIfDefEntry.NodeStateForPeer(APeerType: TSynMarkupIfdefNodeType): TSynMarkupIfdefNodeStateEx;
|
||||
const
|
||||
NodeStateMap: array [Boolean] of TSynMarkupIfdefNodeStateEx =
|
||||
@ -1214,7 +1244,7 @@ const
|
||||
(idnTempDisabled, idnTempEnabled); // False, True
|
||||
begin
|
||||
Result := idnUnknown;
|
||||
Assert((NodeType <> APeerType) or (NodeType = idnElseIf), 'NodeStateForPeer: NodeType <> APeerType');
|
||||
Assert((NodeType <> APeerType) or (NodeType = idnElseIf), 'NodeStateForPeer: NodeType <> APeerType'+dbgs(APeerType)+' Node:'+DebugText);
|
||||
case NodeState of
|
||||
idnEnabled: begin
|
||||
case NodeType of
|
||||
@ -1328,8 +1358,8 @@ end;
|
||||
|
||||
procedure TSynMarkupHighIfDefLinesNode.AdjustPositionOffset(AnAdjustment: integer);
|
||||
begin
|
||||
Assert((Successor = nil) or (GetPosition + AnAdjustment < Successor.GetPosition), 'GetPosition + AnAdjustment < Successor.GetPosition');
|
||||
Assert((Precessor = nil) or (GetPosition + AnAdjustment > Precessor.GetPosition), 'GetPosition + AnAdjustment > Precessor.GetPosition');
|
||||
Assert((Successor = nil) or (GetPosition + AnAdjustment < Successor.GetPosition), 'GetPosition + AnAdjustment < Successor.GetPosition '+DebugText);
|
||||
Assert((Precessor = nil) or (GetPosition + AnAdjustment > Precessor.GetPosition), 'GetPosition + AnAdjustment > Precessor.GetPosition '+DebugText);
|
||||
FPositionOffset := FPositionOffset + AnAdjustment;
|
||||
if FLeft <> nil then
|
||||
TSynMarkupHighIfDefLinesNode(FLeft).FPositionOffset :=
|
||||
@ -1339,6 +1369,17 @@ begin
|
||||
TSynMarkupHighIfDefLinesNode(FRight).FPositionOffset - AnAdjustment;
|
||||
end;
|
||||
|
||||
function TSynMarkupHighIfDefLinesNode.DebugText: String;
|
||||
begin
|
||||
if self = nil then
|
||||
exit('NODE IN NIL');
|
||||
Result := Format('Pos=%d Flags=%s ECnt=%d LastEOffs=%d ScanEndOffs=%d ' +
|
||||
' DisEOpen=%d DisEClose=%d',
|
||||
[GetPosition, dbgs(FLineFlags), FEntryCount, FLastEntryEndLineOffs,
|
||||
FScanEndOffs, FDisabledEntryOpenCount, FDisabledEntryCloseCount
|
||||
]);
|
||||
end;
|
||||
|
||||
constructor TSynMarkupHighIfDefLinesNode.Create;
|
||||
begin
|
||||
FSize := 1; // used for index
|
||||
@ -1356,7 +1397,7 @@ begin
|
||||
FLineFlags := [idlDisposed] + FLineFlags * [idlInGlobalClear];
|
||||
while EntryCount > 0 do
|
||||
DeletEntry(EntryCount-1, True);
|
||||
assert((idlInGlobalClear in LineFlags) or ((FDisabledEntryOpenCount =0) and (FDisabledEntryCloseCount = 0)), 'no close count left over');
|
||||
assert((idlInGlobalClear in LineFlags) or ((FDisabledEntryOpenCount =0) and (FDisabledEntryCloseCount = 0)), 'no close count left over'+DebugText);
|
||||
FDisabledEntryOpenCount := 0;
|
||||
FDisabledEntryCloseCount := 0;
|
||||
end;
|
||||
@ -1367,11 +1408,11 @@ var
|
||||
begin
|
||||
c := EntryCount;
|
||||
EntryCount := c + 1;
|
||||
assert(FEntries[c]=nil, 'FEntries[c]=nil');
|
||||
assert(FEntries[c]=nil, 'FEntries[c]=nil Aindex='+IntToStr(AIndex)+' '+DebugText);
|
||||
Result := TSynMarkupHighIfDefEntry.Create;
|
||||
Result.Line := Self;
|
||||
if (AIndex >= 0) then begin
|
||||
Assert(AIndex <= c, 'Add node index <= count');
|
||||
Assert(AIndex <= c, 'Add node index ('+IntToStr(AIndex)+') <= count c='+IntToStr(c)+' '+DebugText);
|
||||
while c > AIndex do begin
|
||||
FEntries[c] := FEntries[c - 1];
|
||||
dec(c);
|
||||
@ -1382,7 +1423,7 @@ end;
|
||||
|
||||
procedure TSynMarkupHighIfDefLinesNode.DeletEntry(AIndex: Integer; AFree: Boolean);
|
||||
begin
|
||||
Assert((AIndex >= 0) and (AIndex < FEntryCount), 'DeletEntry');
|
||||
Assert((AIndex >= 0) and (AIndex < FEntryCount), 'DeletEntry Aindex='+IntToStr(AIndex)+' '+DebugText);
|
||||
if AFree then
|
||||
FEntries[AIndex].Free
|
||||
else
|
||||
@ -1411,12 +1452,21 @@ end;
|
||||
|
||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetStartLine(AValue: Integer);
|
||||
begin
|
||||
Assert(FNode <> nil, 'TSynMarkupHighIfDefLinesNodeInfo.SetStartLine has node');
|
||||
Assert(FNode <> nil, 'TSynMarkupHighIfDefLinesNodeInfo.SetStartLine has node '+DebugText);
|
||||
if FStartLine = AValue then Exit;
|
||||
FNode.AdjustPositionOffset(AValue - FStartLine);
|
||||
FStartLine := AValue;
|
||||
end;
|
||||
|
||||
function TSynMarkupHighIfDefLinesNodeInfo.DebugText: String;
|
||||
begin
|
||||
Result := ' Startline='+IntToStr(FStartLine);
|
||||
if FNode <> nil then
|
||||
Result := Result + ' '+FNode.DebugText
|
||||
else
|
||||
Result := Result + ' Node is nil';
|
||||
end;
|
||||
|
||||
function TSynMarkupHighIfDefLinesNodeInfo.GetLineFlags: SynMarkupIfDefLineFlags;
|
||||
begin
|
||||
if not HasNode then
|
||||
@ -1440,7 +1490,7 @@ end;
|
||||
|
||||
function TSynMarkupHighIfDefLinesNodeInfo.GetEntry(AIndex: Integer): TSynMarkupHighIfDefEntry;
|
||||
begin
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.GetEntry');
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.GetEntry'+DebugText);
|
||||
Result := FNode.Entry[AIndex];
|
||||
end;
|
||||
|
||||
@ -1471,31 +1521,31 @@ end;
|
||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetEntry(AIndex: Integer;
|
||||
AValue: TSynMarkupHighIfDefEntry);
|
||||
begin
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEntry');
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEntry'+DebugText);
|
||||
FNode.Entry[AIndex] := AValue;
|
||||
end;
|
||||
|
||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetEntryCount(AValue: Integer);
|
||||
begin
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEntryCount');
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEntryCount'+DebugText);
|
||||
FNode.EntryCount := AValue;
|
||||
end;
|
||||
|
||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetLastEntryEndLineOffs(AValue: Integer);
|
||||
begin
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEndLineOffs');
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEndLineOffs'+DebugText);
|
||||
FNode.LastEntryEndLineOffs := AValue;
|
||||
end;
|
||||
|
||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetScanEndLine(AValue: Integer);
|
||||
begin
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetScanEndLine');
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetScanEndLine'+DebugText);
|
||||
ScanEndOffs := AValue - StartLine;
|
||||
end;
|
||||
|
||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetScanEndOffs(AValue: Integer);
|
||||
begin
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetScanEndOffs');
|
||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetScanEndOffs'+DebugText);
|
||||
FNode.ScanEndOffs := AValue;
|
||||
end;
|
||||
|
||||
@ -1570,7 +1620,7 @@ end;
|
||||
|
||||
function TSynMarkupHighIfDefLinesNodeInfo.NestMinimumDepthAtNode: Integer;
|
||||
begin
|
||||
assert(FTree <> nil, 'NestWinimumDepthAtNode has tree');
|
||||
assert(FTree <> nil, 'NestWinimumDepthAtNode has tree'+DebugText);
|
||||
if FCacheNestMinimum < 0 then
|
||||
FCacheNestMinimum :=
|
||||
FTree.GetHighLighterWithLines.FoldBlockMinLevel(ToIdx(StartLine), FOLDGROUP_IFDEF,
|
||||
@ -1580,7 +1630,7 @@ end;
|
||||
|
||||
function TSynMarkupHighIfDefLinesNodeInfo.NestDepthAtNodeStart: Integer;
|
||||
begin
|
||||
assert(FTree <> nil, 'NestDepthAtNodeStart has tree');
|
||||
assert(FTree <> nil, 'NestDepthAtNodeStart has tree'+DebugText);
|
||||
if FCacheNestStart < 0 then
|
||||
FCacheNestStart :=
|
||||
FTree.GetHighLighterWithLines.FoldBlockEndLevel(ToIdx(StartLine)-1, FOLDGROUP_IFDEF,
|
||||
@ -1590,7 +1640,7 @@ end;
|
||||
|
||||
function TSynMarkupHighIfDefLinesNodeInfo.NestDepthAtNodeEnd: Integer;
|
||||
begin
|
||||
assert(FTree <> nil, 'NestDepthAtNodeEnd has tree');
|
||||
assert(FTree <> nil, 'NestDepthAtNodeEnd has tree'+DebugText);
|
||||
if FCacheNestEnd < 0 then
|
||||
FCacheNestEnd :=
|
||||
FTree.GetHighLighterWithLines.FoldBlockEndLevel(ToIdx(StartLine), FOLDGROUP_IFDEF,
|
||||
@ -1607,7 +1657,7 @@ begin
|
||||
|
||||
if ScanEndOffs >= 0 then begin
|
||||
Result := StartLine + ScanEndOffs;
|
||||
assert((not ANextNode.HasNode) or (Result<ANextNode.StartLine), '(ANextNode=nil) or (Result<ANextNode.StartLine)');
|
||||
assert((not ANextNode.HasNode) or (Result<ANextNode.StartLine), '(ANextNode=nil) or (Result<ANextNode.StartLine)'+DebugText);
|
||||
end
|
||||
else
|
||||
if ANextNode.HasNode then
|
||||
@ -1714,7 +1764,7 @@ procedure TSynMarkupHighIfDefLinesTree.MaybeExtendNodeBackward(var ANode: TSynMa
|
||||
var
|
||||
Line: Integer;
|
||||
begin
|
||||
Assert(ANode.HasNode, 'ANode.HasNode in MaybeExtendNodeDownwards');
|
||||
Assert(ANode.HasNode, 'ANode.HasNode in MaybeExtendNodeDownwards'+ANode.DebugText+ ' Stopline='+IntToStr(AStopAtLine));
|
||||
MaybeValidateNode(ANode);
|
||||
if (ANode.EntryCount = 0) then begin
|
||||
// ANode is a Scan-Start-Marker and may be extended downto StartLine
|
||||
@ -2588,7 +2638,7 @@ begin
|
||||
|
||||
LogStartX := ToPos(fn.LogXStart)-1; // LogXStart is at "$", we need "{"
|
||||
if (LogStartX < 1) or (LogStartX > LineLen) then begin
|
||||
assert(false, '(LogStartX < 1) or (LogStartX > LineLen) ');
|
||||
assert(false, '(LogStartX < 1) or (LogStartX > LineLen) LogX='+IntToStr(LogStartX)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
continue;
|
||||
end;
|
||||
// assert(LogStartX >= LogEndX, 'ifdef xpos found before end of previous ifdef');
|
||||
@ -2598,39 +2648,39 @@ begin
|
||||
case TheDict.GetMatchAtChar(@LineTextLower[LogStartX], LineLen + 1 - LogStartX) of
|
||||
1: // ifdef
|
||||
begin
|
||||
assert(sfaOpen in fn.FoldAction, 'sfaOpen in fn.FoldAction');
|
||||
assert(sfaOpen in fn.FoldAction, 'sfaOpen in fn.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
NType := idnIfdef;
|
||||
//inc(RelNestDepthNext);
|
||||
end;
|
||||
2: // else
|
||||
begin
|
||||
assert(i < c, '$ELSE i < c');
|
||||
assert(i < c, '$ELSE i < c LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
inc(i);
|
||||
fn2 := FoldNodeInfoList[i];
|
||||
assert(sfaClose in fn.FoldAction, 'sfaClose in fn.FoldAction');
|
||||
assert(sfaOpen in fn2.FoldAction, 'sfaOpen in fn2.FoldAction');
|
||||
assert(fn.LogXStart = fn2.LogXStart, 'sfaOpen in fn2.FoldAction');
|
||||
assert(sfaClose in fn.FoldAction, 'sfaClose in fn.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
assert(sfaOpen in fn2.FoldAction, 'sfaOpen in fn2.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
assert(fn.LogXStart = fn2.LogXStart, 'sfaOpen in fn2.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
NType := idnElse;
|
||||
end;
|
||||
3: // endif
|
||||
begin
|
||||
assert(sfaClose in fn.FoldAction, 'sfaOpen in fn.FoldAction');
|
||||
assert(sfaClose in fn.FoldAction, 'sfaOpen in fn.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
NType := idnEndIf;
|
||||
//dec(RelNestDepthNext);
|
||||
end;
|
||||
4: // ElseIf
|
||||
begin
|
||||
assert(i < c, '$ELSE i < c');
|
||||
assert(i < c, '$ELSE i < c LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
inc(i);
|
||||
fn2 := FoldNodeInfoList[i];
|
||||
assert(sfaClose in fn.FoldAction, 'sfaClose in fn.FoldAction');
|
||||
assert(sfaOpen in fn2.FoldAction, 'sfaOpen in fn2.FoldAction');
|
||||
assert(fn.LogXStart = fn2.LogXStart, 'sfaOpen in fn2.FoldAction');
|
||||
assert(sfaClose in fn.FoldAction, 'sfaClose in fn.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
assert(sfaOpen in fn2.FoldAction, 'sfaOpen in fn2.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
assert(fn.LogXStart = fn2.LogXStart, 'sfaOpen in fn2.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
NType := idnElseIf;
|
||||
end;
|
||||
else
|
||||
begin
|
||||
assert(false, 'not found ifdef');
|
||||
assert(false, 'not found ifdef LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||
continue;
|
||||
end;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user