Browse Source

- get rid of fpc_PushExceptAddr and fpc_PopAddrStack entirely, when compiling in
wasm native exceptions mode - these helper routines aren't necessary in this
mode

Nikolay Nikolov 3 years ago
parent
commit
0c3e179652
3 changed files with 7 additions and 46 deletions
  1. 1 1
      compiler/wasm32/nwasmflw.pas
  2. 3 1
      rtl/inc/compproc.inc
  3. 3 44
      rtl/wasm32/except_native.inc

+ 1 - 1
compiler/wasm32/nwasmflw.pas

@@ -328,7 +328,7 @@ implementation
           end
         else
           begin
-            addstatement(statements,ccallnode.createintern('fpc_popaddrstack',nil));
+            //addstatement(statements,ccallnode.createintern('fpc_popaddrstack',nil));
             raisenode:=ccallnode.createintern('fpc_reraise',nil);
             include(raisenode.callnodeflags,cnf_call_never_returns);
             addstatement(statements,raisenode);

+ 3 - 1
rtl/inc/compproc.inc

@@ -711,9 +711,11 @@ procedure fpc_dispatch_by_id(Result: Pointer; const Dispatch: pointer;DispDesc:
 
 
 {$ifdef FPC_HAS_FEATURE_EXCEPTIONS}
+{$ifndef FPC_WASM_NATIVE_EXCEPTIONS)}
 Function fpc_PushExceptAddr (Ft: {$ifdef CPU16}SmallInt{$else}Longint{$endif};_buf,_newaddr : pointer): PJmp_buf ; compilerproc;
-procedure fpc_Raiseexception (Obj : TObject; AnAddr : CodePointer; AFrame : Pointer); compilerproc;
 Procedure fpc_PopAddrStack; compilerproc;
+{$endif FPC_WASM_NATIVE_EXCEPTIONS)}
+procedure fpc_Raiseexception (Obj : TObject; AnAddr : CodePointer; AFrame : Pointer); compilerproc;
 function fpc_PopObjectStack : TObject; compilerproc;
 function fpc_PopSecondObjectStack : TObject; compilerproc;
 Procedure fpc_ReRaise; compilerproc;

+ 3 - 44
rtl/wasm32/except_native.inc

@@ -22,7 +22,6 @@ ThreadVar
 {$else FPC_HAS_FEATURE_THREADING}
 Var
 {$endif FPC_HAS_FEATURE_THREADING}
-  ExceptAddrStack   : PExceptAddr;
   ExceptObjectStack : PExceptObject;
   ExceptTryLevel    : ObjpasInt;
 
@@ -66,23 +65,6 @@ begin
 end;
 
 
-Function fpc_PushExceptAddr (Ft: {$ifdef CPU16}SmallInt{$else}Longint{$endif};_buf,_newaddr : pointer): PJmp_buf ;
-  [Public, Alias : 'FPC_PUSHEXCEPTADDR'];compilerproc;
-var
-  _ExceptAddrstack : ^PExceptAddr;
-begin
-{$ifdef excdebug}
-  writeln ('In PushExceptAddr');
-{$endif}
-  _ExceptAddrstack:=@ExceptAddrstack;
-  PExceptAddr(_newaddr)^.Next:=_ExceptAddrstack^;
-  _ExceptAddrStack^:=PExceptAddr(_newaddr);
-  PExceptAddr(_newaddr)^.Buf:=PJmp_Buf(_buf);
-  PExceptAddr(_newaddr)^.FrameType:=ft;
-  result:=PJmp_Buf(_buf);
-end;
-
-
 { This routine is called only from fpc_raiseexception, which uses ExceptTryLevel
   flag to guard against repeated exceptions which can occur due to corrupted stack
   or heap. }
@@ -187,28 +169,6 @@ end;
 {$endif FPC_SYSTEM_HAS_RAISEEXCEPTION}
 
 
-Procedure fpc_PopAddrStack;[Public, Alias : 'FPC_POPADDRSTACK']; compilerproc;
-var
-  hp : ^PExceptAddr;
-begin
-{$ifdef excdebug}
-  writeln ('In Popaddrstack');
-{$endif}
-  hp:=@ExceptAddrStack;
-  If hp^=nil then
-    begin
-{$ifdef excdebug}
-      writeln ('At end of ExceptionAddresStack');
-{$endif}
-      halt (255);
-    end
-  else
-    begin
-      hp^:=hp^^.Next;
-    end;
-end;
-
-
 function fpc_PopObjectStack : TObject;[Public, Alias : 'FPC_POPOBJECTSTACK']; compilerproc;
 var
   hp : PExceptObject;
@@ -281,9 +241,9 @@ begin
 {$ifdef excdebug}
   writeln ('In reraise');
 {$endif}
-  _ExceptAddrStack:=ExceptAddrStack;
-  If _ExceptAddrStack=Nil then
-    DoUnHandledException;
+//  _ExceptAddrStack:=ExceptAddrStack;
+//  If _ExceptAddrStack=Nil then
+//    DoUnHandledException;
   ExceptObjectStack^.refcount := 0;
   longjmp(_ExceptAddrStack^.Buf^,FPC_Exception);
 end;
@@ -327,7 +287,6 @@ Procedure SysInitExceptions;
 }
 begin
   ExceptObjectstack:=Nil;
-  ExceptAddrStack:=Nil;
 end;