codetools: add with block: skip nested brackets, bug #29749

git-svn-id: trunk@52746 -
This commit is contained in:
mattias 2016-07-24 16:47:48 +00:00
parent 85628cd5f9
commit a9e52f41eb

View File

@ -1558,25 +1558,31 @@ var
LastPos: TAtomPosition;
Identifier: String;
StartFlag: TCommonAtomFlag;
IdentifierStart: Integer;
IdentifierStart, aStartPos: Integer;
begin
Result:=false;
StartFlag:=CurPos.Flag;
aStartPos:=CurPos.StartPos;
while true do begin
//debugln(['TExtractProcTool.AddWithBlock Atom=',GetAtom]);
if Code<>nil then
Code^:=Code^+GetAtom;
//debugln(['TExtractProcTool.AddWithBlock Atom=',GetAtom]);
if (CurPos.EndPos>CleanEndPos) or (CurPos.StartPos>SrcLen)
or (CurPos.StartPos>StartNode.EndPos) then
break;
if (CurPos.Flag in [cafRoundBracketClose,cafEdgedBracketClose]) then begin
case CurPos.Flag of
cafRoundBracketOpen,cafEdgedBracketOpen:
if (CurPos.StartPos>aStartPos) then begin
// nested brackets
if not ReadBlock(Code) then exit;
end;
cafRoundBracketClose,cafEdgedBracketClose:
if (StartFlag=cafRoundBracketOpen) then begin
if (CurPos.Flag=cafRoundBracketClose) then
break
else
RaiseCharExpectedButAtomFound(')');
end;
if (StartFlag=cafEdgedBracketOpen) then begin
end else if (StartFlag=cafEdgedBracketOpen) then begin
if (CurPos.Flag=cafEdgedBracketClose) then
break
else