From dbc2fd5cf50a4b960623f6bddbe4bc722bf51eb3 Mon Sep 17 00:00:00 2001 From: LeonardoBizzoni Date: Sun, 17 Dec 2023 10:01:35 +0100 Subject: [PATCH] Spammato `nonvar(ClassName)` per sicurezza --- Prolog/README.org | 21 +++++++++++++++++++-- Prolog/oop.pl | 21 +++++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/Prolog/README.org b/Prolog/README.org index 49a1666..560b835 100644 --- a/Prolog/README.org +++ b/Prolog/README.org @@ -24,8 +24,14 @@ :- abolish(is_instance/2). :- abolish(field/3). -def_class(ClassName, []) :- asserta(is_class(ClassName)), !. +def_class(ClassName, []) :- + nonvar(ClassName), + asserta(is_class(ClassName)), + !. def_class(ClassName, [Parent | OtherParents]) :- + nonvar(ClassName), + nonvar(Parent), + nonvar(OtherParents), is_class(Parent), asserta(is_child_of(Parent, ClassName)), def_class(ClassName, OtherParents), @@ -35,8 +41,14 @@ def_class(ClassName, [Parent | OtherParents]) :- ParentParts), add_part(ClassName, ParentParts). -def_class(ClassName, [], []) :- def_class(ClassName, []), !. +def_class(ClassName, [], []) :- + nonvar(ClassName), + def_class(ClassName, []), + !. def_class(ClassName, Parents, Parts) :- + nonvar(ClassName), + nonvar(Parents), + nonvar(Parts), def_class(ClassName, Parents), add_part(ClassName, Parts). #+end_src @@ -52,11 +64,13 @@ def_class(ClassName, Parents, Parts) :- #+begin_src prolog :tangle oop.pl make(InstanceName, ClassName) :- nonvar(InstanceName), + nonvar(ClassName), !, make(InstanceName, ClassName, []). make(InstanceName, ClassName, []) :- nonvar(InstanceName), + nonvar(ClassName), is_class(ClassName), \+ is_instance(InstanceName), !, @@ -70,6 +84,7 @@ make(InstanceName, ClassName, []) :- make(InstanceName, ClassName, [Field | Other]) :- nonvar(InstanceName), + nonvar(ClassName), [Field | Other] = Fields, !, make(InstanceName, ClassName, []), @@ -80,11 +95,13 @@ make(InstanceName, ClassName, [Field | Other]) :- #+begin_src prolog :tangle oop.pl make(InstanceName, ClassName) :- var(InstanceName), + nonvar(ClassName), !, is_instance(InstanceName, ClassName). make(InstanceName, ClassName, Fields) :- var(InstanceName), + nonvar(ClassName), is_list(Fields), Fields \= [], is_instance(InstanceName, ClassName), diff --git a/Prolog/oop.pl b/Prolog/oop.pl index d360f96..24325bc 100644 --- a/Prolog/oop.pl +++ b/Prolog/oop.pl @@ -11,8 +11,14 @@ :- abolish(is_instance/2). :- abolish(field/3). -def_class(ClassName, []) :- asserta(is_class(ClassName)), !. +def_class(ClassName, []) :- + nonvar(ClassName), + asserta(is_class(ClassName)), + !. def_class(ClassName, [Parent | OtherParents]) :- + nonvar(ClassName), + nonvar(Parent), + nonvar(OtherParents), is_class(Parent), asserta(is_child_of(Parent, ClassName)), def_class(ClassName, OtherParents), @@ -22,18 +28,26 @@ def_class(ClassName, [Parent | OtherParents]) :- ParentParts), add_part(ClassName, ParentParts). -def_class(ClassName, [], []) :- def_class(ClassName, []), !. +def_class(ClassName, [], []) :- + nonvar(ClassName), + def_class(ClassName, []), + !. def_class(ClassName, Parents, Parts) :- + nonvar(ClassName), + nonvar(Parents), + nonvar(Parts), def_class(ClassName, Parents), add_part(ClassName, Parts). make(InstanceName, ClassName) :- nonvar(InstanceName), + nonvar(ClassName), !, make(InstanceName, ClassName, []). make(InstanceName, ClassName, []) :- nonvar(InstanceName), + nonvar(ClassName), is_class(ClassName), \+ is_instance(InstanceName), !, @@ -47,6 +61,7 @@ make(InstanceName, ClassName, []) :- make(InstanceName, ClassName, [Field | Other]) :- nonvar(InstanceName), + nonvar(ClassName), [Field | Other] = Fields, !, make(InstanceName, ClassName, []), @@ -54,11 +69,13 @@ make(InstanceName, ClassName, [Field | Other]) :- make(InstanceName, ClassName) :- var(InstanceName), + nonvar(ClassName), !, is_instance(InstanceName, ClassName). make(InstanceName, ClassName, Fields) :- var(InstanceName), + nonvar(ClassName), is_list(Fields), Fields \= [], is_instance(InstanceName, ClassName), -- 2.52.0