accumulator first try

This commit is contained in:
Vitor Santos Costa 2013-06-22 00:26:14 -05:00
parent b2fda6c653
commit 44ac5c6eac

View File

@ -1025,7 +1025,7 @@ p_nb_linkval( USES_REGS1 )
static Int static Int
p_nb_create_accumulator( USES_REGS1 ) p_nb_create_accumulator( USES_REGS1 )
{ {
Term t = Deref(ARG1), acct, to; Term t = Deref(ARG1), acct, to, t2;
CELL *destp; CELL *destp;
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
@ -1043,6 +1043,10 @@ p_nb_create_accumulator( USES_REGS1 )
to = CopyTermToArena(t, LOCAL_GlobalArena, TRUE, TRUE, 2, &LOCAL_GlobalArena, garena_overflow_size(ArenaPt(LOCAL_GlobalArena) PASS_REGS) PASS_REGS); to = CopyTermToArena(t, LOCAL_GlobalArena, TRUE, TRUE, 2, &LOCAL_GlobalArena, garena_overflow_size(ArenaPt(LOCAL_GlobalArena) PASS_REGS) PASS_REGS);
if (to == 0L) if (to == 0L)
return FALSE; return FALSE;
t2 = Deref(ARG2);
if (IsVarTerm(t2)) {
return Yap_unify(t2, Yap_MkApplTerm(FunctorGNumber,1,&to) );
}
destp = RepAppl(Deref(ARG2)); destp = RepAppl(Deref(ARG2));
destp[1] = to; destp[1] = to;
return TRUE; return TRUE;
@ -1083,7 +1087,7 @@ p_nb_add_to_accumulator( USES_REGS1 )
/* forget it if it was something else */ /* forget it if it was something else */
destp[1] = new; destp[1] = new;
} else { } else {
/* long, do we have spapce or not ?? */ /* long, do we have space or not ?? */
if (IsLongIntTerm(t0)) { if (IsLongIntTerm(t0)) {
CELL *target = RepAppl(t0); CELL *target = RepAppl(t0);
CELL *source = RepAppl(new); CELL *source = RepAppl(new);
@ -1130,7 +1134,7 @@ p_nb_add_to_accumulator( USES_REGS1 )
static Int static Int
p_nb_accumulator_value( USES_REGS1 ) p_nb_accumulator_value( USES_REGS1 )
{ {
Term t = Deref(ARG1), to; Term t = Deref(ARG1);
Functor f; Functor f;
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
@ -1145,8 +1149,7 @@ p_nb_accumulator_value( USES_REGS1 )
if (f != FunctorGNumber) { if (f != FunctorGNumber) {
return FALSE; return FALSE;
} }
to = Yap_CopyTerm(RepAppl(t)[1]); return Yap_unify(ArgOfTerm(1,t), ARG2);
return Yap_unify(to, ARG2);
} }