]> Repositorios git - scryer-prolog.git/commitdiff
pass more conformity tests
authorMark Thom <[email protected]>
Tue, 2 Apr 2019 05:08:03 +0000 (23:08 -0600)
committerMark Thom <[email protected]>
Tue, 2 Apr 2019 05:08:03 +0000 (23:08 -0600)
Cargo.toml
src/prolog/lib/builtins.pl

index 5a10a986709021074dacc930d3dbedbecaaaa3f1..4ef3bccfd3b020d0d86ee2d3d12339692ef7ffc5 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "scryer-prolog"
-version = "0.8.36"
+version = "0.8.37"
 authors = ["Mark Thom <[email protected]>"]
 repository = "https://github.com/mthom/scryer-prolog"
 description = "A modern Prolog implementation written mostly in Rust."
index 7357d230c0ac4a65e0d183298b13f52e841c84af..247113153fd531a597f06de0a90c8fdb7eb3844d 100644 (file)
@@ -738,9 +738,10 @@ op_specifier(OpSpec) :- atom(OpSpec),
     ).
 op_specifier(OpSpec) :- throw(error(type_error(atom, OpSpec), op/3)).
 
-valid_op(Op) :- atom(Op),
+valid_op(Op) :- atom(Op),    
     (  Op == (,) -> throw(error(permission_error(modify, operator, (,)), op/3)) % 8.14.3.3 j), k).
-    ;  Op == '|' -> throw(error(permission_error(create, operator, (|)), op/3)) % www.complang.tuwien.ac.at/ulrich/iso-prolog/conformity_testing#72
+    ;  Op == {} -> throw(error(permission_error(create, operator, {}), op/3))
+    ;  Op == [] -> throw(error(permission_error(create, operator, []), op/3))
     ;  true
     ).
 
@@ -750,6 +751,10 @@ op(Priority, OpSpec, Op) :-
     (  var(Priority) -> throw(error(instantiation_error, op/3)) % 8.14.3.3 a)
     ;  var(OpSpec)   -> throw(error(instantiation_error, op/3)) % 8.14.3.3 b)
     ;  var(Op)       -> throw(error(instantiation_error, op/3)) % 8.14.3.3 c)
+    ;  Op == '|'     -> (  op_priority(Priority), op_specifier(OpSpec),
+                          lists:member(OpSpec, [xfx, xfy, yfx]), Priority >= 1001
+                       -> '$op'(Priority, OpSpec, Op)
+                       ;  throw(error(permission_error(create, operator, (|)), op/3))) % www.complang.tuwien.ac.at/ulrich/iso-prolog/conformity_testing#72
     ;  valid_op(Op), op_priority(Priority), op_specifier(OpSpec) ->
        '$op'(Priority, OpSpec, Op)
     ;  list_of_op_atoms(Op), op_priority(Priority), op_specifier(OpSpec) ->