From 508c48d385923fc076d312793a520e60c1520a14 Mon Sep 17 00:00:00 2001 From: ricroc Date: Mon, 5 May 2008 17:09:37 +0000 Subject: [PATCH] YapTab: load_answer_trie() git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2230 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- OPTYap/tab.tries.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/OPTYap/tab.tries.c b/OPTYap/tab.tries.c index c1109985e..21da64569 100644 --- a/OPTYap/tab.tries.c +++ b/OPTYap/tab.tries.c @@ -5,7 +5,7 @@ Copyright: R. Rocha and NCC - University of Porto, Portugal File: tab.tries.C - version: $Id: tab.tries.c,v 1.22 2007-04-26 19:02:46 ricroc Exp $ + version: $Id: tab.tries.c,v 1.23 2008-05-05 17:09:37 ricroc Exp $ **********************************************************************/ @@ -863,7 +863,7 @@ ans_node_ptr answer_search(sg_fr_ptr sg_fr, CELL *subs_ptr) { void load_answer_trie(ans_node_ptr ans_node, CELL *subs_ptr) { CELL *stack_vars_base, *stack_vars, *stack_terms_base, *stack_terms; - int subs_arity, i, n_vars = MAX_TABLE_VARS; + int subs_arity, i, n_vars = -1; Term t; if ((subs_arity = *subs_ptr) == 0) @@ -881,14 +881,15 @@ void load_answer_trie(ans_node_ptr ans_node, CELL *subs_ptr) { do { if (IsVarTerm(t)) { int var_index = VarIndexOfTableTerm(t); - if (n_vars == MAX_TABLE_VARS) { - stack_vars += var_index; - STACK_CHECK_EXPAND(stack_terms, stack_vars, stack_terms_base); - } - if (var_index < n_vars) { + if(var_index > n_vars) { + for (i = var_index; i > n_vars; i--) + stack_vars_base[i] = NULL; n_vars = var_index; - stack_vars_base[var_index] = MkVarTerm(); - } + stack_vars = stack_terms_base + n_vars; + STACK_CHECK_EXPAND(stack_terms, stack_vars, stack_terms_base); + } + if (stack_vars_base[var_index] == NULL) + stack_vars_base[var_index] = MkVarTerm(); STACK_PUSH_UP(stack_vars_base[var_index], stack_terms); STACK_CHECK_EXPAND(stack_terms, stack_vars, stack_terms_base); } else if (IsAtomOrIntTerm(t)) {