]> Repositorios git - scryer-prolog.git/commitdiff
improve call/N implementation (#1829)
authorMark <[email protected]>
Sat, 10 Jun 2023 07:25:47 +0000 (01:25 -0600)
committerMark <[email protected]>
Sat, 10 Jun 2023 23:32:18 +0000 (17:32 -0600)
build/instructions_template.rs
src/loader.pl
src/machine/dispatch.rs
src/machine/loader.rs
src/machine/machine_indices.rs
src/machine/system_calls.rs
src/macros.rs
src/toplevel.pl

index bec70e7e3101522146a7a93fbd645e72bad18d9c..1fd2a60af85cc06a7688b98d058a2784f84825fa 100644 (file)
@@ -560,8 +560,8 @@ enum SystemClauseType {
     StripModule,
     #[strum_discriminants(strum(props(Arity = "4", Name = "$compile_inline_or_expanded_goal")))]
     CompileInlineOrExpandedGoal,
-    #[strum_discriminants(strum(props(Arity = "arity", Name = "$call_inline")))]
-    InlineCallN(usize),
+    #[strum_discriminants(strum(props(Arity = "arity", Name = "$fast_call")))]
+    FastCallN(usize),
     #[strum_discriminants(strum(props(Arity = "1", Name = "$is_expanded_or_inlined")))]
     IsExpandedOrInlined,
     #[strum_discriminants(strum(props(Arity = "3", Name = "$get_clause_p")))]
@@ -1467,11 +1467,11 @@ fn generate_instruction_preface() -> TokenStream {
                     &Instruction::DefaultExecuteN(arity, _) => {
                         functor!(atom!("execute_default_n"), [fixnum(arity)])
                     }
-                    &Instruction::CallInlineCallN(arity, _) => {
-                        functor!(atom!("call_n_inline"), [fixnum(arity)])
+                    &Instruction::CallFastCallN(arity, _) => {
+                        functor!(atom!("call_fast_call_n"), [fixnum(arity)])
                     }
-                    &Instruction::ExecuteInlineCallN(arity, _) => {
-                        functor!(atom!("call_n_inline"), [fixnum(arity)])
+                    &Instruction::ExecuteFastCallN(arity, _) => {
+                        functor!(atom!("execute_fast_call_n"), [fixnum(arity)])
                     }
                     &Instruction::CallTermGreaterThan(_) |
                     &Instruction::CallTermLessThan(_) |
index 896d6bff5a97115116ffefacf0f6aa5564788900..754ed96f9592a40493ba0094878f52722c783ffe 100644 (file)
@@ -758,7 +758,6 @@ expand_goal(UnexpandedGoals, Module, ExpandedGoals) :-
           UnexpandedGoals = ExpandedGoals),
     !.
 
-
 :- non_counted_backtracking expand_goal/4.
 
 expand_goal(UnexpandedGoals, Module, ExpandedGoals, HeadVars) :-
@@ -779,7 +778,6 @@ expand_goal(UnexpandedGoals, Module, ExpandedGoals, HeadVars) :-
        )
     ).
 
-
 /*
  * private predicate for use in call/N. it doesn't specially consider
  * control predicates as expand_goal does with expand_goal_cases.
@@ -790,27 +788,20 @@ expand_goal(UnexpandedGoals, Module, ExpandedGoals, HeadVars) :-
 
 expand_call_goal(UnexpandedGoals, Module, ExpandedGoals) :-
     % if a goal isn't callable, defer to call/N to report the error.
-    catch(loader:expand_call_goal_(UnexpandedGoals, Module, ExpandedGoals),
+    catch('$call'(loader:expand_call_goal_(UnexpandedGoals, Module, ExpandedGoals)),
           error(type_error(callable, _), _),
-          UnexpandedGoals = ExpandedGoals),
+          '$call'(UnexpandedGoals = ExpandedGoals)),
     !.
 
-
 :- non_counted_backtracking expand_call_goal_/3.
 
 expand_call_goal_(UnexpandedGoals, Module, ExpandedGoals) :-
     (  var(UnexpandedGoals) ->
-       expand_module_names(call(UnexpandedGoals), [0], Module, ExpandedGoals, [])
+       UnexpandedGoals = ExpandedGoals
     ;  goal_expansion(UnexpandedGoals, Module, UnexpandedGoals1),
        (  Module \== user ->
-          goal_expansion(UnexpandedGoals1, user, Goals)
-       ;  Goals = UnexpandedGoals1
-       ),
-       (  predicate_property(Module:Goals, meta_predicate(MetaSpecs0)),
-          MetaSpecs0 =.. [_ | MetaSpecs] ->
-          expand_module_names(Goals, MetaSpecs, Module, ExpandedGoals, [])
-       ;  thread_goals(Goals, ExpandedGoals, (','))
-       ;  Goals = ExpandedGoals
+          goal_expansion(UnexpandedGoals1, user, ExpandedGoals)
+       ;  ExpandedGoals = UnexpandedGoals1
        )
     ).
 
@@ -838,7 +829,6 @@ expand_goal_cases((Module:Goals0), _, ExpandedGoals, HeadVars) :-
     expand_goal(Goals0, Module, Goals1, HeadVars),
     ExpandedGoals = (Module:Goals1).
 
-
 :- non_counted_backtracking thread_goals/3.
 
 thread_goals(Goals0, Goals1, Functor) :-
@@ -853,7 +843,6 @@ thread_goals(Goals0, Goals1, Functor) :-
     ;  Goals1 = Goals0
     ).
 
-
 :- non_counted_backtracking thread_goals/4.
 
 thread_goals(Goals0, Goals1, Hole, Functor) :-
@@ -872,8 +861,6 @@ thread_goals(Goals0, Goals1, Hole, Functor) :-
 %
 % call/{1-64} with dynamic goal expansion.
 %
-% The program used to generate the call/N predicates:
-%
 % :- use_module(library(between)).
 % :- use_module(library(error)).
 % :- use_module(library(lists)).
@@ -884,22 +871,18 @@ thread_goals(Goals0, Goals1, Hole, Functor) :-
 %     Head =.. [call, G | Args],
 %     CallNHead =.. [call, '$call'(G) | Args],
 %     N1 is N + 1,
-%     InlineCall =.. ['$call_inline', G0 | Args],
-%     CallClause =.. ['$prepare_call_clause', G1, M1, G | Args],
-%     ModuleCallClause0 =.. ['$module_call', M1, G1],
-%     ModuleCallClause1 =.. ['$module_call', M2, G3],
+%     StripModule =.. ['$strip_module', G, M1, G1],
+%     FastCall =.. ['$fast_call', G | Args],
+%     PrepareCallClause =.. [ '$prepare_call_clause', G2, G1 | Args],
+%     ModuleCall =.. ['$module_call', M2, G4],
 %     Clauses = [(Head :- var(G),
 %                         instantiation_error(call/N1)),
-%                (Head :- '$strip_module'(G, _, G0), InlineCall),
-%                (CallNHead :- !,
-%                     CallClause,
-%                     '$call_with_inference_counting'(ModuleCallClause0)),
-%                (Head :- CallClause,
-%                         (  '$call_inline'(G1)
-%                         ;  expand_call_goal(G1, M1, G2),
-%                            strip_subst_module(G2, M1, M2, G3),
-%                            '$call_with_inference_counting'(ModuleCallClause1)
-%                         ))].
+%                (Head :- FastCall),
+%                (Head :- StripModule,
+%                         PrepareCallClause,
+%                         expand_call_goal(G2, M1, G3),
+%                         strip_subst_module(G3, M1, M2, G4),
+%                         '$call_with_inference_counting'(ModuleCall))].
 %
 % generate_call_forms :-
 %     between(1, 64, N),
@@ -915,1237 +898,847 @@ thread_goals(Goals0, Goals1, Hole, Functor) :-
 % The '$call' functor is an escape hatch from goal expansion. So far,
 % it is used only to avoid infinite recursion into expand_call_goal/3.
 
-:-non_counted_backtracking call/1.
-call(G) :-
-   var(G),
-   instantiation_error(call/1).
+:- non_counted_backtracking call/1.
+
 call(G) :-
-   '$strip_module'(G, _, G0),
-   '$call_inline'(G0).
-call('$call'(G0)) :-
-   !,
-   '$prepare_call_clause'(G,M,G0),
-   '$call_with_inference_counting'('$module_call'(M, G)).
+    var(G),
+    instantiation_error(call/1).
 call(G) :-
-   '$prepare_call_clause'(G0,M1,G),
-   (  '$call_inline'(G0) %% '$call_inline' cuts (only) after succeeding.
-   ;  expand_call_goal(G0, M1, G1),
-      strip_subst_module(G1, M1, M2, G2),
-      '$call_with_inference_counting'('$module_call'(M2, G2))
-   ).
+    '$fast_call'(G).
+call(G0) :-
+    '$strip_module'(G0, M0, G1),
+    expand_call_goal(G1, M0, G2),
+    strip_subst_module(G2, M0, M1, G3),
+    '$call_with_inference_counting'('$module_call'(M1, G3)).
 
 :-non_counted_backtracking call/2.
 call(A,B) :-
    var(A),
    instantiation_error(call/2).
 call(A,B) :-
-   '$strip_module'(A,C,D),
-   '$call_inline'(D,B).
-call('$call'(A),B) :-
-   !,
-   '$prepare_call_clause'(C,D,A,B),
-   '$call_with_inference_counting'('$module_call'(D,C)).
+   '$fast_call'(A,B).
 call(A,B) :-
-   '$prepare_call_clause'(C,D,A,B),
-   (  '$call_inline'(C)
-   ;  expand_call_goal(C,D,E),
-      strip_subst_module(E,D,F,G),
-      '$call_with_inference_counting'('$module_call'(F,G))
-   ).
+   '$strip_module'(A,C,D),
+   '$prepare_call_clause'(E,D,B),
+   expand_call_goal(E,C,F),
+   strip_subst_module(F,C,G,H),
+   '$call_with_inference_counting'('$module_call'(G,H)).
 
 :-non_counted_backtracking call/3.
 call(A,B,C) :-
    var(A),
    instantiation_error(call/3).
 call(A,B,C) :-
-   '$strip_module'(A,D,E),
-   '$call_inline'(E,B,C).
-call('$call'(A),B,C) :-
-   !,
-   '$prepare_call_clause'(D,E,A,B,C),
-   '$call_with_inference_counting'('$module_call'(E,D)).
+   '$fast_call'(A,B,C).
 call(A,B,C) :-
-   '$prepare_call_clause'(D,E,A,B,C),
-   (  '$call_inline'(D)
-   ;  expand_call_goal(D,E,F),
-      strip_subst_module(F,E,G,H),
-      '$call_with_inference_counting'('$module_call'(G,H))
-   ).
+   '$strip_module'(A,D,E),
+   '$prepare_call_clause'(F,E,B,C),
+   expand_call_goal(F,D,G),
+   strip_subst_module(G,D,H,I),
+   '$call_with_inference_counting'('$module_call'(H,I)).
 
 :-non_counted_backtracking call/4.
 call(A,B,C,D) :-
    var(A),
    instantiation_error(call/4).
 call(A,B,C,D) :-
-   '$strip_module'(A,E,F),
-   '$call_inline'(F,B,C,D).
-call('$call'(A),B,C,D) :-
-   !,
-   '$prepare_call_clause'(E,F,A,B,C,D),
-   '$call_with_inference_counting'('$module_call'(F,E)).
+   '$fast_call'(A,B,C,D).
 call(A,B,C,D) :-
-   '$prepare_call_clause'(E,F,A,B,C,D),
-   (  '$call_inline'(E)
-   ;  expand_call_goal(E,F,G),
-      strip_subst_module(G,F,H,I),
-      '$call_with_inference_counting'('$module_call'(H,I))
-   ).
+   '$strip_module'(A,E,F),
+   '$prepare_call_clause'(G,F,B,C,D),
+   expand_call_goal(G,E,H),
+   strip_subst_module(H,E,I,J),
+   '$call_with_inference_counting'('$module_call'(I,J)).
 
 :-non_counted_backtracking call/5.
 call(A,B,C,D,E) :-
    var(A),
    instantiation_error(call/5).
 call(A,B,C,D,E) :-
-   '$strip_module'(A,F,G),
-   '$call_inline'(G,B,C,D,E).
-call('$call'(A),B,C,D,E) :-
-   !,
-   '$prepare_call_clause'(F,G,A,B,C,D,E),
-   '$call_with_inference_counting'('$module_call'(G,F)).
+   '$fast_call'(A,B,C,D,E).
 call(A,B,C,D,E) :-
-   '$prepare_call_clause'(F,G,A,B,C,D,E),
-   (  '$call_inline'(F)
-   ;  expand_call_goal(F,G,H),
-      strip_subst_module(H,G,I,J),
-      '$call_with_inference_counting'('$module_call'(I,J))
-   ).
+   '$strip_module'(A,F,G),
+   '$prepare_call_clause'(H,G,B,C,D,E),
+   expand_call_goal(H,F,I),
+   strip_subst_module(I,F,J,K),
+   '$call_with_inference_counting'('$module_call'(J,K)).
 
 :-non_counted_backtracking call/6.
 call(A,B,C,D,E,F) :-
    var(A),
    instantiation_error(call/6).
 call(A,B,C,D,E,F) :-
-   '$strip_module'(A,G,H),
-   '$call_inline'(H,B,C,D,E,F).
-call('$call'(A),B,C,D,E,F) :-
-   !,
-   '$prepare_call_clause'(G,H,A,B,C,D,E,F),
-   '$call_with_inference_counting'('$module_call'(H,G)).
+   '$fast_call'(A,B,C,D,E,F).
 call(A,B,C,D,E,F) :-
-   '$prepare_call_clause'(G,H,A,B,C,D,E,F),
-   (  '$call_inline'(G)
-   ;  expand_call_goal(G,H,I),
-      strip_subst_module(I,H,J,K),
-      '$call_with_inference_counting'('$module_call'(J,K))
-   ).
+   '$strip_module'(A,G,H),
+   '$prepare_call_clause'(I,H,B,C,D,E,F),
+   expand_call_goal(I,G,J),
+   strip_subst_module(J,G,K,L),
+   '$call_with_inference_counting'('$module_call'(K,L)).
 
 :-non_counted_backtracking call/7.
 call(A,B,C,D,E,F,G) :-
    var(A),
    instantiation_error(call/7).
 call(A,B,C,D,E,F,G) :-
-   '$strip_module'(A,H,I),
-   '$call_inline'(I,B,C,D,E,F,G).
-call('$call'(A),B,C,D,E,F,G) :-
-   !,
-   '$prepare_call_clause'(H,I,A,B,C,D,E,F,G),
-   '$call_with_inference_counting'('$module_call'(I,H)).
+   '$fast_call'(A,B,C,D,E,F,G).
 call(A,B,C,D,E,F,G) :-
-   '$prepare_call_clause'(H,I,A,B,C,D,E,F,G),
-   (  '$call_inline'(H)
-   ;  expand_call_goal(H,I,J),
-      strip_subst_module(J,I,K,L),
-      '$call_with_inference_counting'('$module_call'(K,L))
-   ).
+   '$strip_module'(A,H,I),
+   '$prepare_call_clause'(J,I,B,C,D,E,F,G),
+   expand_call_goal(J,H,K),
+   strip_subst_module(K,H,L,M),
+   '$call_with_inference_counting'('$module_call'(L,M)).
 
 :-non_counted_backtracking call/8.
 call(A,B,C,D,E,F,G,H) :-
    var(A),
    instantiation_error(call/8).
 call(A,B,C,D,E,F,G,H) :-
-   '$strip_module'(A,I,J),
-   '$call_inline'(J,B,C,D,E,F,G,H).
-call('$call'(A),B,C,D,E,F,G,H) :-
-   !,
-   '$prepare_call_clause'(I,J,A,B,C,D,E,F,G,H),
-   '$call_with_inference_counting'('$module_call'(J,I)).
+   '$fast_call'(A,B,C,D,E,F,G,H).
 call(A,B,C,D,E,F,G,H) :-
-   '$prepare_call_clause'(I,J,A,B,C,D,E,F,G,H),
-   (  '$call_inline'(I)
-   ;  expand_call_goal(I,J,K),
-      strip_subst_module(K,J,L,M),
-      '$call_with_inference_counting'('$module_call'(L,M))
-   ).
+   '$strip_module'(A,I,J),
+   '$prepare_call_clause'(K,J,B,C,D,E,F,G,H),
+   expand_call_goal(K,I,L),
+   strip_subst_module(L,I,M,N),
+   '$call_with_inference_counting'('$module_call'(M,N)).
 
 :-non_counted_backtracking call/9.
 call(A,B,C,D,E,F,G,H,I) :-
    var(A),
    instantiation_error(call/9).
 call(A,B,C,D,E,F,G,H,I) :-
-   '$strip_module'(A,J,K),
-   '$call_inline'(K,B,C,D,E,F,G,H,I).
-call('$call'(A),B,C,D,E,F,G,H,I) :-
-   !,
-   '$prepare_call_clause'(J,K,A,B,C,D,E,F,G,H,I),
-   '$call_with_inference_counting'('$module_call'(K,J)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I).
 call(A,B,C,D,E,F,G,H,I) :-
-   '$prepare_call_clause'(J,K,A,B,C,D,E,F,G,H,I),
-   (  '$call_inline'(J)
-   ;  expand_call_goal(J,K,L),
-      strip_subst_module(L,K,M,N),
-      '$call_with_inference_counting'('$module_call'(M,N))
-   ).
+   '$strip_module'(A,J,K),
+   '$prepare_call_clause'(L,K,B,C,D,E,F,G,H,I),
+   expand_call_goal(L,J,M),
+   strip_subst_module(M,J,N,O),
+   '$call_with_inference_counting'('$module_call'(N,O)).
 
 :-non_counted_backtracking call/10.
 call(A,B,C,D,E,F,G,H,I,J) :-
    var(A),
    instantiation_error(call/10).
 call(A,B,C,D,E,F,G,H,I,J) :-
-   '$strip_module'(A,K,L),
-   '$call_inline'(L,B,C,D,E,F,G,H,I,J).
-call('$call'(A),B,C,D,E,F,G,H,I,J) :-
-   !,
-   '$prepare_call_clause'(K,L,A,B,C,D,E,F,G,H,I,J),
-   '$call_with_inference_counting'('$module_call'(L,K)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J).
 call(A,B,C,D,E,F,G,H,I,J) :-
-   '$prepare_call_clause'(K,L,A,B,C,D,E,F,G,H,I,J),
-   (  '$call_inline'(K)
-   ;  expand_call_goal(K,L,M),
-      strip_subst_module(M,L,N,O),
-      '$call_with_inference_counting'('$module_call'(N,O))
-   ).
+   '$strip_module'(A,K,L),
+   '$prepare_call_clause'(M,L,B,C,D,E,F,G,H,I,J),
+   expand_call_goal(M,K,N),
+   strip_subst_module(N,K,O,P),
+   '$call_with_inference_counting'('$module_call'(O,P)).
 
 :-non_counted_backtracking call/11.
 call(A,B,C,D,E,F,G,H,I,J,K) :-
    var(A),
    instantiation_error(call/11).
 call(A,B,C,D,E,F,G,H,I,J,K) :-
-   '$strip_module'(A,L,M),
-   '$call_inline'(M,B,C,D,E,F,G,H,I,J,K).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K) :-
-   !,
-   '$prepare_call_clause'(L,M,A,B,C,D,E,F,G,H,I,J,K),
-   '$call_with_inference_counting'('$module_call'(M,L)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K).
 call(A,B,C,D,E,F,G,H,I,J,K) :-
-   '$prepare_call_clause'(L,M,A,B,C,D,E,F,G,H,I,J,K),
-   (  '$call_inline'(L)
-   ;  expand_call_goal(L,M,N),
-      strip_subst_module(N,M,O,P),
-      '$call_with_inference_counting'('$module_call'(O,P))
-   ).
+   '$strip_module'(A,L,M),
+   '$prepare_call_clause'(N,M,B,C,D,E,F,G,H,I,J,K),
+   expand_call_goal(N,L,O),
+   strip_subst_module(O,L,P,Q),
+   '$call_with_inference_counting'('$module_call'(P,Q)).
 
 :-non_counted_backtracking call/12.
 call(A,B,C,D,E,F,G,H,I,J,K,L) :-
    var(A),
    instantiation_error(call/12).
 call(A,B,C,D,E,F,G,H,I,J,K,L) :-
-   '$strip_module'(A,M,N),
-   '$call_inline'(N,B,C,D,E,F,G,H,I,J,K,L).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L) :-
-   !,
-   '$prepare_call_clause'(M,N,A,B,C,D,E,F,G,H,I,J,K,L),
-   '$call_with_inference_counting'('$module_call'(N,M)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L).
 call(A,B,C,D,E,F,G,H,I,J,K,L) :-
-   '$prepare_call_clause'(M,N,A,B,C,D,E,F,G,H,I,J,K,L),
-   (  '$call_inline'(M)
-   ;  expand_call_goal(M,N,O),
-      strip_subst_module(O,N,P,Q),
-      '$call_with_inference_counting'('$module_call'(P,Q))
-   ).
+   '$strip_module'(A,M,N),
+   '$prepare_call_clause'(O,N,B,C,D,E,F,G,H,I,J,K,L),
+   expand_call_goal(O,M,P),
+   strip_subst_module(P,M,Q,R),
+   '$call_with_inference_counting'('$module_call'(Q,R)).
 
 :-non_counted_backtracking call/13.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M) :-
    var(A),
    instantiation_error(call/13).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M) :-
-   '$strip_module'(A,N,O),
-   '$call_inline'(O,B,C,D,E,F,G,H,I,J,K,L,M).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M) :-
-   !,
-   '$prepare_call_clause'(N,O,A,B,C,D,E,F,G,H,I,J,K,L,M),
-   '$call_with_inference_counting'('$module_call'(O,N)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M) :-
-   '$prepare_call_clause'(N,O,A,B,C,D,E,F,G,H,I,J,K,L,M),
-   (  '$call_inline'(N)
-   ;  expand_call_goal(N,O,P),
-      strip_subst_module(P,O,Q,R),
-      '$call_with_inference_counting'('$module_call'(Q,R))
-   ).
+   '$strip_module'(A,N,O),
+   '$prepare_call_clause'(P,O,B,C,D,E,F,G,H,I,J,K,L,M),
+   expand_call_goal(P,N,Q),
+   strip_subst_module(Q,N,R,S),
+   '$call_with_inference_counting'('$module_call'(R,S)).
 
 :-non_counted_backtracking call/14.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N) :-
    var(A),
    instantiation_error(call/14).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N) :-
-   '$strip_module'(A,O,P),
-   '$call_inline'(P,B,C,D,E,F,G,H,I,J,K,L,M,N).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N) :-
-   !,
-   '$prepare_call_clause'(O,P,A,B,C,D,E,F,G,H,I,J,K,L,M,N),
-   '$call_with_inference_counting'('$module_call'(P,O)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N) :-
-   '$prepare_call_clause'(O,P,A,B,C,D,E,F,G,H,I,J,K,L,M,N),
-   (  '$call_inline'(O)
-   ;  expand_call_goal(O,P,Q),
-      strip_subst_module(Q,P,R,S),
-      '$call_with_inference_counting'('$module_call'(R,S))
-   ).
+   '$strip_module'(A,O,P),
+   '$prepare_call_clause'(Q,P,B,C,D,E,F,G,H,I,J,K,L,M,N),
+   expand_call_goal(Q,O,R),
+   strip_subst_module(R,O,S,T),
+   '$call_with_inference_counting'('$module_call'(S,T)).
 
 :-non_counted_backtracking call/15.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) :-
    var(A),
    instantiation_error(call/15).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) :-
-   '$strip_module'(A,P,Q),
-   '$call_inline'(Q,B,C,D,E,F,G,H,I,J,K,L,M,N,O).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O) :-
-   !,
-   '$prepare_call_clause'(P,Q,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O),
-   '$call_with_inference_counting'('$module_call'(Q,P)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) :-
-   '$prepare_call_clause'(P,Q,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O),
-   (  '$call_inline'(P)
-   ;  expand_call_goal(P,Q,R),
-      strip_subst_module(R,Q,S,T),
-      '$call_with_inference_counting'('$module_call'(S,T))
-   ).
+   '$strip_module'(A,P,Q),
+   '$prepare_call_clause'(R,Q,B,C,D,E,F,G,H,I,J,K,L,M,N,O),
+   expand_call_goal(R,P,S),
+   strip_subst_module(S,P,T,U),
+   '$call_with_inference_counting'('$module_call'(T,U)).
 
 :-non_counted_backtracking call/16.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) :-
    var(A),
    instantiation_error(call/16).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) :-
-   '$strip_module'(A,Q,R),
-   '$call_inline'(R,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) :-
-   !,
-   '$prepare_call_clause'(Q,R,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P),
-   '$call_with_inference_counting'('$module_call'(R,Q)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) :-
-   '$prepare_call_clause'(Q,R,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P),
-   (  '$call_inline'(Q)
-   ;  expand_call_goal(Q,R,S),
-      strip_subst_module(S,R,T,U),
-      '$call_with_inference_counting'('$module_call'(T,U))
-   ).
+   '$strip_module'(A,Q,R),
+   '$prepare_call_clause'(S,R,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P),
+   expand_call_goal(S,Q,T),
+   strip_subst_module(T,Q,U,V),
+   '$call_with_inference_counting'('$module_call'(U,V)).
 
 :-non_counted_backtracking call/17.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q) :-
    var(A),
    instantiation_error(call/17).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q) :-
-   '$strip_module'(A,R,S),
-   '$call_inline'(S,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q) :-
-   !,
-   '$prepare_call_clause'(R,S,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q),
-   '$call_with_inference_counting'('$module_call'(S,R)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q) :-
-   '$prepare_call_clause'(R,S,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q),
-   (  '$call_inline'(R)
-   ;  expand_call_goal(R,S,T),
-      strip_subst_module(T,S,U,V),
-      '$call_with_inference_counting'('$module_call'(U,V))
-   ).
+   '$strip_module'(A,R,S),
+   '$prepare_call_clause'(T,S,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q),
+   expand_call_goal(T,R,U),
+   strip_subst_module(U,R,V,W),
+   '$call_with_inference_counting'('$module_call'(V,W)).
 
 :-non_counted_backtracking call/18.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) :-
    var(A),
    instantiation_error(call/18).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) :-
-   '$strip_module'(A,S,T),
-   '$call_inline'(T,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) :-
-   !,
-   '$prepare_call_clause'(S,T,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R),
-   '$call_with_inference_counting'('$module_call'(T,S)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) :-
-   '$prepare_call_clause'(S,T,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R),
-   (  '$call_inline'(S)
-   ;  expand_call_goal(S,T,U),
-      strip_subst_module(U,T,V,W),
-      '$call_with_inference_counting'('$module_call'(V,W))
-   ).
+   '$strip_module'(A,S,T),
+   '$prepare_call_clause'(U,T,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R),
+   expand_call_goal(U,S,V),
+   strip_subst_module(V,S,W,X),
+   '$call_with_inference_counting'('$module_call'(W,X)).
 
 :-non_counted_backtracking call/19.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S) :-
    var(A),
    instantiation_error(call/19).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S) :-
-   '$strip_module'(A,T,U),
-   '$call_inline'(U,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S) :-
-   !,
-   '$prepare_call_clause'(T,U,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S),
-   '$call_with_inference_counting'('$module_call'(U,T)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S) :-
-   '$prepare_call_clause'(T,U,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S),
-   (  '$call_inline'(T)
-   ;  expand_call_goal(T,U,V),
-      strip_subst_module(V,U,W,X),
-      '$call_with_inference_counting'('$module_call'(W,X))
-   ).
+   '$strip_module'(A,T,U),
+   '$prepare_call_clause'(V,U,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S),
+   expand_call_goal(V,T,W),
+   strip_subst_module(W,T,X,Y),
+   '$call_with_inference_counting'('$module_call'(X,Y)).
 
 :-non_counted_backtracking call/20.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) :-
    var(A),
    instantiation_error(call/20).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) :-
-   '$strip_module'(A,U,V),
-   '$call_inline'(V,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) :-
-   !,
-   '$prepare_call_clause'(U,V,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T),
-   '$call_with_inference_counting'('$module_call'(V,U)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) :-
-   '$prepare_call_clause'(U,V,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T),
-   (  '$call_inline'(U)
-   ;  expand_call_goal(U,V,W),
-      strip_subst_module(W,V,X,Y),
-      '$call_with_inference_counting'('$module_call'(X,Y))
-   ).
+   '$strip_module'(A,U,V),
+   '$prepare_call_clause'(W,V,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T),
+   expand_call_goal(W,U,X),
+   strip_subst_module(X,U,Y,Z),
+   '$call_with_inference_counting'('$module_call'(Y,Z)).
 
 :-non_counted_backtracking call/21.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U) :-
    var(A),
    instantiation_error(call/21).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U) :-
-   '$strip_module'(A,V,W),
-   '$call_inline'(W,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U) :-
-   !,
-   '$prepare_call_clause'(V,W,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U),
-   '$call_with_inference_counting'('$module_call'(W,V)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U) :-
-   '$prepare_call_clause'(V,W,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U),
-   (  '$call_inline'(V)
-   ;  expand_call_goal(V,W,X),
-      strip_subst_module(X,W,Y,Z),
-      '$call_with_inference_counting'('$module_call'(Y,Z))
-   ).
+   '$strip_module'(A,V,W),
+   '$prepare_call_clause'(X,W,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U),
+   expand_call_goal(X,V,Y),
+   strip_subst_module(Y,V,Z,A1),
+   '$call_with_inference_counting'('$module_call'(Z,A1)).
 
 :-non_counted_backtracking call/22.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V) :-
    var(A),
    instantiation_error(call/22).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V) :-
-   '$strip_module'(A,W,X),
-   '$call_inline'(X,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V) :-
-   !,
-   '$prepare_call_clause'(W,X,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V),
-   '$call_with_inference_counting'('$module_call'(X,W)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V) :-
-   '$prepare_call_clause'(W,X,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V),
-   (  '$call_inline'(W)
-   ;  expand_call_goal(W,X,Y),
-      strip_subst_module(Y,X,Z,A1),
-      '$call_with_inference_counting'('$module_call'(Z,A1))
-   ).
+   '$strip_module'(A,W,X),
+   '$prepare_call_clause'(Y,X,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V),
+   expand_call_goal(Y,W,Z),
+   strip_subst_module(Z,W,A1,B1),
+   '$call_with_inference_counting'('$module_call'(A1,B1)).
 
 :-non_counted_backtracking call/23.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W) :-
    var(A),
    instantiation_error(call/23).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W) :-
-   '$strip_module'(A,X,Y),
-   '$call_inline'(Y,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W) :-
-   !,
-   '$prepare_call_clause'(X,Y,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W),
-   '$call_with_inference_counting'('$module_call'(Y,X)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W) :-
-   '$prepare_call_clause'(X,Y,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W),
-   (  '$call_inline'(X)
-   ;  expand_call_goal(X,Y,Z),
-      strip_subst_module(Z,Y,A1,B1),
-      '$call_with_inference_counting'('$module_call'(A1,B1))
-   ).
+   '$strip_module'(A,X,Y),
+   '$prepare_call_clause'(Z,Y,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W),
+   expand_call_goal(Z,X,A1),
+   strip_subst_module(A1,X,B1,C1),
+   '$call_with_inference_counting'('$module_call'(B1,C1)).
 
 :-non_counted_backtracking call/24.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) :-
    var(A),
    instantiation_error(call/24).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) :-
-   '$strip_module'(A,Y,Z),
-   '$call_inline'(Z,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) :-
-   !,
-   '$prepare_call_clause'(Y,Z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X),
-   '$call_with_inference_counting'('$module_call'(Z,Y)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X) :-
-   '$prepare_call_clause'(Y,Z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X),
-   (  '$call_inline'(Y)
-   ;  expand_call_goal(Y,Z,A1),
-      strip_subst_module(A1,Z,B1,C1),
-      '$call_with_inference_counting'('$module_call'(B1,C1))
-   ).
+   '$strip_module'(A,Y,Z),
+   '$prepare_call_clause'(A1,Z,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X),
+   expand_call_goal(A1,Y,B1),
+   strip_subst_module(B1,Y,C1,D1),
+   '$call_with_inference_counting'('$module_call'(C1,D1)).
 
 :-non_counted_backtracking call/25.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y) :-
    var(A),
    instantiation_error(call/25).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y) :-
-   '$strip_module'(A,Z,A1),
-   '$call_inline'(A1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y) :-
-   !,
-   '$prepare_call_clause'(Z,A1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y),
-   '$call_with_inference_counting'('$module_call'(A1,Z)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y) :-
-   '$prepare_call_clause'(Z,A1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y),
-   (  '$call_inline'(Z)
-   ;  expand_call_goal(Z,A1,B1),
-      strip_subst_module(B1,A1,C1,D1),
-      '$call_with_inference_counting'('$module_call'(C1,D1))
-   ).
+   '$strip_module'(A,Z,A1),
+   '$prepare_call_clause'(B1,A1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y),
+   expand_call_goal(B1,Z,C1),
+   strip_subst_module(C1,Z,D1,E1),
+   '$call_with_inference_counting'('$module_call'(D1,E1)).
 
 :-non_counted_backtracking call/26.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) :-
    var(A),
    instantiation_error(call/26).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) :-
-   '$strip_module'(A,A1,B1),
-   '$call_inline'(B1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) :-
-   !,
-   '$prepare_call_clause'(A1,B1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z),
-   '$call_with_inference_counting'('$module_call'(B1,A1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) :-
-   '$prepare_call_clause'(A1,B1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z),
-   (  '$call_inline'(A1)
-   ;  expand_call_goal(A1,B1,C1),
-      strip_subst_module(C1,B1,D1,E1),
-      '$call_with_inference_counting'('$module_call'(D1,E1))
-   ).
+   '$strip_module'(A,A1,B1),
+   '$prepare_call_clause'(C1,B1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z),
+   expand_call_goal(C1,A1,D1),
+   strip_subst_module(D1,A1,E1,F1),
+   '$call_with_inference_counting'('$module_call'(E1,F1)).
 
 :-non_counted_backtracking call/27.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1) :-
    var(A),
    instantiation_error(call/27).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1) :-
-   '$strip_module'(A,B1,C1),
-   '$call_inline'(C1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1) :-
-   !,
-   '$prepare_call_clause'(B1,C1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1),
-   '$call_with_inference_counting'('$module_call'(C1,B1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1) :-
-   '$prepare_call_clause'(B1,C1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1),
-   (  '$call_inline'(B1)
-   ;  expand_call_goal(B1,C1,D1),
-      strip_subst_module(D1,C1,E1,F1),
-      '$call_with_inference_counting'('$module_call'(E1,F1))
-   ).
+   '$strip_module'(A,B1,C1),
+   '$prepare_call_clause'(D1,C1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1),
+   expand_call_goal(D1,B1,E1),
+   strip_subst_module(E1,B1,F1,G1),
+   '$call_with_inference_counting'('$module_call'(F1,G1)).
 
 :-non_counted_backtracking call/28.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1) :-
    var(A),
    instantiation_error(call/28).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1) :-
-   '$strip_module'(A,C1,D1),
-   '$call_inline'(D1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1) :-
-   !,
-   '$prepare_call_clause'(C1,D1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1),
-   '$call_with_inference_counting'('$module_call'(D1,C1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1) :-
-   '$prepare_call_clause'(C1,D1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1),
-   (  '$call_inline'(C1)
-   ;  expand_call_goal(C1,D1,E1),
-      strip_subst_module(E1,D1,F1,G1),
-      '$call_with_inference_counting'('$module_call'(F1,G1))
-   ).
+   '$strip_module'(A,C1,D1),
+   '$prepare_call_clause'(E1,D1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1),
+   expand_call_goal(E1,C1,F1),
+   strip_subst_module(F1,C1,G1,H1),
+   '$call_with_inference_counting'('$module_call'(G1,H1)).
 
 :-non_counted_backtracking call/29.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1) :-
    var(A),
    instantiation_error(call/29).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1) :-
-   '$strip_module'(A,D1,E1),
-   '$call_inline'(E1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1) :-
-   !,
-   '$prepare_call_clause'(D1,E1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1),
-   '$call_with_inference_counting'('$module_call'(E1,D1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1) :-
-   '$prepare_call_clause'(D1,E1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1),
-   (  '$call_inline'(D1)
-   ;  expand_call_goal(D1,E1,F1),
-      strip_subst_module(F1,E1,G1,H1),
-      '$call_with_inference_counting'('$module_call'(G1,H1))
-   ).
+   '$strip_module'(A,D1,E1),
+   '$prepare_call_clause'(F1,E1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1),
+   expand_call_goal(F1,D1,G1),
+   strip_subst_module(G1,D1,H1,I1),
+   '$call_with_inference_counting'('$module_call'(H1,I1)).
 
 :-non_counted_backtracking call/30.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1) :-
    var(A),
    instantiation_error(call/30).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1) :-
-   '$strip_module'(A,E1,F1),
-   '$call_inline'(F1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1) :-
-   !,
-   '$prepare_call_clause'(E1,F1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1),
-   '$call_with_inference_counting'('$module_call'(F1,E1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1) :-
-   '$prepare_call_clause'(E1,F1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1),
-   (  '$call_inline'(E1)
-   ;  expand_call_goal(E1,F1,G1),
-      strip_subst_module(G1,F1,H1,I1),
-      '$call_with_inference_counting'('$module_call'(H1,I1))
-   ).
+   '$strip_module'(A,E1,F1),
+   '$prepare_call_clause'(G1,F1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1),
+   expand_call_goal(G1,E1,H1),
+   strip_subst_module(H1,E1,I1,J1),
+   '$call_with_inference_counting'('$module_call'(I1,J1)).
 
 :-non_counted_backtracking call/31.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1) :-
    var(A),
    instantiation_error(call/31).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1) :-
-   '$strip_module'(A,F1,G1),
-   '$call_inline'(G1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1) :-
-   !,
-   '$prepare_call_clause'(F1,G1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1),
-   '$call_with_inference_counting'('$module_call'(G1,F1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1) :-
-   '$prepare_call_clause'(F1,G1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1),
-   (  '$call_inline'(F1)
-   ;  expand_call_goal(F1,G1,H1),
-      strip_subst_module(H1,G1,I1,J1),
-      '$call_with_inference_counting'('$module_call'(I1,J1))
-   ).
+   '$strip_module'(A,F1,G1),
+   '$prepare_call_clause'(H1,G1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1),
+   expand_call_goal(H1,F1,I1),
+   strip_subst_module(I1,F1,J1,K1),
+   '$call_with_inference_counting'('$module_call'(J1,K1)).
 
 :-non_counted_backtracking call/32.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1) :-
    var(A),
    instantiation_error(call/32).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1) :-
-   '$strip_module'(A,G1,H1),
-   '$call_inline'(H1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1) :-
-   !,
-   '$prepare_call_clause'(G1,H1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1),
-   '$call_with_inference_counting'('$module_call'(H1,G1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1) :-
-   '$prepare_call_clause'(G1,H1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1),
-   (  '$call_inline'(G1)
-   ;  expand_call_goal(G1,H1,I1),
-      strip_subst_module(I1,H1,J1,K1),
-      '$call_with_inference_counting'('$module_call'(J1,K1))
-   ).
+   '$strip_module'(A,G1,H1),
+   '$prepare_call_clause'(I1,H1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1),
+   expand_call_goal(I1,G1,J1),
+   strip_subst_module(J1,G1,K1,L1),
+   '$call_with_inference_counting'('$module_call'(K1,L1)).
 
 :-non_counted_backtracking call/33.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1) :-
    var(A),
    instantiation_error(call/33).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1) :-
-   '$strip_module'(A,H1,I1),
-   '$call_inline'(I1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1) :-
-   !,
-   '$prepare_call_clause'(H1,I1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1),
-   '$call_with_inference_counting'('$module_call'(I1,H1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1) :-
-   '$prepare_call_clause'(H1,I1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1),
-   (  '$call_inline'(H1)
-   ;  expand_call_goal(H1,I1,J1),
-      strip_subst_module(J1,I1,K1,L1),
-      '$call_with_inference_counting'('$module_call'(K1,L1))
-   ).
+   '$strip_module'(A,H1,I1),
+   '$prepare_call_clause'(J1,I1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1),
+   expand_call_goal(J1,H1,K1),
+   strip_subst_module(K1,H1,L1,M1),
+   '$call_with_inference_counting'('$module_call'(L1,M1)).
 
 :-non_counted_backtracking call/34.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1) :-
    var(A),
    instantiation_error(call/34).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1) :-
-   '$strip_module'(A,I1,J1),
-   '$call_inline'(J1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1) :-
-   !,
-   '$prepare_call_clause'(I1,J1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1),
-   '$call_with_inference_counting'('$module_call'(J1,I1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1) :-
-   '$prepare_call_clause'(I1,J1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1),
-   (  '$call_inline'(I1)
-   ;  expand_call_goal(I1,J1,K1),
-      strip_subst_module(K1,J1,L1,M1),
-      '$call_with_inference_counting'('$module_call'(L1,M1))
-   ).
+   '$strip_module'(A,I1,J1),
+   '$prepare_call_clause'(K1,J1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1),
+   expand_call_goal(K1,I1,L1),
+   strip_subst_module(L1,I1,M1,N1),
+   '$call_with_inference_counting'('$module_call'(M1,N1)).
 
 :-non_counted_backtracking call/35.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1) :-
    var(A),
    instantiation_error(call/35).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1) :-
-   '$strip_module'(A,J1,K1),
-   '$call_inline'(K1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1) :-
-   !,
-   '$prepare_call_clause'(J1,K1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1),
-   '$call_with_inference_counting'('$module_call'(K1,J1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1) :-
-   '$prepare_call_clause'(J1,K1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1),
-   (  '$call_inline'(J1)
-   ;  expand_call_goal(J1,K1,L1),
-      strip_subst_module(L1,K1,M1,N1),
-      '$call_with_inference_counting'('$module_call'(M1,N1))
-   ).
+   '$strip_module'(A,J1,K1),
+   '$prepare_call_clause'(L1,K1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1),
+   expand_call_goal(L1,J1,M1),
+   strip_subst_module(M1,J1,N1,O1),
+   '$call_with_inference_counting'('$module_call'(N1,O1)).
 
 :-non_counted_backtracking call/36.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1) :-
    var(A),
    instantiation_error(call/36).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1) :-
-   '$strip_module'(A,K1,L1),
-   '$call_inline'(L1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1) :-
-   !,
-   '$prepare_call_clause'(K1,L1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1),
-   '$call_with_inference_counting'('$module_call'(L1,K1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1) :-
-   '$prepare_call_clause'(K1,L1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1),
-   (  '$call_inline'(K1)
-   ;  expand_call_goal(K1,L1,M1),
-      strip_subst_module(M1,L1,N1,O1),
-      '$call_with_inference_counting'('$module_call'(N1,O1))
-   ).
+   '$strip_module'(A,K1,L1),
+   '$prepare_call_clause'(M1,L1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1),
+   expand_call_goal(M1,K1,N1),
+   strip_subst_module(N1,K1,O1,P1),
+   '$call_with_inference_counting'('$module_call'(O1,P1)).
 
 :-non_counted_backtracking call/37.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1) :-
    var(A),
    instantiation_error(call/37).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1) :-
-   '$strip_module'(A,L1,M1),
-   '$call_inline'(M1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1) :-
-   !,
-   '$prepare_call_clause'(L1,M1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1),
-   '$call_with_inference_counting'('$module_call'(M1,L1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1) :-
-   '$prepare_call_clause'(L1,M1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1),
-   (  '$call_inline'(L1)
-   ;  expand_call_goal(L1,M1,N1),
-      strip_subst_module(N1,M1,O1,P1),
-      '$call_with_inference_counting'('$module_call'(O1,P1))
-   ).
+   '$strip_module'(A,L1,M1),
+   '$prepare_call_clause'(N1,M1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1),
+   expand_call_goal(N1,L1,O1),
+   strip_subst_module(O1,L1,P1,Q1),
+   '$call_with_inference_counting'('$module_call'(P1,Q1)).
 
 :-non_counted_backtracking call/38.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1) :-
    var(A),
    instantiation_error(call/38).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1) :-
-   '$strip_module'(A,M1,N1),
-   '$call_inline'(N1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1) :-
-   !,
-   '$prepare_call_clause'(M1,N1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1),
-   '$call_with_inference_counting'('$module_call'(N1,M1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1) :-
-   '$prepare_call_clause'(M1,N1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1),
-   (  '$call_inline'(M1)
-   ;  expand_call_goal(M1,N1,O1),
-      strip_subst_module(O1,N1,P1,Q1),
-      '$call_with_inference_counting'('$module_call'(P1,Q1))
-   ).
+   '$strip_module'(A,M1,N1),
+   '$prepare_call_clause'(O1,N1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1),
+   expand_call_goal(O1,M1,P1),
+   strip_subst_module(P1,M1,Q1,R1),
+   '$call_with_inference_counting'('$module_call'(Q1,R1)).
 
 :-non_counted_backtracking call/39.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1) :-
    var(A),
    instantiation_error(call/39).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1) :-
-   '$strip_module'(A,N1,O1),
-   '$call_inline'(O1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1) :-
-   !,
-   '$prepare_call_clause'(N1,O1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1),
-   '$call_with_inference_counting'('$module_call'(O1,N1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1) :-
-   '$prepare_call_clause'(N1,O1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1),
-   (  '$call_inline'(N1)
-   ;  expand_call_goal(N1,O1,P1),
-      strip_subst_module(P1,O1,Q1,R1),
-      '$call_with_inference_counting'('$module_call'(Q1,R1))
-   ).
+   '$strip_module'(A,N1,O1),
+   '$prepare_call_clause'(P1,O1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1),
+   expand_call_goal(P1,N1,Q1),
+   strip_subst_module(Q1,N1,R1,S1),
+   '$call_with_inference_counting'('$module_call'(R1,S1)).
 
 :-non_counted_backtracking call/40.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1) :-
    var(A),
    instantiation_error(call/40).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1) :-
-   '$strip_module'(A,O1,P1),
-   '$call_inline'(P1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1) :-
-   !,
-   '$prepare_call_clause'(O1,P1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1),
-   '$call_with_inference_counting'('$module_call'(P1,O1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1) :-
-   '$prepare_call_clause'(O1,P1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1),
-   (  '$call_inline'(O1)
-   ;  expand_call_goal(O1,P1,Q1),
-      strip_subst_module(Q1,P1,R1,S1),
-      '$call_with_inference_counting'('$module_call'(R1,S1))
-   ).
+   '$strip_module'(A,O1,P1),
+   '$prepare_call_clause'(Q1,P1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1),
+   expand_call_goal(Q1,O1,R1),
+   strip_subst_module(R1,O1,S1,T1),
+   '$call_with_inference_counting'('$module_call'(S1,T1)).
 
 :-non_counted_backtracking call/41.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1) :-
    var(A),
    instantiation_error(call/41).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1) :-
-   '$strip_module'(A,P1,Q1),
-   '$call_inline'(Q1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1) :-
-   !,
-   '$prepare_call_clause'(P1,Q1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1),
-   '$call_with_inference_counting'('$module_call'(Q1,P1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1) :-
-   '$prepare_call_clause'(P1,Q1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1),
-   (  '$call_inline'(P1)
-   ;  expand_call_goal(P1,Q1,R1),
-      strip_subst_module(R1,Q1,S1,T1),
-      '$call_with_inference_counting'('$module_call'(S1,T1))
-   ).
+   '$strip_module'(A,P1,Q1),
+   '$prepare_call_clause'(R1,Q1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1),
+   expand_call_goal(R1,P1,S1),
+   strip_subst_module(S1,P1,T1,U1),
+   '$call_with_inference_counting'('$module_call'(T1,U1)).
 
 :-non_counted_backtracking call/42.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1) :-
    var(A),
    instantiation_error(call/42).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1) :-
-   '$strip_module'(A,Q1,R1),
-   '$call_inline'(R1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1) :-
-   !,
-   '$prepare_call_clause'(Q1,R1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1),
-   '$call_with_inference_counting'('$module_call'(R1,Q1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1) :-
-   '$prepare_call_clause'(Q1,R1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1),
-   (  '$call_inline'(Q1)
-   ;  expand_call_goal(Q1,R1,S1),
-      strip_subst_module(S1,R1,T1,U1),
-      '$call_with_inference_counting'('$module_call'(T1,U1))
-   ).
+   '$strip_module'(A,Q1,R1),
+   '$prepare_call_clause'(S1,R1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1),
+   expand_call_goal(S1,Q1,T1),
+   strip_subst_module(T1,Q1,U1,V1),
+   '$call_with_inference_counting'('$module_call'(U1,V1)).
 
 :-non_counted_backtracking call/43.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1) :-
    var(A),
    instantiation_error(call/43).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1) :-
-   '$strip_module'(A,R1,S1),
-   '$call_inline'(S1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1) :-
-   !,
-   '$prepare_call_clause'(R1,S1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1),
-   '$call_with_inference_counting'('$module_call'(S1,R1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1) :-
-   '$prepare_call_clause'(R1,S1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1),
-   (  '$call_inline'(R1)
-   ;  expand_call_goal(R1,S1,T1),
-      strip_subst_module(T1,S1,U1,V1),
-      '$call_with_inference_counting'('$module_call'(U1,V1))
-   ).
+   '$strip_module'(A,R1,S1),
+   '$prepare_call_clause'(T1,S1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1),
+   expand_call_goal(T1,R1,U1),
+   strip_subst_module(U1,R1,V1,W1),
+   '$call_with_inference_counting'('$module_call'(V1,W1)).
 
 :-non_counted_backtracking call/44.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1) :-
    var(A),
    instantiation_error(call/44).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1) :-
-   '$strip_module'(A,S1,T1),
-   '$call_inline'(T1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1) :-
-   !,
-   '$prepare_call_clause'(S1,T1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1),
-   '$call_with_inference_counting'('$module_call'(T1,S1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1) :-
-   '$prepare_call_clause'(S1,T1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1),
-   (  '$call_inline'(S1)
-   ;  expand_call_goal(S1,T1,U1),
-      strip_subst_module(U1,T1,V1,W1),
-      '$call_with_inference_counting'('$module_call'(V1,W1))
-   ).
+   '$strip_module'(A,S1,T1),
+   '$prepare_call_clause'(U1,T1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1),
+   expand_call_goal(U1,S1,V1),
+   strip_subst_module(V1,S1,W1,X1),
+   '$call_with_inference_counting'('$module_call'(W1,X1)).
 
 :-non_counted_backtracking call/45.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1) :-
    var(A),
    instantiation_error(call/45).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1) :-
-   '$strip_module'(A,T1,U1),
-   '$call_inline'(U1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1) :-
-   !,
-   '$prepare_call_clause'(T1,U1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1),
-   '$call_with_inference_counting'('$module_call'(U1,T1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1) :-
-   '$prepare_call_clause'(T1,U1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1),
-   (  '$call_inline'(T1)
-   ;  expand_call_goal(T1,U1,V1),
-      strip_subst_module(V1,U1,W1,X1),
-      '$call_with_inference_counting'('$module_call'(W1,X1))
-   ).
+   '$strip_module'(A,T1,U1),
+   '$prepare_call_clause'(V1,U1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1),
+   expand_call_goal(V1,T1,W1),
+   strip_subst_module(W1,T1,X1,Y1),
+   '$call_with_inference_counting'('$module_call'(X1,Y1)).
 
 :-non_counted_backtracking call/46.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1) :-
    var(A),
    instantiation_error(call/46).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1) :-
-   '$strip_module'(A,U1,V1),
-   '$call_inline'(V1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1) :-
-   !,
-   '$prepare_call_clause'(U1,V1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1),
-   '$call_with_inference_counting'('$module_call'(V1,U1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1) :-
-   '$prepare_call_clause'(U1,V1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1),
-   (  '$call_inline'(U1)
-   ;  expand_call_goal(U1,V1,W1),
-      strip_subst_module(W1,V1,X1,Y1),
-      '$call_with_inference_counting'('$module_call'(X1,Y1))
-   ).
+   '$strip_module'(A,U1,V1),
+   '$prepare_call_clause'(W1,V1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1),
+   expand_call_goal(W1,U1,X1),
+   strip_subst_module(X1,U1,Y1,Z1),
+   '$call_with_inference_counting'('$module_call'(Y1,Z1)).
 
 :-non_counted_backtracking call/47.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1) :-
    var(A),
    instantiation_error(call/47).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1) :-
-   '$strip_module'(A,V1,W1),
-   '$call_inline'(W1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1) :-
-   !,
-   '$prepare_call_clause'(V1,W1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1),
-   '$call_with_inference_counting'('$module_call'(W1,V1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1) :-
-   '$prepare_call_clause'(V1,W1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1),
-   (  '$call_inline'(V1)
-   ;  expand_call_goal(V1,W1,X1),
-      strip_subst_module(X1,W1,Y1,Z1),
-      '$call_with_inference_counting'('$module_call'(Y1,Z1))
-   ).
+   '$strip_module'(A,V1,W1),
+   '$prepare_call_clause'(X1,W1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1),
+   expand_call_goal(X1,V1,Y1),
+   strip_subst_module(Y1,V1,Z1,A2),
+   '$call_with_inference_counting'('$module_call'(Z1,A2)).
 
 :-non_counted_backtracking call/48.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1) :-
    var(A),
    instantiation_error(call/48).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1) :-
-   '$strip_module'(A,W1,X1),
-   '$call_inline'(X1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1) :-
-   !,
-   '$prepare_call_clause'(W1,X1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1),
-   '$call_with_inference_counting'('$module_call'(X1,W1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1) :-
-   '$prepare_call_clause'(W1,X1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1),
-   (  '$call_inline'(W1)
-   ;  expand_call_goal(W1,X1,Y1),
-      strip_subst_module(Y1,X1,Z1,A2),
-      '$call_with_inference_counting'('$module_call'(Z1,A2))
-   ).
+   '$strip_module'(A,W1,X1),
+   '$prepare_call_clause'(Y1,X1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1),
+   expand_call_goal(Y1,W1,Z1),
+   strip_subst_module(Z1,W1,A2,B2),
+   '$call_with_inference_counting'('$module_call'(A2,B2)).
 
 :-non_counted_backtracking call/49.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1) :-
    var(A),
    instantiation_error(call/49).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1) :-
-   '$strip_module'(A,X1,Y1),
-   '$call_inline'(Y1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1) :-
-   !,
-   '$prepare_call_clause'(X1,Y1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1),
-   '$call_with_inference_counting'('$module_call'(Y1,X1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1) :-
-   '$prepare_call_clause'(X1,Y1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1),
-   (  '$call_inline'(X1)
-   ;  expand_call_goal(X1,Y1,Z1),
-      strip_subst_module(Z1,Y1,A2,B2),
-      '$call_with_inference_counting'('$module_call'(A2,B2))
-   ).
+   '$strip_module'(A,X1,Y1),
+   '$prepare_call_clause'(Z1,Y1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1),
+   expand_call_goal(Z1,X1,A2),
+   strip_subst_module(A2,X1,B2,C2),
+   '$call_with_inference_counting'('$module_call'(B2,C2)).
 
 :-non_counted_backtracking call/50.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1) :-
    var(A),
    instantiation_error(call/50).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1) :-
-   '$strip_module'(A,Y1,Z1),
-   '$call_inline'(Z1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1) :-
-   !,
-   '$prepare_call_clause'(Y1,Z1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1),
-   '$call_with_inference_counting'('$module_call'(Z1,Y1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1) :-
-   '$prepare_call_clause'(Y1,Z1,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1),
-   (  '$call_inline'(Y1)
-   ;  expand_call_goal(Y1,Z1,A2),
-      strip_subst_module(A2,Z1,B2,C2),
-      '$call_with_inference_counting'('$module_call'(B2,C2))
-   ).
+   '$strip_module'(A,Y1,Z1),
+   '$prepare_call_clause'(A2,Z1,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1),
+   expand_call_goal(A2,Y1,B2),
+   strip_subst_module(B2,Y1,C2,D2),
+   '$call_with_inference_counting'('$module_call'(C2,D2)).
 
 :-non_counted_backtracking call/51.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1) :-
    var(A),
    instantiation_error(call/51).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1) :-
-   '$strip_module'(A,Z1,A2),
-   '$call_inline'(A2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1) :-
-   !,
-   '$prepare_call_clause'(Z1,A2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1),
-   '$call_with_inference_counting'('$module_call'(A2,Z1)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1) :-
-   '$prepare_call_clause'(Z1,A2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1),
-   (  '$call_inline'(Z1)
-   ;  expand_call_goal(Z1,A2,B2),
-      strip_subst_module(B2,A2,C2,D2),
-      '$call_with_inference_counting'('$module_call'(C2,D2))
-   ).
+   '$strip_module'(A,Z1,A2),
+   '$prepare_call_clause'(B2,A2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1),
+   expand_call_goal(B2,Z1,C2),
+   strip_subst_module(C2,Z1,D2,E2),
+   '$call_with_inference_counting'('$module_call'(D2,E2)).
 
 :-non_counted_backtracking call/52.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1) :-
    var(A),
    instantiation_error(call/52).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1) :-
-   '$strip_module'(A,A2,B2),
-   '$call_inline'(B2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1) :-
-   !,
-   '$prepare_call_clause'(A2,B2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1),
-   '$call_with_inference_counting'('$module_call'(B2,A2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1) :-
-   '$prepare_call_clause'(A2,B2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1),
-   (  '$call_inline'(A2)
-   ;  expand_call_goal(A2,B2,C2),
-      strip_subst_module(C2,B2,D2,E2),
-      '$call_with_inference_counting'('$module_call'(D2,E2))
-   ).
+   '$strip_module'(A,A2,B2),
+   '$prepare_call_clause'(C2,B2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1),
+   expand_call_goal(C2,A2,D2),
+   strip_subst_module(D2,A2,E2,F2),
+   '$call_with_inference_counting'('$module_call'(E2,F2)).
 
 :-non_counted_backtracking call/53.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2) :-
    var(A),
    instantiation_error(call/53).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2) :-
-   '$strip_module'(A,B2,C2),
-   '$call_inline'(C2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2) :-
-   !,
-   '$prepare_call_clause'(B2,C2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2),
-   '$call_with_inference_counting'('$module_call'(C2,B2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2) :-
-   '$prepare_call_clause'(B2,C2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2),
-   (  '$call_inline'(B2)
-   ;  expand_call_goal(B2,C2,D2),
-      strip_subst_module(D2,C2,E2,F2),
-      '$call_with_inference_counting'('$module_call'(E2,F2))
-   ).
+   '$strip_module'(A,B2,C2),
+   '$prepare_call_clause'(D2,C2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2),
+   expand_call_goal(D2,B2,E2),
+   strip_subst_module(E2,B2,F2,G2),
+   '$call_with_inference_counting'('$module_call'(F2,G2)).
 
 :-non_counted_backtracking call/54.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2) :-
    var(A),
    instantiation_error(call/54).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2) :-
-   '$strip_module'(A,C2,D2),
-   '$call_inline'(D2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2) :-
-   !,
-   '$prepare_call_clause'(C2,D2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2),
-   '$call_with_inference_counting'('$module_call'(D2,C2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2) :-
-   '$prepare_call_clause'(C2,D2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2),
-   (  '$call_inline'(C2)
-   ;  expand_call_goal(C2,D2,E2),
-      strip_subst_module(E2,D2,F2,G2),
-      '$call_with_inference_counting'('$module_call'(F2,G2))
-   ).
+   '$strip_module'(A,C2,D2),
+   '$prepare_call_clause'(E2,D2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2),
+   expand_call_goal(E2,C2,F2),
+   strip_subst_module(F2,C2,G2,H2),
+   '$call_with_inference_counting'('$module_call'(G2,H2)).
 
 :-non_counted_backtracking call/55.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2) :-
    var(A),
    instantiation_error(call/55).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2) :-
-   '$strip_module'(A,D2,E2),
-   '$call_inline'(E2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2) :-
-   !,
-   '$prepare_call_clause'(D2,E2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2),
-   '$call_with_inference_counting'('$module_call'(E2,D2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2) :-
-   '$prepare_call_clause'(D2,E2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2),
-   (  '$call_inline'(D2)
-   ;  expand_call_goal(D2,E2,F2),
-      strip_subst_module(F2,E2,G2,H2),
-      '$call_with_inference_counting'('$module_call'(G2,H2))
-   ).
+   '$strip_module'(A,D2,E2),
+   '$prepare_call_clause'(F2,E2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2),
+   expand_call_goal(F2,D2,G2),
+   strip_subst_module(G2,D2,H2,I2),
+   '$call_with_inference_counting'('$module_call'(H2,I2)).
 
 :-non_counted_backtracking call/56.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2) :-
    var(A),
    instantiation_error(call/56).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2) :-
-   '$strip_module'(A,E2,F2),
-   '$call_inline'(F2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2) :-
-   !,
-   '$prepare_call_clause'(E2,F2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2),
-   '$call_with_inference_counting'('$module_call'(F2,E2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2) :-
-   '$prepare_call_clause'(E2,F2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2),
-   (  '$call_inline'(E2)
-   ;  expand_call_goal(E2,F2,G2),
-      strip_subst_module(G2,F2,H2,I2),
-      '$call_with_inference_counting'('$module_call'(H2,I2))
-   ).
+   '$strip_module'(A,E2,F2),
+   '$prepare_call_clause'(G2,F2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2),
+   expand_call_goal(G2,E2,H2),
+   strip_subst_module(H2,E2,I2,J2),
+   '$call_with_inference_counting'('$module_call'(I2,J2)).
 
 :-non_counted_backtracking call/57.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2) :-
    var(A),
    instantiation_error(call/57).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2) :-
-   '$strip_module'(A,F2,G2),
-   '$call_inline'(G2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2) :-
-   !,
-   '$prepare_call_clause'(F2,G2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2),
-   '$call_with_inference_counting'('$module_call'(G2,F2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2) :-
-   '$prepare_call_clause'(F2,G2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2),
-   (  '$call_inline'(F2)
-   ;  expand_call_goal(F2,G2,H2),
-      strip_subst_module(H2,G2,I2,J2),
-      '$call_with_inference_counting'('$module_call'(I2,J2))
-   ).
+   '$strip_module'(A,F2,G2),
+   '$prepare_call_clause'(H2,G2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2),
+   expand_call_goal(H2,F2,I2),
+   strip_subst_module(I2,F2,J2,K2),
+   '$call_with_inference_counting'('$module_call'(J2,K2)).
 
 :-non_counted_backtracking call/58.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2) :-
    var(A),
    instantiation_error(call/58).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2) :-
-   '$strip_module'(A,G2,H2),
-   '$call_inline'(H2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2) :-
-   !,
-   '$prepare_call_clause'(G2,H2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2),
-   '$call_with_inference_counting'('$module_call'(H2,G2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2) :-
-   '$prepare_call_clause'(G2,H2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2),
-   (  '$call_inline'(G2)
-   ;  expand_call_goal(G2,H2,I2),
-      strip_subst_module(I2,H2,J2,K2),
-      '$call_with_inference_counting'('$module_call'(J2,K2))
-   ).
+   '$strip_module'(A,G2,H2),
+   '$prepare_call_clause'(I2,H2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2),
+   expand_call_goal(I2,G2,J2),
+   strip_subst_module(J2,G2,K2,L2),
+   '$call_with_inference_counting'('$module_call'(K2,L2)).
 
 :-non_counted_backtracking call/59.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2) :-
    var(A),
    instantiation_error(call/59).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2) :-
-   '$strip_module'(A,H2,I2),
-   '$call_inline'(I2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2) :-
-   !,
-   '$prepare_call_clause'(H2,I2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2),
-   '$call_with_inference_counting'('$module_call'(I2,H2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2) :-
-   '$prepare_call_clause'(H2,I2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2),
-   (  '$call_inline'(H2)
-   ;  expand_call_goal(H2,I2,J2),
-      strip_subst_module(J2,I2,K2,L2),
-      '$call_with_inference_counting'('$module_call'(K2,L2))
-   ).
+   '$strip_module'(A,H2,I2),
+   '$prepare_call_clause'(J2,I2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2),
+   expand_call_goal(J2,H2,K2),
+   strip_subst_module(K2,H2,L2,M2),
+   '$call_with_inference_counting'('$module_call'(L2,M2)).
 
 :-non_counted_backtracking call/60.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2) :-
    var(A),
    instantiation_error(call/60).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2) :-
-   '$strip_module'(A,I2,J2),
-   '$call_inline'(J2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2) :-
-   !,
-   '$prepare_call_clause'(I2,J2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2),
-   '$call_with_inference_counting'('$module_call'(J2,I2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2) :-
-   '$prepare_call_clause'(I2,J2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2),
-   (  '$call_inline'(I2)
-   ;  expand_call_goal(I2,J2,K2),
-      strip_subst_module(K2,J2,L2,M2),
-      '$call_with_inference_counting'('$module_call'(L2,M2))
-   ).
+   '$strip_module'(A,I2,J2),
+   '$prepare_call_clause'(K2,J2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2),
+   expand_call_goal(K2,I2,L2),
+   strip_subst_module(L2,I2,M2,N2),
+   '$call_with_inference_counting'('$module_call'(M2,N2)).
 
 :-non_counted_backtracking call/61.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2) :-
    var(A),
    instantiation_error(call/61).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2) :-
-   '$strip_module'(A,J2,K2),
-   '$call_inline'(K2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2) :-
-   !,
-   '$prepare_call_clause'(J2,K2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2),
-   '$call_with_inference_counting'('$module_call'(K2,J2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2) :-
-   '$prepare_call_clause'(J2,K2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2),
-   (  '$call_inline'(J2)
-   ;  expand_call_goal(J2,K2,L2),
-      strip_subst_module(L2,K2,M2,N2),
-      '$call_with_inference_counting'('$module_call'(M2,N2))
-   ).
+   '$strip_module'(A,J2,K2),
+   '$prepare_call_clause'(L2,K2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2),
+   expand_call_goal(L2,J2,M2),
+   strip_subst_module(M2,J2,N2,O2),
+   '$call_with_inference_counting'('$module_call'(N2,O2)).
 
 :-non_counted_backtracking call/62.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2) :-
    var(A),
    instantiation_error(call/62).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2) :-
-   '$strip_module'(A,K2,L2),
-   '$call_inline'(L2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2) :-
-   !,
-   '$prepare_call_clause'(K2,L2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2),
-   '$call_with_inference_counting'('$module_call'(L2,K2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2) :-
-   '$prepare_call_clause'(K2,L2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2),
-   (  '$call_inline'(K2)
-   ;  expand_call_goal(K2,L2,M2),
-      strip_subst_module(M2,L2,N2,O2),
-      '$call_with_inference_counting'('$module_call'(N2,O2))
-   ).
+   '$strip_module'(A,K2,L2),
+   '$prepare_call_clause'(M2,L2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2),
+   expand_call_goal(M2,K2,N2),
+   strip_subst_module(N2,K2,O2,P2),
+   '$call_with_inference_counting'('$module_call'(O2,P2)).
 
 :-non_counted_backtracking call/63.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2) :-
    var(A),
    instantiation_error(call/63).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2) :-
-   '$strip_module'(A,L2,M2),
-   '$call_inline'(M2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2) :-
-   !,
-   '$prepare_call_clause'(L2,M2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2),
-   '$call_with_inference_counting'('$module_call'(M2,L2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2) :-
-   '$prepare_call_clause'(L2,M2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2),
-   (  '$call_inline'(L2)
-   ;  expand_call_goal(L2,M2,N2),
-      strip_subst_module(N2,M2,O2,P2),
-      '$call_with_inference_counting'('$module_call'(O2,P2))
-   ).
+   '$strip_module'(A,L2,M2),
+   '$prepare_call_clause'(N2,M2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2),
+   expand_call_goal(N2,L2,O2),
+   strip_subst_module(O2,L2,P2,Q2),
+   '$call_with_inference_counting'('$module_call'(P2,Q2)).
 
 :-non_counted_backtracking call/64.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2) :-
    var(A),
    instantiation_error(call/64).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2) :-
-   '$strip_module'(A,M2,N2),
-   '$call_inline'(N2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2) :-
-   !,
-   '$prepare_call_clause'(M2,N2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2),
-   '$call_with_inference_counting'('$module_call'(N2,M2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2) :-
-   '$prepare_call_clause'(M2,N2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2),
-   (  '$call_inline'(M2)
-   ;  expand_call_goal(M2,N2,O2),
-      strip_subst_module(O2,N2,P2,Q2),
-      '$call_with_inference_counting'('$module_call'(P2,Q2))
-   ).
+   '$strip_module'(A,M2,N2),
+   '$prepare_call_clause'(O2,N2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2),
+   expand_call_goal(O2,M2,P2),
+   strip_subst_module(P2,M2,Q2,R2),
+   '$call_with_inference_counting'('$module_call'(Q2,R2)).
 
 :-non_counted_backtracking call/65.
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2) :-
    var(A),
    instantiation_error(call/65).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2) :-
-   '$strip_module'(A,N2,O2),
-   '$call_inline'(O2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2).
-call('$call'(A),B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2) :-
-   !,
-   '$prepare_call_clause'(N2,O2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2),
-   '$call_with_inference_counting'('$module_call'(O2,N2)).
+   '$fast_call'(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2).
 call(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2) :-
-   '$prepare_call_clause'(N2,O2,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2),
-   (  '$call_inline'(N2)
-   ;  expand_call_goal(N2,O2,P2),
-      strip_subst_module(P2,O2,Q2,R2),
-      '$call_with_inference_counting'('$module_call'(Q2,R2))
-   ).
+   '$strip_module'(A,N2,O2),
+   '$prepare_call_clause'(P2,O2,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1,N1,O1,P1,Q1,R1,S1,T1,U1,V1,W1,X1,Y1,Z1,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2),
+   expand_call_goal(P2,N2,Q2),
+   strip_subst_module(Q2,N2,R2,S2),
+   '$call_with_inference_counting'('$module_call'(R2,S2)).
index 9599766d320bff061cf12c53e2c3cbfceac44436..65c82e481e83ec3e5d2561675766a3fee11ef9f0 100644 (file)
@@ -4996,51 +4996,11 @@ impl Machine {
                     step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
                 }
                 &Instruction::CallStripModule(_) => {
-                    let (module_loc, qualified_goal) = self.machine_st.strip_module(
-                        self.machine_st.registers[1],
-                        self.machine_st.registers[2],
-                    );
-
-                    let target_module_loc = self.machine_st.registers[2];
-
-                    unify_fn!(
-                        &mut self.machine_st,
-                        module_loc,
-                        target_module_loc
-                    );
-
-                    let target_qualified_goal = self.machine_st.registers[3];
-
-                    unify_fn!(
-                        &mut self.machine_st,
-                        qualified_goal,
-                        target_qualified_goal
-                    );
-
+                    self.strip_module();
                     step_or_fail!(self, self.machine_st.p += 1);
                 }
                 &Instruction::ExecuteStripModule(_) => {
-                    let (module_loc, qualified_goal) = self.machine_st.strip_module(
-                        self.machine_st.registers[1],
-                        self.machine_st.registers[2],
-                    );
-
-                    let target_module_loc = self.machine_st.registers[2];
-
-                    unify_fn!(
-                        &mut self.machine_st,
-                        module_loc,
-                        target_module_loc
-                    );
-
-                    let target_qualified_goal = self.machine_st.registers[3];
-
-                    unify_fn!(
-                        &mut self.machine_st,
-                        qualified_goal,
-                        target_qualified_goal
-                    );
-
+                    self.strip_module();
                     step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
                 }
                 &Instruction::CallPrepareCallClause(arity, _) => {
@@ -5067,12 +5027,12 @@ impl Machine {
                     self.machine_st.fail = !self.is_expanded_or_inlined();
                     step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
                 }
-                &Instruction::CallInlineCallN(arity, _) => {
+                &Instruction::CallFastCallN(arity, _) => {
                     let call_at_index = |wam: &mut Machine, name, arity, ptr| {
                         wam.try_call(name, arity, ptr)
                     };
 
-                    try_or_throw!(self.machine_st, self.call_inline(arity, call_at_index));
+                    try_or_throw!(self.machine_st, self.fast_call(arity, call_at_index));
 
                     if self.machine_st.fail {
                         self.machine_st.backtrack();
@@ -5083,12 +5043,12 @@ impl Machine {
                         );
                     }
                 }
-                &Instruction::ExecuteInlineCallN(arity, _) => {
+                &Instruction::ExecuteFastCallN(arity, _) => {
                     let call_at_index = |wam: &mut Machine, name, arity, ptr| {
                         wam.try_execute(name, arity, ptr)
                     };
 
-                    try_or_throw!(self.machine_st, self.call_inline(arity, call_at_index));
+                    try_or_throw!(self.machine_st, self.fast_call(arity, call_at_index));
 
                     if self.machine_st.fail {
                         self.machine_st.backtrack();
index 989b963bcccf6bc40223cecc3e76c5614ba60eab..f280e5facb064134b6454ec3366e9eb1b488afa1 100644 (file)
@@ -1692,6 +1692,21 @@ impl Machine {
         let add_clause = || {
             let term = loader.read_term_from_heap(temp_v!(2))?;
 
+            let indexing_arg = match term.name() {
+                Some(atom!(":-")) => term.first_arg().and_then(Term::first_arg),
+                Some(_) => term.first_arg(),
+                None => None,
+            };
+
+            if let Some(indexing_term) = indexing_arg {
+                if let Some(indexing_name) = indexing_term.name() {
+                    loader.wam_prelude
+                        .indices
+                        .goal_expansion_indices
+                        .insert((indexing_name, indexing_term.arity()));
+                }
+            }
+
             loader.incremental_compile_clause(
                 (atom!("goal_expansion"), 2),
                 term,
index 11a9d6e808a8db231f3ced97b1a9c4ec975f3bfa..7c5e761ad28675682395dda110599e7fdbd1b9d8 100644 (file)
@@ -9,7 +9,7 @@ use crate::machine::machine_state::*;
 use crate::machine::streams::Stream;
 
 use fxhash::FxBuildHasher;
-use indexmap::IndexMap;
+use indexmap::{IndexMap, IndexSet};
 use modular_bitfield::{BitfieldSpecifier, bitfield};
 use modular_bitfield::specifiers::*;
 
@@ -245,12 +245,15 @@ pub(crate) type LocalExtensiblePredicates =
 
 pub(crate) type CodeDir = IndexMap<PredicateKey, CodeIndex, FxBuildHasher>;
 
+pub(crate) type GoalExpansionIndices = IndexSet<PredicateKey, FxBuildHasher>;
+
 #[derive(Debug)]
 pub struct IndexStore {
     pub(super) code_dir: CodeDir,
     pub(super) extensible_predicates: ExtensiblePredicates,
     pub(super) local_extensible_predicates: LocalExtensiblePredicates,
     pub(super) global_variables: GlobalVarDir,
+    pub(super) goal_expansion_indices: GoalExpansionIndices,
     pub(super) meta_predicates: MetaPredicateDir,
     pub(super) modules: ModuleDir,
     pub(super) op_dir: OpDir,
@@ -259,6 +262,11 @@ pub struct IndexStore {
 }
 
 impl IndexStore {
+    #[inline(always)]
+    pub(crate) fn goal_expansion_defined(&self, key: PredicateKey) -> bool {
+        self.goal_expansion_indices.contains(&key)
+    }
+
     pub(crate) fn get_predicate_skeleton_mut(
         &mut self,
         compilation_target: &CompilationTarget,
index 84714436b31af8e5e412bbd4be236aa2add57ce3..4da3c2f8c7480fd02e027d09a5ad2f9f1e07b81a 100644 (file)
@@ -1203,29 +1203,29 @@ impl Machine {
 
     #[inline(always)]
     pub(crate) fn deref_register(&mut self, i: usize) -> HeapCellValue {
-       self.machine_st.store(self.machine_st.deref(self.machine_st.registers[i]))
+           self.machine_st.store(self.machine_st.deref(self.machine_st.registers[i]))
     }
 
     #[inline(always)]
-    pub(crate) fn call_inline(
+    pub(crate) fn fast_call(
         &mut self,
         arity: usize,
         call_at_index: impl Fn(&mut Machine, Atom, usize, IndexPtr) -> CallResult,
     ) -> CallResult {
         let arity = arity - 1;
-        let goal = self.deref_register(1);
+        let (mut module_name, mut goal) = self.machine_st.strip_module(
+            self.machine_st.registers[1],
+            heap_loc_as_cell!(0),
+        );
 
-        let load_registers = |machine_st: &mut MachineState, goal: HeapCellValue| -> Option<PredicateKey> {
+        let load_registers = |machine_st: &mut MachineState, goal: HeapCellValue, goal_arity: usize| {
             read_heap_cell!(goal,
-                (HeapCellValueTag::Str, s) => {
-                    let (name, goal_arity) = cell_as_atom_cell!(machine_st.heap[s])
-                        .get_name_and_arity();
-
-                    if goal_arity > 0 {
+                (HeapCellValueTag::Str | HeapCellValueTag::Atom, s) => {
+                    if goal_arity > 1 {
                         for idx in (1 .. arity + 1).rev() {
                             machine_st.registers[idx + goal_arity] = machine_st.registers[idx + 1];
                         }
-                    } else {
+                    } else if goal_arity == 0 {
                         for idx in 1 .. arity + 1 {
                             machine_st.registers[idx] = machine_st.registers[idx + 1];
                         }
@@ -1234,8 +1234,6 @@ impl Machine {
                     for idx in 1 .. goal_arity + 1 {
                         machine_st.registers[idx] = machine_st.heap[s+idx];
                     }
-
-                    Some((name, goal_arity))
                 }
                 _ => {
                     unreachable!()
@@ -1243,34 +1241,69 @@ impl Machine {
             )
         };
 
-        read_heap_cell!(goal,
+        let (mut name, mut goal_arity, index_cell_opt) = read_heap_cell!(goal,
             (HeapCellValueTag::Str, s) => {
-                let goal_arity = cell_as_atom_cell!(self.machine_st.heap[s]).get_arity();
+                let (name, arity) = cell_as_atom_cell!(self.machine_st.heap[s]).get_name_and_arity();
 
-                if self.machine_st.heap.len() > s + goal_arity + 1 {
-                    let index_cell = self.machine_st.heap[s+goal_arity+1];
+                (name, arity, if self.machine_st.heap.len() > s + arity + 1 {
+                    get_structure_index(self.machine_st.heap[s + arity + 1])
+                } else {
+                    None
+                })
+            }
+            (HeapCellValueTag::Atom, (name, arity)) => {
+                debug_assert_eq!(arity, 0);
+                (name, arity, None)
+            }
+            _ => {
+                self.machine_st.fail = true;
+                return Ok(());
+            }
+        );
 
-                    if let Some(code_index) = get_structure_index(index_cell) {
-                        if code_index.is_undefined() {
-                            self.machine_st.fail = true;
-                            return Ok(());
-                        }
+        let mut arity = arity + goal_arity;
 
-                        match load_registers(&mut self.machine_st, goal) {
-                            Some((name, goal_arity)) => {
-                                let arity = goal_arity + arity;
-                                self.machine_st.neck_cut();
-                                return call_at_index(self, name, arity, code_index.get());
-                            }
-                            None => {
-                            }
-                        }
+        let index_cell = index_cell_opt.or_else(|| {
+            let is_internal_call = name == atom!("$call") && goal_arity > 0;
+
+            if !is_internal_call && self.indices.goal_expansion_defined((name, arity)) {
+                None
+            } else {
+                if is_internal_call {
+                    debug_assert_eq!(goal.get_tag(), HeapCellValueTag::Str);
+                    goal = self.machine_st.heap[goal.get_value()+1];
+                    (module_name, goal) = self.machine_st.strip_module(goal, module_name);
+
+                    if let Some((inner_name, inner_arity)) = self.machine_st.name_and_arity_from_heap(goal) {
+                        arity -= goal_arity;
+                        (name, goal_arity) = (inner_name, inner_arity);
+                        arity += goal_arity;
+                    } else {
+                        return None;
                     }
                 }
+
+                let module_name = if module_name.get_tag() != HeapCellValueTag::Atom {
+                    if let Some(load_context) = self.load_contexts.last() {
+                        load_context.module
+                    } else {
+                        atom!("user")
+                    }
+                } else {
+                    cell_as_atom!(module_name)
+                };
+
+                self.indices.get_predicate_code_index(name, arity, module_name)
             }
-            _ => {
+        });
+
+        if let Some(code_index) = index_cell {
+            if !code_index.is_undefined() {
+                load_registers(&mut self.machine_st, goal, goal_arity);
+                self.machine_st.neck_cut();
+                return call_at_index(self, name, arity, code_index.get());
             }
-        );
+        }
 
         self.machine_st.fail = true;
         Ok(())
@@ -1490,35 +1523,12 @@ impl Machine {
     }
 
     #[inline(always)]
-    pub(crate) fn prepare_call_clause(&mut self, arity: usize) -> CallResult {
+    pub(crate) fn strip_module(&mut self) {
         let (module_loc, qualified_goal) = self.machine_st.strip_module(
-            self.machine_st.registers[3],
+            self.machine_st.registers[1],
             self.machine_st.registers[2],
         );
 
-        // the first three arguments don't belong to the containing call/N.
-        let arity = arity - 3;
-
-        let (name, narity, s) = self.machine_st.setup_call_n_init_goal_info(
-            qualified_goal,
-            arity,
-        )?;
-
-        let module_loc = self.machine_st.store(self.machine_st.deref(module_loc));
-
-        if module_loc.is_var() {
-            self.load_context_module(module_loc);
-
-            if self.machine_st.fail {
-                self.machine_st.fail = false;
-                self.machine_st.unify_atom(atom!("user"), module_loc);
-
-                if self.machine_st.fail {
-                    return Ok(());
-                }
-            }
-        }
-
         let target_module_loc = self.machine_st.registers[2];
 
         unify_fn!(
@@ -1527,9 +1537,26 @@ impl Machine {
             target_module_loc
         );
 
-        if self.machine_st.fail {
-            return Ok(());
-        }
+        let target_qualified_goal = self.machine_st.registers[3];
+
+        unify_fn!(
+            &mut self.machine_st,
+            qualified_goal,
+            target_qualified_goal
+        );
+    }
+
+    #[inline(always)]
+    pub(crate) fn prepare_call_clause(&mut self, arity: usize) -> CallResult {
+        let qualified_goal = self.deref_register(2);
+
+        // the first two arguments don't belong to the containing call/N.
+        let arity = arity - 2;
+
+        let (name, narity, s) = self.machine_st.setup_call_n_init_goal_info(
+            qualified_goal,
+            arity,
+        )?;
 
         // assemble goal from pre-loaded (narity) and supplementary
         // (arity) arguments.
@@ -1545,15 +1572,10 @@ impl Machine {
             }
 
             for idx in 1 .. arity + 1 {
-                self.machine_st.heap.push(self.machine_st.registers[3 + idx]);
+                self.machine_st.heap.push(self.machine_st.registers[2 + idx]);
             }
 
-            let index_cell = self.machine_st.heap[s + narity + 1];
-
-            if get_structure_index(index_cell).is_some() {
-                self.machine_st.heap.push(index_cell);
-                str_loc_as_cell!(h)
-            } else if narity + arity > 0 {
+            if narity + arity > 0 {
                 str_loc_as_cell!(h)
             } else {
                 heap_loc_as_cell!(h)
@@ -1571,6 +1593,65 @@ impl Machine {
         Ok(())
     }
 
+    #[inline(always)]
+    pub(crate) fn dynamic_module_resolution(
+        &mut self,
+        narity: usize,
+    ) -> Result<(Atom, PredicateKey), MachineStub> {
+        let module_name = self.deref_register(1);
+
+        let module_name = read_heap_cell!(module_name,
+            (HeapCellValueTag::Atom, (name, _arity)) => {
+                debug_assert_eq!(_arity, 0);
+                name
+            }
+            (HeapCellValueTag::Str, s) => {
+                let (module_name, _arity) = cell_as_atom_cell!(self.machine_st.heap[s])
+                    .get_name_and_arity();
+
+                debug_assert_eq!(_arity, 0);
+                module_name
+            }
+            _ if module_name.is_var() => {
+                if let Some(load_context) = self.load_contexts.last() {
+                    load_context.module
+                } else {
+                    atom!("user")
+                }
+            }
+            _ => {
+                unreachable!()
+            }
+        );
+
+        let goal = self.deref_register(2);
+
+        let (name, arity, s) = self.machine_st.setup_call_n_init_goal_info(goal, narity)?;
+
+        // TODO: think we just need the 'Greater' branch here.
+        match arity.cmp(&2) {
+            Ordering::Less => {
+                for i in arity + 1..arity + narity + 1 {
+                    self.machine_st.registers[i] = self.machine_st.registers[i + 2 - arity];
+                }
+            }
+            Ordering::Greater => {
+                for i in (arity + 1..arity + narity + 1).rev() {
+                    self.machine_st.registers[i] = self.machine_st.registers[i + 2 - arity];
+                }
+            }
+            Ordering::Equal => {}
+        }
+
+        let key = (name, arity + narity);
+
+        for i in 1..arity + 1 {
+            self.machine_st.registers[i] = self.machine_st.heap[s + i];
+        }
+
+        Ok((module_name, key))
+    }
+
     #[inline(always)]
     pub(crate) fn is_reset_cont_marker(&self, p: usize) -> bool {
         match &self.code[p] {
@@ -3607,60 +3688,6 @@ impl Machine {
         }
     }
 
-    #[inline(always)]
-    pub(crate) fn dynamic_module_resolution(
-        &mut self,
-        narity: usize,
-    ) -> Result<(Atom, PredicateKey), MachineStub> {
-        let module_name = self.deref_register(1);
-
-        let module_name = read_heap_cell!(module_name,
-            (HeapCellValueTag::Atom, (name, _arity)) => {
-                debug_assert_eq!(_arity, 0);
-                name
-            }
-            (HeapCellValueTag::Str, s) => {
-                let (module_name, _arity) = cell_as_atom_cell!(self.machine_st.heap[s])
-                    .get_name_and_arity();
-
-                debug_assert_eq!(_arity, 0);
-                module_name
-            }
-            _ if module_name.is_var() => {
-                atom!("user")
-            }
-            _ => {
-                unreachable!()
-            }
-        );
-
-        let goal = self.deref_register(2);
-
-        let (name, arity, s) = self.machine_st.setup_call_n_init_goal_info(goal, narity)?;
-
-        match arity.cmp(&2) {
-            Ordering::Less => {
-                for i in arity + 1..arity + narity + 1 {
-                    self.machine_st.registers[i] = self.machine_st.registers[i + 2 - arity];
-                }
-            }
-            Ordering::Greater => {
-                for i in (arity + 1..arity + narity + 1).rev() {
-                    self.machine_st.registers[i] = self.machine_st.registers[i + 2 - arity];
-                }
-            }
-            Ordering::Equal => {}
-        }
-
-        let key = (name, arity + narity);
-
-        for i in 1..arity + 1 {
-            self.machine_st.registers[i] = self.machine_st.heap[s + i];
-        }
-
-        Ok((module_name, key))
-    }
-
     #[inline(always)]
     pub(crate) fn lookup_db_ref(&mut self) {
         let name = cell_as_atom!(self.deref_register(1));
index 85e2e08671488b4472c4c12a4545fdf9d7c718cc..78c0d89cb900ef729e2a2a211b65f5ae54c43411 100644 (file)
@@ -590,6 +590,7 @@ macro_rules! index_store {
             extensible_predicates: ExtensiblePredicates::with_hasher(FxBuildHasher::default()),
             local_extensible_predicates: LocalExtensiblePredicates::with_hasher(FxBuildHasher::default()),
             global_variables: GlobalVarDir::with_hasher(FxBuildHasher::default()),
+            goal_expansion_indices: GoalExpansionIndices::with_hasher(FxBuildHasher::default()),
             meta_predicates: MetaPredicateDir::with_hasher(FxBuildHasher::default()),
             modules: $modules,
             op_dir: $op_dir,
index 0bab4415758c9a928f6df3aa02f572a6a2f1448c..b554e52c48281c7bb63fb819684f43878729ef01 100644 (file)
@@ -181,7 +181,8 @@ submit_query_and_print_results_(Term, VarList) :-
     '$get_b_value'(B),
     bb_put('$report_all', false),
     bb_put('$report_n_more', 0),
-    atts:call_residue_vars(user:Term, AttrVars),
+    expand_goal(Term, user, Term0),
+    atts:call_residue_vars(user:Term0, AttrVars),
     write_eqs_and_read_input(B, VarList, AttrVars),
     !.
 submit_query_and_print_results_(_, _) :-