exten support and small fixes
This commit is contained in:
parent
0b881c0569
commit
ed2ecb29e7
@ -1422,8 +1422,11 @@ static Atom
|
|||||||
LookupMaxWideAtom(size_t n, wchar_t *s)
|
LookupMaxWideAtom(size_t n, wchar_t *s)
|
||||||
{
|
{
|
||||||
Atom catom;
|
Atom catom;
|
||||||
wchar_t *buf = (wchar_t *)Yap_AllocCodeSpace((n+1)*sizeof(wchar_t));
|
size_t sz = wcslen(s);
|
||||||
|
wchar_t *buf;
|
||||||
|
|
||||||
|
if (sz+1 < n) n = sz+1;
|
||||||
|
buf = (wchar_t *)Yap_AllocCodeSpace((n+1)*sizeof(wchar_t));
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
wcsncpy(buf, s, n);
|
wcsncpy(buf, s, n);
|
||||||
@ -1548,6 +1551,9 @@ int PL_unify_termv(term_t l, va_list ap)
|
|||||||
case PL_POINTER:
|
case PL_POINTER:
|
||||||
*pt++ = MkIntegerTerm((Int)va_arg(ap, void *));
|
*pt++ = MkIntegerTerm((Int)va_arg(ap, void *));
|
||||||
break;
|
break;
|
||||||
|
case PL_INTPTR:
|
||||||
|
*pt++ = MkIntegerTerm((Int)va_arg(ap, intptr_t));
|
||||||
|
break;
|
||||||
case PL_INT64:
|
case PL_INT64:
|
||||||
#if SIZEOF_LONG_INT==8
|
#if SIZEOF_LONG_INT==8
|
||||||
*pt++ = MkIntegerTerm((Int)va_arg(ap, long int));
|
*pt++ = MkIntegerTerm((Int)va_arg(ap, long int));
|
||||||
@ -2082,12 +2088,15 @@ X_API int
|
|||||||
PL_strip_module(term_t raw, module_t *m, term_t plain)
|
PL_strip_module(term_t raw, module_t *m, term_t plain)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term m0;
|
Term m0, t;
|
||||||
if (*m)
|
if (m) {
|
||||||
m0 = MkAtomTerm((*m)->AtomOfME);
|
if (*m)
|
||||||
else
|
m0 = MkAtomTerm((*m)->AtomOfME);
|
||||||
|
else
|
||||||
|
m0 = MkAtomTerm(AtomProlog);
|
||||||
|
} else
|
||||||
m0 = USER_MODULE;
|
m0 = USER_MODULE;
|
||||||
YAP_Term t = YAP_StripModule(Yap_GetFromSlot(raw PASS_REGS), &m0);
|
t = Yap_StripModule(Yap_GetFromSlot(raw PASS_REGS), &m0);
|
||||||
if (!t)
|
if (!t)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
*m = Yap_GetModuleEntry(m0);
|
*m = Yap_GetModuleEntry(m0);
|
||||||
@ -2367,7 +2376,6 @@ X_API int PL_call_predicate(module_t ctx, int flags, predicate_t p, term_t t0)
|
|||||||
qid_t qi = PL_open_query(ctx, flags, p, t0);
|
qid_t qi = PL_open_query(ctx, flags, p, t0);
|
||||||
int ret = PL_next_solution(qi);
|
int ret = PL_next_solution(qi);
|
||||||
PL_cut_query(qi);
|
PL_cut_query(qi);
|
||||||
Yap_FreeCodeSpace( qi );
|
|
||||||
PL_close_foreign_frame(f);
|
PL_close_foreign_frame(f);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user