fix initialization on undefined.
This commit is contained in:
parent
f2038e9e36
commit
ce390d987e
28
C/globals.c
28
C/globals.c
@ -1355,6 +1355,18 @@ p_b_setval( USES_REGS1 )
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
undefined_global( USES_REGS1 ) {
|
||||||
|
Term t3 = Deref(ARG3);
|
||||||
|
|
||||||
|
if (IsApplTerm(t3)) {
|
||||||
|
if (FunctorOfTerm(t3) == FunctorEq)
|
||||||
|
return Yap_unify( ArgOfTerm(1, t3) , ArgOfTerm(2, t3) );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return Yap_unify(t3, TermNil);
|
||||||
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_nb_getval( USES_REGS1 )
|
p_nb_getval( USES_REGS1 )
|
||||||
{
|
{
|
||||||
@ -1369,17 +1381,8 @@ p_nb_getval( USES_REGS1 )
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
ge = FindGlobalEntry(AtomOfTerm(t) PASS_REGS);
|
ge = FindGlobalEntry(AtomOfTerm(t) PASS_REGS);
|
||||||
if (!ge) {
|
if (!ge)
|
||||||
Term t3 = Deref(ARG3);
|
return undefined_global( PASS_REGS1 );
|
||||||
if (IsVarTerm(t3))
|
|
||||||
return TRUE; // weird stuff, but allows using an handler.
|
|
||||||
if (IsApplTerm(t3)) {
|
|
||||||
if (FunctorOfTerm(t3) == FunctorEq)
|
|
||||||
return Yap_unify( ArgOfTerm(1, t3) , ArgOfTerm(2, t3) );
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
return Yap_unify(t3, MkAtomTerm(AtomTrue));
|
|
||||||
}
|
|
||||||
READ_LOCK(ge->GRWLock);
|
READ_LOCK(ge->GRWLock);
|
||||||
to = ge->global;
|
to = ge->global;
|
||||||
if (IsVarTerm(to) && IsUnboundVar(VarOfTerm(to))) {
|
if (IsVarTerm(to) && IsUnboundVar(VarOfTerm(to))) {
|
||||||
@ -1388,8 +1391,9 @@ p_nb_getval( USES_REGS1 )
|
|||||||
to = t;
|
to = t;
|
||||||
}
|
}
|
||||||
READ_UNLOCK(ge->GRWLock);
|
READ_UNLOCK(ge->GRWLock);
|
||||||
if (to == TermFoundVar)
|
if (to == TermFoundVar) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
return Yap_unify(ARG2, to);
|
return Yap_unify(ARG2, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user