]> Repositorios git - scryer-prolog.git/commitdiff
re: issue #196
authorMark Thom <[email protected]>
Mon, 14 Oct 2019 06:07:22 +0000 (00:07 -0600)
committerMark Thom <[email protected]>
Mon, 14 Oct 2019 06:07:22 +0000 (00:07 -0600)
src/prolog/machine/attributed_variables.rs
src/prolog/machine/project_attributes.pl

index d3ad71d0b41fd8a3100b02c0886f811f5259574c..41189fadd1ec7481cc859c80c2c6e78b7b9fd7bd 100644 (file)
@@ -111,6 +111,9 @@ impl MachineState {
                     HeapCellValue::Addr(Addr::StackCell(fr, sc)) => {
                         query_vars.insert(Addr::StackCell(fr, sc));
                     }
+                    HeapCellValue::Addr(Addr::AttrVar(h)) => {
+                        query_vars.insert(Addr::AttrVar(h));
+                    }
                     _ => {}
                 };
             }
index 084d60b8ca210339a17e77f45dd46c6db806b7f0..3b399f98358a8dc4a71fe490a451cfbec2d0efa0 100644 (file)
@@ -2,8 +2,8 @@ driver(QueryVars, AttrVars) :-
     gather_modules(AttrVars, Modules0, _),
     sort(Modules0, Modules),
     call_project_attributes(Modules, QueryVars, AttrVars),
-    call_attribute_goals(Modules, QueryVars),
-    call_attribute_goals(Modules, AttrVars),
+    call_attribute_goals(Modules, call_query_var_goals, QueryVars),
+    call_attribute_goals(Modules, call_attr_var_goals, AttrVars),
     '$return_from_attribute_goals'.
 
 enqueue_goals(Goals0) :-
@@ -27,17 +27,18 @@ call_project_attributes([], _, _).
 call_project_attributes([Module|Modules], QueryVars, AttrVars) :-
     (   catch(Module:project_attributes(QueryVars, AttrVars),
              E,
-             '$print_project_attributes_exception'(Module, E))
+             '$print_project_attributes_exception'(Module, E)
+            )
     ->  true
     ;   true
     ),
     call_project_attributes(Modules, QueryVars, AttrVars).
 
-call_attribute_goals([], _).
-call_attribute_goals([Module | Modules], AttrVars) :-
-    call_goals(AttrVars, Module, Goals),
+call_attribute_goals([], _, _).
+call_attribute_goals([Module | Modules], GoalCaller, AttrVars) :-
+    call(GoalCaller, AttrVars, Module, Goals),
     enqueue_goals(Goals),
-    call_attribute_goals(Modules, AttrVars).
+    call_attribute_goals(Modules, GoalCaller, AttrVars).
 
 '$print_attribute_goals_exception'(Module, E) :-
     (  E = error(evaluation_error((Module:attribute_goals)/3), attribute_goals/3)
@@ -47,8 +48,8 @@ call_attribute_goals([Module | Modules], AttrVars) :-
        nl
     ).
 
-call_goals([], _, []).
-call_goals([AttrVar|AttrVars], Module, Goals) :-
+call_query_var_goals([], _, []).
+call_query_var_goals([AttrVar|AttrVars], Module, Goals) :-
     (  catch((  Module:attribute_goals(AttrVar, Goals, RGoals0),
                atts:'$default_attr_list'(Module, AttrVar, RGoals0, RGoals)
             ),
@@ -59,7 +60,18 @@ call_goals([AttrVar|AttrVars], Module, Goals) :-
     -> true
     ;  atts:'$default_attr_list'(Module, AttrVar, Goals, RGoals)
     ),
-    call_goals(AttrVars, Module, RGoals).
+    call_query_var_goals(AttrVars, Module, RGoals).
+
+call_attr_var_goals([], _, []).
+call_attr_var_goals([AttrVar|AttrVars], Module, Goals) :-
+    (  catch(Module:attribute_goals(AttrVar, Goals, RGoals),                        
+            E,
+            '$print_attribute_goals_exception'(Module, E)
+            )
+    -> true
+    ;  true
+    ),
+    call_attr_var_goals(AttrVars, Module, RGoals).
 
 gather_modules([], [], _).
 gather_modules([AttrVar|AttrVars], Modules, Modules0) :-