summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2016-02-03 15:02:25 +0100
committerErich Eckner <git@eckner.net>2016-02-03 15:02:25 +0100
commit1dd3e8b3c60999f58e6a3051ec45c137953c2174 (patch)
treea74d844eb42458c5169a9b62a8db4747a4ddbd30
parent10e1d35fd12326e48f20f095c590d9a16dfa9156 (diff)
downloadunits-1dd3e8b3c60999f58e6a3051ec45c137953c2174.tar.xz
mystringlistunit.pas ist nun etwas auskunftsfreudiger bei Fehlern
-rw-r--r--lowlevelunit.pas6
-rw-r--r--mystringlistunit.pas40
2 files changed, 29 insertions, 17 deletions
diff --git a/lowlevelunit.pas b/lowlevelunit.pas
index 17ac70b..7ff4268 100644
--- a/lowlevelunit.pas
+++ b/lowlevelunit.pas
@@ -505,10 +505,10 @@ begin
raise e;
end;
-procedure dumpExceptionCallStack(E: Exception);
+procedure dumpExceptionCallStack(e: exception);
var
- I: Integer;
- Frames: PPointer;
+ I: integer;
+ Frames: pPointer;
Report: string;
begin
Report := 'Program exception! ' + LineEnding +
diff --git a/mystringlistunit.pas b/mystringlistunit.pas
index af2ce33..7b91f75 100644
--- a/mystringlistunit.pas
+++ b/mystringlistunit.pas
@@ -13,6 +13,7 @@ type
line: longint;
prot: tProtokollant;
srNoGo,srBuff: tMyStringList; // Liste der in SubRoutinen verbotenen Zeilenanfänge, sowie der aufgeschobenen Zeilen
+ procedure gibAus(s: string; ausgaben: byte);
public
constructor create; overload;
constructor create(protokollant: tProtokollant; name: string); overload;
@@ -72,6 +73,14 @@ begin
inherited destroy;
end;
+procedure tMyStringlist.gibAus(s: string; ausgaben: byte);
+begin
+ if assigned(prot) then
+ prot.schreibe(s,odd(ausgaben shr 1))
+ else
+ lowlevelunit.gibAus(s,ausgaben);
+end;
+
procedure tMyStringlist.loadFromFile(const s: ansiString);
var
i: longint;
@@ -80,10 +89,7 @@ begin
for i:=0 to count-1 do
self[i]:=trim(self[i]);
line:=0;
- if assigned(prot) then
- prot.schreibe(inttostr(count)+' Zeilen eingelesen')
- else
- gibAus(inttostr(count)+' Zeilen eingelesen',1);
+ gibAus(inttostr(count)+' Zeilen eingelesen',1);
end;
procedure tMyStringlist.loadFromGz(const s: ansiString);
@@ -100,10 +106,7 @@ begin
for len:=0 to count-1 do
self[len]:=trim(self[len]);
line:=0;
- if assigned(prot) then
- prot.schreibe(inttostr(count)+' Zeilen eingelesen')
- else
- gibAus(inttostr(count)+' Zeilen eingelesen',1);
+ gibAus(inttostr(count)+' Zeilen eingelesen',1);
end;
procedure tMyStringlist.loadFromResource(const s: ansiString);
@@ -321,7 +324,7 @@ begin
wasGefunden:=true;
t:=erstesArgument(s,':');
if pos('$',t)<>1 then begin
- prot.schreibe('ungültiger Variablenname '''+t+''' für Ersetzung!',true);
+ gibAus('ungültiger Variablenname '''+t+''' für Ersetzung!',3);
exit;
end;
delete(i);
@@ -356,7 +359,10 @@ begin
l:=i;
delete(i);
t:=erstesArgument(s,':');
- if (length(t)=0) or (t[1]<>'$') then exit;
+ if (length(t)=0) or (t[1]<>'$') then begin
+ gibAus('Schleifenvariable muss mit ''$'' beginnen!',3);
+ exit;
+ end;
SchleifenInhalt:=tMyStringlist.create(nil,''); // Schleifenkörper merken
Ebene:=0;
@@ -366,6 +372,14 @@ begin
if pos('!Schleife:',self[i])=1 then inc(Ebene);
delete(i);
end;
+ if i>=count then begin
+ gibAus('Ich kann kein zugehöriges Schleifenende zu Schleife über Variable '''+t+''' finden!',3);
+ gibAus(' ich habe hier noch:',3);
+ for i:=0 to SchleifenInhalt.count-1 do
+ gibAus(SchleifenInhalt[i],3);
+ exit;
+ end;
+
delete(i);
u:=s;
@@ -443,8 +457,7 @@ begin
istWahr:=erstesArgument(t)<>u;
end;
else begin
- if assigned(prot) then prot.schreibe('Operator '''+binops[j]+''' ist nicht implementiert!',true)
- else gibAus('Operator '''+binops[j]+''' ist nicht implementiert!',3);
+ gibAus('Operator '''+binops[j]+''' ist nicht implementiert!',3);
exit;
end;
end{of case};
@@ -453,8 +466,7 @@ begin
break;
end;
if not gefunden then begin
- if assigned(prot) then prot.schreibe('Ich kann keinen gültigen Operator in Bedingung '''+t+''' finden!',true)
- else gibAus('Ich kann keinen gültigen Operator in Bedingung '''+t+''' finden!',3);
+ gibAus('Ich kann keinen gültigen Operator in Bedingung '''+t+''' finden!',3);
exit;
end;
if not istWahr then