perfekt danke super
hab auch gleich mal 3 kleine änderungen ...
Änderung 1 :
Delphi-Quellcode:
DelDirective (Zeile 1262)
IF KnownDirective('I') or KnownDirective('INCLUDE') THEN { Include files }
Result := ProcessInclude(ActiveCDirPara); // Recursive call!
Habe diese zwei zeilen in die (IF CompDirValid then) gesetzt, da sonst auch $I berücksichtigt werden, die eigentlich nicht sollten
Änderung 2
Delphi-Quellcode:
DelDirective (Zeile 955)
(Long:'HINTS'; Short:' '),
(Long:'STACKCHECKS'; Short:' '),
HINTS und STACKCHECKS hinzugefügt zum array Directive
Änderung 3
Delphi-Quellcode:
DelDirective (Zeile 1239)
IF not b THEN
BEGIN
b := DefList.Find(InvertCompDir(#1+ActiveCDirPara), i); // Check, if inverted compiler directive is known
(*
IF not b then
begin
Result := -4;
CreateErrorMsg(ErrMsg, SourceFileName, Row, 'Compiler switch '+ copy(ActiveCDirPara, 1, Length(ActiveCDirPara)-1) + ' not specified');
end;
*)
END;
Hab das not mal auskommentiert, warum muß die compilerdirektive als - da sein ?
wenn ich schreibe {$IFOPT C+} und C+ nicht gefunden wurde, dann ist die IFOPT ungültig und sollte nicht geparst werden oder ? (und es muß keine C- gesetzt sein oder?
so, mein erstes projekt kann er jetzt mal ohne probs parsen, mal mein großes testen ...
hab auch mal die zwei units (für BuildGraph) mit einer cache liste beshcleunigt, da die bei mir extrem oft aufgerufen werden ... allerdings ist das dot.exe so langsam, das ich es beim großen projekt nicht erwarten kann das es fertig wird ... (die temp.dot datei hat 4600 zeilen ...)
Delphi-Quellcode:
procedure TForm_Main.BuildUnitCache;
var
i : integer;
begin
unitCache := TStringList.Create;
unitCache.CaseSensitive := false;
for i:=0
to CheckListBox_Units.Count-1
do
if CheckListBox_Units.State[i]
IN [cbChecked, cbGrayed]
then
unitCache.AddObject(UpperCase(CheckListBox_Units.Items[i]), TObject(CheckListBox_Units.State[i]));
unitCache.Sorted := TRUE;
end;
FUNCTION TForm_Main.UnitInGraph(UnitName:
string): boolean;
{ - Unit is patr of the graph? }
VAR
i : integer;
BEGIN
Result := false;
if unitCache =
nil then BuildUnitCache;
Result := unitCache.IndexOf(UnitName) >= 0;
END;
FUNCTION TForm_Main.UnitShowChilds(UnitName:
string): boolean;
{ Show child Units for that Unit? Depends on user setting and result of code analysis ) }
VAR
i : integer;
BEGIN
Result := false;
if unitCache =
nil then BuildUnitCache;
i := unitCache.IndexOf(unitName);
if i >= 0
then
Result := TCheckBoxState(unitCache.Objects[i])
in [cbChecked];
END;
also dot.exe dauert nur ca. 30 minuten, dann ist es fertig ...
und das bild sieht wirklich lustig aus (ob man da noch was erkennen kann?
)