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
           end
         else
         else
           begin
           begin
-            addstatement(statements,ccallnode.createintern('fpc_popaddrstack',nil));
+            //addstatement(statements,ccallnode.createintern('fpc_popaddrstack',nil));
             raisenode:=ccallnode.createintern('fpc_reraise',nil);
             raisenode:=ccallnode.createintern('fpc_reraise',nil);
             include(raisenode.callnodeflags,cnf_call_never_returns);
             include(raisenode.callnodeflags,cnf_call_never_returns);
             addstatement(statements,raisenode);
             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}
 {$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;
 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;
 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_PopObjectStack : TObject; compilerproc;
 function fpc_PopSecondObjectStack : TObject; compilerproc;
 function fpc_PopSecondObjectStack : TObject; compilerproc;
 Procedure fpc_ReRaise; compilerproc;
 Procedure fpc_ReRaise; compilerproc;

+ 3 - 44
rtl/wasm32/except_native.inc

@@ -22,7 +22,6 @@ ThreadVar
 {$else FPC_HAS_FEATURE_THREADING}
 {$else FPC_HAS_FEATURE_THREADING}
 Var
 Var
 {$endif FPC_HAS_FEATURE_THREADING}
 {$endif FPC_HAS_FEATURE_THREADING}
-  ExceptAddrStack   : PExceptAddr;
   ExceptObjectStack : PExceptObject;
   ExceptObjectStack : PExceptObject;
   ExceptTryLevel    : ObjpasInt;
   ExceptTryLevel    : ObjpasInt;
 
 
@@ -66,23 +65,6 @@ begin
 end;
 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
 { This routine is called only from fpc_raiseexception, which uses ExceptTryLevel
   flag to guard against repeated exceptions which can occur due to corrupted stack
   flag to guard against repeated exceptions which can occur due to corrupted stack
   or heap. }
   or heap. }
@@ -187,28 +169,6 @@ end;
 {$endif FPC_SYSTEM_HAS_RAISEEXCEPTION}
 {$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;
 function fpc_PopObjectStack : TObject;[Public, Alias : 'FPC_POPOBJECTSTACK']; compilerproc;
 var
 var
   hp : PExceptObject;
   hp : PExceptObject;
@@ -281,9 +241,9 @@ begin
 {$ifdef excdebug}
 {$ifdef excdebug}
   writeln ('In reraise');
   writeln ('In reraise');
 {$endif}
 {$endif}
-  _ExceptAddrStack:=ExceptAddrStack;
-  If _ExceptAddrStack=Nil then
-    DoUnHandledException;
+//  _ExceptAddrStack:=ExceptAddrStack;
+//  If _ExceptAddrStack=Nil then
+//    DoUnHandledException;
   ExceptObjectStack^.refcount := 0;
   ExceptObjectStack^.refcount := 0;
   longjmp(_ExceptAddrStack^.Buf^,FPC_Exception);
   longjmp(_ExceptAddrStack^.Buf^,FPC_Exception);
 end;
 end;
@@ -327,7 +287,6 @@ Procedure SysInitExceptions;
 }
 }
 begin
 begin
   ExceptObjectstack:=Nil;
   ExceptObjectstack:=Nil;
-  ExceptAddrStack:=Nil;
 end;
 end;