Browse Source

* pass not only exception address but also frame to raise:
if an address is passed the compiler cannot know a good
value for the frame so it passed nil and no stack trace is printed, resolves #12528

git-svn-id: trunk@22932 -

florian 12 năm trước cách đây
mục cha
commit
39aef35bdc

+ 1 - 1
packages/fcl-base/src/contnrs.pp

@@ -1403,7 +1403,7 @@ end;
 
 class procedure TFPHashList.Error(const Msg: string; Data: PtrInt);
 begin
-  Raise EListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame);
+  Raise EListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 function TFPHashList.Expand: TFPHashList;

+ 4 - 4
packages/fcl-xml/src/xpath.pp

@@ -1342,13 +1342,13 @@ end;
 
 procedure EvaluationError(const Msg: String);
 begin
-  raise EXPathEvaluationError.Create(Msg) at get_caller_addr(get_frame);
+  raise EXPathEvaluationError.Create(Msg) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 procedure EvaluationError(const Msg: String; const Args: array of const);
 begin
   raise EXPathEvaluationError.CreateFmt(Msg, Args)
-    at get_caller_addr(get_frame);
+    at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 
@@ -1370,7 +1370,7 @@ end;
 
 procedure TXPathVariable.Error(const Msg: String; const Args: array of const);
 begin
-  raise Exception.CreateFmt(Msg, Args) at get_caller_addr(get_frame);
+  raise Exception.CreateFmt(Msg, Args) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 
@@ -1788,7 +1788,7 @@ end;
 
 procedure TXPathScanner.Error(const Msg: String);
 begin
-  raise Exception.Create(Msg) at get_caller_addr(get_frame);
+  raise Exception.Create(Msg) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 procedure TXPathScanner.ParsePredicates(var Dest: TXPathNodeArray);

+ 2 - 4
rtl/objpas/classes/bits.inc

@@ -15,15 +15,13 @@
 {****************************************************************************}
 
 Procedure BitsError (const Msg : string);
-
 begin
-  Raise EBitsError.Create(Msg) at get_caller_addr(get_frame);
+  Raise EBitsError.Create(Msg) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 Procedure BitsErrorFmt (const Msg : string; const Args : array of const);
-
 begin
-  Raise EBitsError.CreateFmt(Msg,args) at get_caller_addr(get_frame);
+  Raise EBitsError.CreateFmt(Msg,args) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 {Min function for Longint}

+ 2 - 2
rtl/objpas/classes/lists.inc

@@ -154,7 +154,7 @@ end;
 
 class procedure TFPList.Error(const Msg: string; Data: PtrInt);
 begin
-  Raise EListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame);
+  Raise EListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 procedure TFPList.Exchange(Index1, Index2: Integer);
@@ -743,7 +743,7 @@ end;
 
 class procedure TList.Error(const Msg: string; Data: PtrInt);
 begin
-  Raise EListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame);
+  Raise EListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 procedure TList.Exchange(Index1, Index2: Integer);

+ 3 - 3
rtl/objpas/classes/streams.inc

@@ -16,12 +16,12 @@
 
 procedure TStream.ReadNotImplemented;
 begin
-  raise EStreamError.CreateFmt(SStreamNoReading, [ClassName]) at get_caller_addr(get_frame);
+  raise EStreamError.CreateFmt(SStreamNoReading, [ClassName]) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 procedure TStream.WriteNotImplemented;
 begin
-  raise EStreamError.CreateFmt(SStreamNoWriting, [ClassName]) at get_caller_addr(get_frame);
+  raise EStreamError.CreateFmt(SStreamNoWriting, [ClassName]) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 function TStream.Read(var Buffer; Count: Longint): Longint;
@@ -154,7 +154,7 @@ end;
   procedure TStream.InvalidSeek;
 
   begin
-    raise EStreamError.CreateFmt(SStreamInvalidSeek, [ClassName]) at get_caller_addr(get_frame);
+    raise EStreamError.CreateFmt(SStreamInvalidSeek, [ClassName]) at get_caller_addr(get_frame), get_caller_frame(get_frame);
   end;
 
   procedure TStream.FakeSeekForward(Offset: Int64;  const Origin: TSeekOrigin; const Pos: Int64);

+ 2 - 2
rtl/objpas/classes/stringl.inc

@@ -434,13 +434,13 @@ end;
 
 Procedure TStrings.Error(const Msg: string; Data: Integer);
 begin
-  Raise EStringListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame);
+  Raise EStringListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 
 Procedure TStrings.Error(const Msg: pstring; Data: Integer);
 begin
-  Raise EStringListError.CreateFmt(Msg^,[Data]) at get_caller_addr(get_frame);
+  Raise EStringListError.CreateFmt(Msg^,[Data]) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 

+ 1 - 1
rtl/objpas/fgl.pp

@@ -526,7 +526,7 @@ end;
 
 class procedure TFPSList.Error(const Msg: string; Data: PtrInt);
 begin
-  raise EListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame);
+  raise EListError.CreateFmt(Msg,[Data]) at get_caller_addr(get_frame), get_caller_frame(get_frame);
 end;
 
 procedure TFPSList.Exchange(Index1, Index2: Integer);