]> Repositorios git - scryer-prolog.git/commitdiff
catch exceptions thrown from initialization goals (#852)
authorMark Thom <[email protected]>
Wed, 3 Mar 2021 20:56:13 +0000 (13:56 -0700)
committerMark Thom <[email protected]>
Wed, 3 Mar 2021 20:56:13 +0000 (13:56 -0700)
src/loader.pl

index 4bd88e377af19fc9fe660d3d22658db57ff287da..52f51d7d8b7d2b9b86aa1692017c8b95923f301c 100644 (file)
@@ -105,23 +105,23 @@ file_load(_, _).
 
 file_load(Stream, Path, Evacuable) :-
     create_file_load_context(Stream, Path, Evacuable),
-    catch(loader:load_loop(Stream, Evacuable),
+    catch((loader:load_loop(Stream, Evacuable),
+           loader:run_initialization_goals),
           E,
           builtins:(loader:unload_evacuable(Evacuable),
                     loader:'$print_message_and_fail'(E),
                            builtins:throw(E))),
-    run_initialization_goals,
     '$pop_load_context'.
 
 
 load(Stream) :-
     create_load_context(Stream, Evacuable),
-    catch(loader:load_loop(Stream, Evacuable),
+    catch((loader:load_loop(Stream, Evacuable),
+           loader:run_initialization_goals),
           E,
           builtins:(loader:unload_evacuable(Evacuable),
                     loader:'$print_message_and_fail'(E),
                            builtins:throw(E))),
-    run_initialization_goals,
     '$pop_load_context',
     false.        %% Clear the heap.
 load(_).