]> Repositorios git - scryer-prolog.git/commitdiff
fix some things in ffi.pl
authorSkgland <[email protected]>
Sat, 9 Aug 2025 16:35:25 +0000 (18:35 +0200)
committerBennet Bleßmann <[email protected]>
Sun, 24 Aug 2025 17:56:23 +0000 (19:56 +0200)
thanks triska for pointing out most of these

src/lib/ffi.pl

index acf1d193d303893123f472cccb23bb48c1bffcaa..8e22e1b33b5311f63d67bc43c49911d85a00f4a3 100644 (file)
@@ -52,6 +52,8 @@ And a new window should pop up!
 
 :- use_module(library(lists)).
 :- use_module(library(error)).
+:- use_module(library(format)).
+:- use_module(library(dcgs)).
 
 %% foreign_struct(+Name, +Elements).
 %
@@ -130,11 +132,11 @@ deallocate(Allocator, Type, Ptr) :-
 :- dynamic(is_array_type_defined/1).
 
 array_type(ElemType, Len, ArrayType) :-
-    phrase(format("$[~a;~d]", [ElemType, Len]), ArrayTypeName),
+    phrase(format_("$[~a;~d]", [ElemType, Len]), ArrayTypeName),
     atom_chars(ArrayType, ArrayTypeName),
     (is_array_type_defined(ArrayType) -> true
     ;   length(Fields, Len),
-        maplist('='(ElemType), Fields),
+        maplist(=(ElemType), Fields),
         foreign_struct(ArrayType, Fields),
         assertz(is_array_type_defined(ArrayType))
     ).
@@ -142,10 +144,9 @@ array_type(ElemType, Len, ArrayType) :-
 with_locals(Locals, Goal) :-
     verify_locals(Locals),
     allocate_locals(Locals),
-    ( catch(Goal, E, (deallocate(Locals), throw(E), false)) -> Success = true
-    ; Success = false
-    ),
-    deallocate_locals(Locals).
+    ( catch(Goal, E, (deallocate(Locals), throw(E))) -> deallocate_locals(Locals)
+    ; deallocate_locals(Locals), false
+    ).
 
 verify_locals(Locals) :-
     must_be(list, Locals),
@@ -162,7 +163,7 @@ allocate_locals([]).
 allocate_locals([let(Var, Type, Init) | Ls]) :-
     allocate(rust, Type, Init , Var),
     (catch(allocate_locals(Ls), E, (deallocate_locals([let(Var, Type, Init)]), throw(E))) -> true
-    ; deallocate_locals(let(Var, Type, Init)), false
+    ; deallocate_locals([let(Var, Type, Init)]), false
     ).
 
 deallocate_locals([]).