Merge branch 'master' of https://github.com/vscosta/yap-6.3
This commit is contained in:
15
C/cdmgr.c
15
C/cdmgr.c
@@ -1014,6 +1014,20 @@ bool Yap_unknown(Term t) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static Int
|
||||
undef_handler(USES_REGS1) { /* '$undef_handler'(+S,+Mod) */
|
||||
PredEntry *pe;
|
||||
Int out;
|
||||
|
||||
pe = get_pred(Deref(ARG1), Deref(ARG2), "undef_handler");
|
||||
if (EndOfPAEntr(pe))
|
||||
return FALSE;
|
||||
PELOCK(27, pe);
|
||||
UndefCode = pe;
|
||||
UNLOCKPE(44, pe);
|
||||
return true;
|
||||
}
|
||||
|
||||
static int source_pred(PredEntry *p, yamop *q) {
|
||||
if (p->PredFlags & (DynamicPredFlag | LogUpdatePredFlag))
|
||||
return FALSE;
|
||||
@@ -4653,6 +4667,7 @@ void Yap_InitCdMgr(void) {
|
||||
Yap_InitCPred("$call_count_reset", 0, p_call_count_reset,
|
||||
SafePredFlag | SyncPredFlag);
|
||||
Yap_InitCPred("$set_pred_module", 2, p_set_pred_module, SafePredFlag);
|
||||
Yap_InitCPred("$undef_handler", 2, undef_handler, SafePredFlag);
|
||||
Yap_InitCPred("$set_pred_owner", 2, p_set_pred_owner, SafePredFlag);
|
||||
Yap_InitCPred("$hide_predicate", 2, hide_predicate, SafePredFlag);
|
||||
Yap_InitCPred("$stash_predicate", 2, p_stash_predicate, SafePredFlag);
|
||||
|
9
C/text.c
9
C/text.c
@@ -834,14 +834,14 @@ size_t write_buffer(void *s0, seq_tv_t *out, encoding_t enc, int minimal,
|
||||
if (!minimal)
|
||||
sz *= 4;
|
||||
if (out->type & (YAP_STRING_MALLOC)) {
|
||||
out->val.c = malloc(sz);
|
||||
out->val.uc = malloc(sz);
|
||||
} else if (!(out->type & (YAP_STRING_WITH_BUFFER))) {
|
||||
if (ASP - (sz / sizeof(CELL) + 1) > HR + 1024) {
|
||||
out->val.c = Yap_PreAllocCodeSpace();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out->val.c = s0;
|
||||
out->val.uc = s0;
|
||||
}
|
||||
if (out->enc == ENC_ISO_UTF8) {
|
||||
switch (enc) {
|
||||
@@ -849,17 +849,18 @@ size_t write_buffer(void *s0, seq_tv_t *out, encoding_t enc, int minimal,
|
||||
if (out->type & (YAP_STRING_WITH_BUFFER | YAP_STRING_MALLOC)) {
|
||||
char *s = s0;
|
||||
size_t n = strlen(s) + 1;
|
||||
out->val.c[n] = '\0';
|
||||
out->val.uc[n] = '\0';
|
||||
sz_end = n + 1;
|
||||
} else {
|
||||
sz_end = strlen(out->val.c) + 1;
|
||||
}
|
||||
|
||||
break;
|
||||
case ENC_ISO_LATIN1: {
|
||||
unsigned char *s = s0, *lim = s + (max = strnlen(s0, max));
|
||||
unsigned char *cp = s, *buf0, *buf;
|
||||
|
||||
buf = buf0 = s0;
|
||||
buf = buf0 = out->val.uc;
|
||||
if (!buf)
|
||||
return -1;
|
||||
while (*cp && cp < lim) {
|
||||
|
Reference in New Issue
Block a user