8static char SccsId[] =
"@(#)cdmgr.c 1.1 05/02/98";
19#include "tab.macros.h"
29static void expand_consult(
void);
30static Int p_startconsult(USES_REGS1);
31static Int p_showconslultlev(USES_REGS1);
33static void InitConsultStack(
void) {
36 InitialConsultCapacity);
37 if (LOCAL_ConsultLow == NULL) {
38 Yap_ThrowError(RESOURCE_ERROR_HEAP, TermNil,
"No Heap Space in InitCodes");
41 LOCAL_ConsultCapacity = InitialConsultCapacity;
42 LOCAL_ConsultBase = LOCAL_ConsultSp =
43 LOCAL_ConsultLow + LOCAL_ConsultCapacity;
46Atom Yap_ConsultingFile(USES_REGS1) {
48 if ((sno = Yap_CheckAlias(AtomLoopStream)) >= 0) {
51 Atom at = StreamFullName(sno);
54 if (LOCAL_SourceFileName != NULL) {
55 return LOCAL_SourceFileName;
57 if (LOCAL_consult_level == 0) {
60 return (Yap_ULookupAtom(LOCAL_ConsultBase->f_layer->f_name));
64static void retract_all(
PredEntry *p,
int in_use) {
67 q = p->cs.p_code.FirstClause;
69 if (p->PredFlags & LogUpdatePredFlag) {
76 }
else if (p->PredFlags & MegaClausePredFlag) {
79 if (in_use || cl->ClFlags & HasBlobsMask) {
80 LOCK(DeadMegaClausesLock);
81 cl->ClNext = DeadMegaClauses;
83 UNLOCK(DeadMegaClausesLock);
85 Yap_InformOfRemoval(cl);
86 Yap_ClauseSpace -= cl->ClSize;
87 Yap_FreeCodeSpace((
char *)cl);
90 p->PredFlags &= ~MegaClausePredFlag;
91 p->cs.p_code.NOfClauses = 0;
98 if (in_use || cl->ClFlags & HasBlobsMask) {
99 LOCK(DeadStaticClausesLock);
100 cl->ClNext = DeadStaticClauses;
101 DeadStaticClauses = cl;
102 UNLOCK(DeadStaticClausesLock);
104 Yap_InformOfRemoval(cl);
105 Yap_ClauseSpace -= cl->ClSize;
106 Yap_FreeCodeSpace((
char *)cl);
108 p->cs.p_code.NOfClauses--;
115 p->cs.p_code.FirstClause = NULL;
116 p->cs.p_code.LastClause = NULL;
118 p->cs.p_code.TrueCodeOfPred = p->CodeOfPred =
119 (
yamop *)(&p->OpcodeOfPred);
120 p->OpcodeOfPred = FAIL_OPCODE;
122 p->OpcodeOfPred = UNDEF_OPCODE;
123 p->PredFlags |= UndefPredFlag;
125 p->cs.p_code.TrueCodeOfPred = p->CodeOfPred = (
yamop *)(&(p->OpcodeOfPred));
126 if (trueGlobalPrologFlag(PROFILING_FLAG)) {
127 p->PredFlags |= ProfiledPredFlag;
128 if (!Yap_initProfiler(p)) {
132 p->PredFlags &= ~ProfiledPredFlag;
134 p->PredFlags |= CountPredFlag;
136 p->PredFlags &= ~CountPredFlag;
137 Yap_PutValue(AtomAbol, MkAtomTerm(AtomTrue));
140static void addcl_permission_error(
AtomEntry *ap, Int Arity,
int in_use) {
143 LOCAL_Error_TYPE = PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE;
144 LOCAL_ErrorMessage =
Malloc(256);
148 sprintf(LOCAL_ErrorMessage,
"static predicate %s is in use", ap->StrOfAE);
150 sprintf(LOCAL_ErrorMessage,
151 "static predicate %s/" Int_FORMAT
" is in use", ap->StrOfAE,
155 sprintf(LOCAL_ErrorMessage,
"system predicate %s", ap->StrOfAE);
157 sprintf(LOCAL_ErrorMessage,
"system predicate %s/" Int_FORMAT,
163int Yap_not_was_reconsulted(
PredEntry *p, Term t,
int mode) {
168 if (p == LOCAL_LastAssertedPred)
170 if (!LOCAL_ConsultSp) {
173 if (p->cs.p_code.NOfClauses) {
174 for (fp = LOCAL_ConsultSp; fp < LOCAL_ConsultBase; ++fp)
178 fp = LOCAL_ConsultBase;
180 if (fp != LOCAL_ConsultBase) {
181 LOCAL_LastAssertedPred = p;
184 if ((p->cs.p_code.NOfClauses &&
185 p->src.OwnerFile == Yap_ConsultingFile(PASS_REGS1) &&
186 p->src.OwnerFile != AtomNil && !(p->PredFlags & MultiFileFlag) &&
187 p->src.OwnerFile != AtomUserIn)) {
192 retract_all(p, Yap_static_in_use(p, TRUE));
198 if (LOCAL_ConsultSp <= LOCAL_ConsultLow + 6) {
202 LOCAL_ConsultSp->p = p0;
203 if (LOCAL_ConsultBase != LOCAL_ConsultLow + LOCAL_ConsultCapacity &&
204 LOCAL_ConsultBase->f_layer->mode &&
205 !(p->PredFlags & MultiFileFlag)) {
206 retract_all(p, Yap_static_in_use(p, TRUE));
210 LOCAL_LastAssertedPred = p;
214static Int parent_stream_file(USES_REGS1) {
215 if (LOCAL_consult_level <= 0) {
216 return Yap_unify(ARG1,TermUserIn);
218 return Yap_unify(ARG1,MkAtomTerm(Yap_ULookupAtom(LOCAL_ConsultBase->f_layer->f_name)));
222static Int parent_source_module(USES_REGS1) {
223 if (LOCAL_consult_level <= 0) {
224 return Yap_unify(ARG1,TermUser);
226 Term
m = (LOCAL_ConsultBase->f_layer->m==0?TermProlog:LOCAL_ConsultBase->f_layer->m);
227 return Yap_unify(ARG1,
m);
231static Int parent_stream_line(USES_REGS1) {
232 if (LOCAL_consult_level <= 0) {
233 return Yap_unify(ARG1,MkIntTerm(0));
235 return Yap_unify(ARG1,MkIntTerm(LOCAL_ConsultBase->f_layer->line));
239static Int grandparent_source_module(USES_REGS1) {
240 if (LOCAL_consult_level < 2) {
241 return Yap_unify(ARG1,TermUser);
243 union CONSULT_OBJ *p = LOCAL_ConsultBase+LOCAL_ConsultBase->f_layer->c;
245 return Yap_unify(ARG1,p->f_layer->m);
247 return Yap_unify(ARG1,TermProlog);
252static void end_consult(USES_REGS1) {
253 int osnow = Yap_CheckAlias(AtomLoopStream);
255 Yap_CloseStream(osnow);
256 setAtomicLocalPrologFlag(COMPILATION_MODE_FLAG, LOCAL_ConsultSp->f_layer->CompilationMode);
257 Yap_ChDir(RepAtom(AtomOfTerm(LOCAL_ConsultBase->f_layer->cwd))->StrOfAE);
258 CurrentModule = LOCAL_SourceModule = LOCAL_ConsultBase->f_layer->m;
259 setBooleanLocalPrologFlag(VERBOSE_LOAD_FLAG, !LOCAL_ConsultBase->f_layer->silent);
260 setBooleanLocalPrologFlag(AUTOLOAD_FLAG, !LOCAL_ConsultBase->f_layer->autoload);
261 LOCAL_ConsultSp = LOCAL_ConsultBase;
262 LOCAL_ConsultBase = LOCAL_ConsultSp + LOCAL_ConsultSp->f_layer->c;
263 Yap_FreeCodeSpace(LOCAL_ConsultSp->f_layer);
265 if (LOCAL_consult_level>0)
266 LOCAL_consult_level--;
267 LOCAL_LastAssertedPred = NULL;
268#if !defined(YAPOR) && !defined(YAPOR_SBA)
272 if (LOCAL_consult_level==0)
273 setBooleanLocalPrologFlag(COMPILING_FLAG,
false);
277static void expand_consult(
void) {
280 UInt OldConsultCapacity = LOCAL_ConsultCapacity;
283 LOCAL_ConsultCapacity += InitialConsultCapacity;
285 while ((new_cl = (
consult_obj *)Yap_AllocCodeSpace(
286 sizeof(
consult_obj) * LOCAL_ConsultCapacity)) == NULL) {
287 if (!Yap_growheap(FALSE,
sizeof(
consult_obj) * LOCAL_ConsultCapacity,
289 Yap_ThrowError(RESOURCE_ERROR_HEAP, TermNil, LOCAL_ErrorMessage);
293 new_cs = new_cl + InitialConsultCapacity;
295 memcpy((
void *)new_cs, (
void *)LOCAL_ConsultLow,
298 Yap_FreeCodeSpace((
char *)LOCAL_ConsultLow);
300 new_cs += (LOCAL_ConsultSp - LOCAL_ConsultLow);
302 LOCAL_ConsultBase = new_cl + ((LOCAL_ConsultBase - LOCAL_ConsultLow) +
303 InitialConsultCapacity);
306 new_cl + ((LOCAL_ConsultSp - LOCAL_ConsultLow) + InitialConsultCapacity);
308 LOCAL_ConsultLow = new_cl;
312void Yap_ResetConsultStack(
void) {
314 while(LOCAL_consult_level) {
317 Yap_FreeCodeSpace((
char *)LOCAL_ConsultLow);
318 LOCAL_ConsultBase = LOCAL_ConsultSp = LOCAL_ConsultLow = NULL;
319 LOCAL_ConsultCapacity = InitialConsultCapacity;
323void Yap_init_consult(
int mode,
const char *filename,
int sno,
const char *
encoding) {
325 char dir[MAX_PATH + 1];
326 if (!LOCAL_ConsultSp) {
329 if (LOCAL_ConsultSp >= LOCAL_ConsultLow + 6) {
333 LOCAL_ConsultSp->f_layer = Yap_AllocCodeSpace(
sizeof(
struct CONSULT_Layer));
335 LOCAL_ConsultSp->f_layer->f_name = (
const unsigned char *)filename;
337 LOCAL_ConsultSp->f_layer->f_name = (
const unsigned char *)
"user_input";
339 LOCAL_ConsultSp->f_layer->sno = Yap_CheckAlias(AtomLoopStream);
340 if ( LOCAL_ConsultSp->f_layer->sno > 0) {
341 LOCAL_ConsultSp->f_layer->line = GLOBAL_Stream[LOCAL_ConsultSp->f_layer->sno].linecount;
343 LOCAL_ConsultSp->f_layer->line=0;
345 LOCAL_ConsultSp->f_layer->encoding = enc_id(
encoding, GLOBAL_Stream[sno].
encoding);
346 LOCAL_ConsultSp->f_layer->mode = mode;
347 LOCAL_ConsultSp->f_layer->c = (LOCAL_ConsultBase - LOCAL_ConsultSp);
348 LOCAL_ConsultSp->f_layer->m = LOCAL_SourceModule;
349 LOCAL_ConsultSp->f_layer->CompilationMode = getAtomicLocalPrologFlag(COMPILATION_MODE_FLAG);
350 LOCAL_ConsultSp->f_layer->must_be_module =
false;
351 LOCAL_ConsultSp->f_layer->autoload = trueLocalPrologFlag(AUTOLOAD_FLAG);
352 LOCAL_ConsultSp->f_layer->silent = falseLocalPrologFlag(VERBOSE_LOAD_FLAG);
353 LOCAL_ConsultSp->f_layer->cwd = MkAtomTerm(Yap_LookupAtom(Yap_getcwd(dir, MAX_PATH)));
354 LOCAL_ConsultBase = LOCAL_ConsultSp;
355#if !defined(YAPOR) && !defined(YAPOR_SBA)
359 LOCAL_consult_level++;
360 LOCAL_LastAssertedPred = NULL;
361 Yap_AddAlias(AtomLoopStream, sno);
362 GLOBAL_Stream[sno].encoding = LOCAL_ConsultSp->f_layer->encoding;
365static Int p_startconsult(USES_REGS1) {
367 char *smode = RepAtom(AtomOfTerm(Deref(ARG1)))->StrOfAE;
368 int sno = Yap_CheckStream(Deref(ARG3),Input_Stream_f,
" bad consult stream" );
370 const char *enc = RepAtom(AtomOfTerm(Deref(ARG4)))->StrOfAE;
372 setBooleanLocalPrologFlag(COMPILING_FLAG,
true);
373 mode = strcmp(
"consult", (
char *)smode);
374 Yap_init_consult(mode, RepAtom(AtomOfTerm(Deref(ARG2)))->StrOfAE, sno, enc);
375 t = MkIntTerm(LOCAL_consult_level);
376 return (Yap_unify_constant(ARG5, t));
379static Int p_showconslultlev(USES_REGS1) {
381 if (LOCAL_consult_level < 0)
382 LOCAL_consult_level=0;
383 t = MkIntTerm(LOCAL_consult_level);
384 return (Yap_unify_constant(ARG1, t));
389void Yap_end_consult(
void) {
391 end_consult(PASS_REGS1);
394static Int p_endconsult(USES_REGS1) {
395 end_consult(PASS_REGS1);
400static void purge_clauses(
PredEntry *pred) {
401 if (pred->PredFlags & UDIPredFlag) {
402 Yap_udi_abolish(pred);
404 if (pred->cs.p_code.NOfClauses) {
405 if (pred->PredFlags & IndexedPredFlag)
406 Yap_RemoveIndexation(pred);
407 Yap_PutValue(AtomAbol, MkAtomTerm(AtomTrue));
408 retract_all(pred, Yap_static_in_use(pred, TRUE));
414 pred->src.OwnerFile = AtomNil;
418bool Yap_discontiguous(
PredEntry *ap, Term mode USES_REGS) {
421 if (ap->PredFlags & (DiscontiguousPredFlag | MultiFileFlag) ||
422 falseGlobalPrologFlag(DISCONTIGUOUS_WARNINGS_FLAG))
424 if ((mode != TermConsult && mode != TermReconsult))
426 if (!LOCAL_ConsultSp) {
430 if (ap == LOCAL_LastAssertedPred)
432 if (ap->cs.p_code.NOfClauses) {
433 Term repeat = AbsPair((CELL *)AbsPredProp(ap));
434 for (fp = LOCAL_ConsultSp; fp < LOCAL_ConsultBase; ++fp)
435 if (fp->p == AbsPredProp(ap)) {
437 if (LOCAL_ConsultSp == LOCAL_ConsultLow + 1) {
441 LOCAL_ConsultSp->r = repeat;
443 }
else if (fp->r == repeat && ap->cs.p_code.NOfClauses > 4) {
450static Int get_must_be_module(USES_REGS1)
452 return LOCAL_ConsultSp->f_layer->must_be_module;
456static Int set_must_be_module(USES_REGS1)
458 Term t = Deref(ARG1);
460 LOCAL_ConsultSp->f_layer->must_be_module = (t == TermTrue ||t == TermOn)
465static Int p_is_discontiguous(USES_REGS1) {
469 pe = Yap_get_pred(Deref(ARG1), Deref(ARG2),
"discontiguous");
473 out = (pe->PredFlags & DiscontiguousPredFlag);
479 p_new_discontiguous(USES_REGS1) {
483 Term t = Deref(ARG1);
484 Term mod = Deref(ARG3);
496 arity = IntOfTerm(t);
500 pe = RepPredProp(PredPropByAtom(at, mod));
502 pe = RepPredProp(PredPropByFunc(Yap_MkFunctor(at, arity), mod));
504 pe->PredFlags |= DiscontiguousPredFlag;
507 if (pe->cs.p_code.NOfClauses == 0) {
508 pe->cs.p_code.TrueCodeOfPred = pe->CodeOfPred =
509 (
yamop *)(&pe->OpcodeOfPred);
510 pe->OpcodeOfPred = FAIL_OPCODE;
516bool Yap_multiple(
PredEntry *ap, Term mode USES_REGS) {
519 if ((ap->PredFlags & (MultiFileFlag | LogUpdatePredFlag | DynamicPredFlag)) ||
520 mode != TermReconsult)
522 if (LOCAL_consult_level == 0)
524 for (fp = LOCAL_ConsultSp; fp < LOCAL_ConsultBase; ++fp)
525 if (fp->p == AbsPredProp(ap)) {
528 return ap->cs.p_code.NOfClauses > 0 && ap->src.OwnerFile != AtomNil &&
529 Yap_ConsultingFile(PASS_REGS1) != ap->src.OwnerFile &&
530 LOCAL_Including != MkAtomTerm(ap->src.OwnerFile);
537static Int new_multifile(USES_REGS1) {
542 pe = Yap_new_pred(Deref(ARG1), Deref(ARG2),
false,
"multifile");
546 arity = pe->ArityOfPE;
548 at = (
Atom)pe->FunctorOfPred;
550 at = NameOfFunctor(pe->FunctorOfPred);
552 if (pe->PredFlags & MultiFileFlag) {
556 if (pe->PredFlags & (TabledPredFlag | ForeignPredFlags)) {
558 addcl_permission_error(RepAtom(at), arity, FALSE);
561 if (pe->cs.p_code.NOfClauses) {
563 addcl_permission_error(RepAtom(at), arity, FALSE);
566 pe->PredFlags &= ~UndefPredFlag;
567 pe->PredFlags |= MultiFileFlag;
570 if (!(pe->PredFlags & (DynamicPredFlag | LogUpdatePredFlag))) {
572 pe->PredFlags |= (SourcePredFlag | CompiledPredFlag);
574 pe->src.OwnerFile = Yap_ConsultingFile(PASS_REGS1);
575 if (pe->cs.p_code.NOfClauses == 0) {
576 pe->CodeOfPred = pe->cs.p_code.TrueCodeOfPred = FAILCODE;
577 pe->OpcodeOfPred = FAIL_OPCODE;
583static Int p_is_multifile(USES_REGS1) {
587 pe = Yap_get_pred(Deref(ARG1), Deref(ARG2),
"$is_multifile");
592 out = (pe->PredFlags & MultiFileFlag);
598static Int p_purge_clauses(USES_REGS1) {
600 Term t = Deref(ARG1);
601 Term mod = Deref(ARG2);
604 Yap_PutValue(AtomAbol, MkAtomTerm(AtomNil));
607 if (IsVarTerm(mod) || !IsAtomTerm(mod)) {
611 Atom at = AtomOfTerm(t);
612 pred = RepPredProp(PredPropByAtom(at, mod));
613 }
else if (IsApplTerm(t)) {
614 Functor fun = FunctorOfTerm(t);
615 pred = RepPredProp(PredPropByFunc(fun, mod));
619 if (pred->PredFlags & StandardPredFlag) {
621 Yap_Error(PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, t,
"assert/1");
628 if (DeadMegaClauses != before) {
630 Yap_track_cpred( 0, P, 0, &info);
632 if (!Yap_gc(&info)) {
633 Yap_Error(RESOURCE_ERROR_STACK, TermNil, LOCAL_ErrorMessage);
640Int being_consulted(USES_REGS1)
644 lvl =LOCAL_consult_level;
645 union CONSULT_OBJ *sp = LOCAL_ConsultSp, *base = LOCAL_ConsultBase;
648 int sno= Yap_CheckStream(Deref(ARG1),Input_Stream_f,
" bad consult stream" );
653 if(sno == sp->f_layer->sno ||
654 GLOBAL_Stream[sno].name ==
655 GLOBAL_Stream[sp->f_layer->sno].name)
657 base = sp + sp->f_layer->c;
667#define LOAD_FILES_DEFS( ) \
668 PAR("autoload", isatom, LOAD_FILES_AUTOLOAD ), \
669 PAR("derived_from", isatom, LOAD_FILES_DERIVED_FROM), \
670 PAR("encoding", isatom, LOAD_FILES_ENCODING), \
671 PAR("expand", booleanFlag, LOAD_FILES_EXPAND), \
672 PAR("if", booleanFlag, LOAD_FILES_IF), \
673 PAR("imports", ok, LOAD_FILES_IMPORTS), \
674 PAR("qcompile", booleanFlag, LOAD_FILES_QCOMPILE), \
675 PAR("file_errors", is_file_errors, LOAD_FILES_FILE_ERRORS), \
676 PAR("silent", booleanFlag, LOAD_FILES_SILENT), \
677 PAR("skip_unix_header", ok, LOAD_FILES_SKIP_UNIX_HEADER), \
678 PAR("compilation_mode", ok, LOAD_FILES_COMPILATION_MODE), \
679 PAR("consult", isatom, LOAD_FILES_CONSULT), \
680 PAR("stream", ok, LOAD_FILES_STREAM), \
681 PAR("dialect", isatom, LOAD_FILES_DIALECT) , \
682 PAR("redefine_module", booleanFlag, LOAD_FILES_REDEFINE_MODULE), \
683 PAR("reexport", ok, LOAD_FILES_REEXPORT), \
684 PAR("must_be_module", booleanFlag, LOAD_FILES_MUST_BE_MODULE), \
685 PAR("initialization", ok, LOAD_FILES_INITIALIZATION), \
686 PAR(NULL, ok, LOAD_FILES_END)
688#define PAR(x, y, z) z
690typedef enum LOAD_FILES_enum_ {
692} load_files_choices_t;
696#define PAR(x, y, z) \
699static const param_t load_files_search_defs[] = {
703static Int load_files_parameters(USES_REGS1) {
704 Term tlist = Deref(ARG1), tf;
707 memset(args, 0,
sizeof(
xarg)*LOAD_FILES_END);
708 args = Yap_ArgListToVector(tlist, load_files_search_defs,
710 DOMAIN_ERROR_LOAD_FILES_OPTION);
712 if (LOCAL_Error_TYPE != YAP_NO_ERROR) {
713 Yap_Error(LOCAL_Error_TYPE, tlist, NULL);
718 if (args[LOAD_FILES_AUTOLOAD].used) {
719 setBooleanLocalPrologFlag(LOAD_FILES_AUTOLOAD,
720 args[LOAD_FILES_AUTOLOAD].tvalue);
723 if (args[LOAD_FILES_DERIVED_FROM].used) {
725 toProlog[0] = args[LOAD_FILES_DERIVED_FROM].tvalue;
727 toProlog[0] = TermNil;
729 if (args[LOAD_FILES_EXPAND].used) {
730 toProlog[1] = args[LOAD_FILES_EXPAND].tvalue;
732 toProlog[1] = TermFalse;
734 if (args[LOAD_FILES_IF].used) {
735 toProlog[2] = args[LOAD_FILES_IF].tvalue;
737 toProlog[2] = TermTrue;
739 if (args[LOAD_FILES_IMPORTS].used) {
740 toProlog[3] = args[LOAD_FILES_IMPORTS].tvalue;
742 toProlog[3] = TermAll;
744 if (args[LOAD_FILES_QCOMPILE].used) {
745 toProlog[4] = args[LOAD_FILES_QCOMPILE].tvalue;
747 toProlog[4] = TermFalse;
749 if (args[LOAD_FILES_SILENT].used) {
751 if (args[LOAD_FILES_SILENT].tvalue == TermTrue)
753 else if (args[LOAD_FILES_SILENT].tvalue == TermFalse)
756 Yap_ThrowError(TYPE_ERROR_BOOLEAN,args[LOAD_FILES_SILENT].tvalue,NULL);
757 setBooleanLocalPrologFlag(VERBOSE_LOAD_FLAG,v);
759 if (args[LOAD_FILES_SKIP_UNIX_HEADER].used) {
760 toProlog[4] = args[LOAD_FILES_SKIP_UNIX_HEADER].tvalue;
762 toProlog[4] = TermFalse;
764 if (args[LOAD_FILES_SKIP_UNIX_HEADER].used) {
765 toProlog[4] = args[LOAD_FILES_SKIP_UNIX_HEADER].tvalue;
767 toProlog[4] = TermFalse;
769 if (args[LOAD_FILES_COMPILATION_MODE].used) {
771 if (args[LOAD_FILES_COMPILATION_MODE].tvalue == TermSource)
773 else if (args[LOAD_FILES_COMPILATION_MODE].tvalue == TermCompact)
776 Yap_ThrowError(TYPE_ERROR_BOOLEAN,args[LOAD_FILES_COMPILATION_MODE].tvalue,NULL);
777 setBooleanLocalPrologFlag(SOURCE_FLAG,v);
779 if (args[LOAD_FILES_CONSULT].used) {
780 toProlog[5] = args[LOAD_FILES_CONSULT].tvalue;
782 toProlog[5] = TermReconsult;
784 if (args[LOAD_FILES_STREAM].used) {
785 toProlog[6] = args[LOAD_FILES_STREAM].tvalue;
787 toProlog[6] = MkVarTerm();
789 if (args[LOAD_FILES_DIALECT].used) {
790 setAtomicLocalPrologFlag(DIALECT_FLAG,
791 args[LOAD_FILES_DIALECT].tvalue);
793 if (args[LOAD_FILES_REDEFINE_MODULE].used) {
794 toProlog[7] = args[LOAD_FILES_REDEFINE_MODULE].tvalue;
796 toProlog[7] = TermSource;
798 if (args[LOAD_FILES_REEXPORT].used) {
799 toProlog[8] = args[LOAD_FILES_REEXPORT].tvalue;
801 toProlog[8] = TermTrue;
803 if (args[LOAD_FILES_MUST_BE_MODULE].used) {
804 toProlog[9] = args[LOAD_FILES_MUST_BE_MODULE].tvalue;
806 toProlog[9] = TermTrue;
808 if (args[LOAD_FILES_INITIALIZATION].used) {
809 toProlog[10] = args[LOAD_FILES_INITIALIZATION].tvalue;
811 toProlog[10] = TermTrue;
813 tf = Yap_MkApplTerm(Yap_MkFunctor(AtomDot,11),11,toProlog);
814 return (Yap_unify(ARG2, tf));
817static Int get_load_files_parameter(USES_REGS1) {
818 Term t = Deref(ARG1), topts = Deref(ARG2);
821 int i =
Yap_ArgKey(AtomOfTerm(t), load_files_search_defs,
824 return Yap_unify(ARG3, ArgOfTerm(i + 1, topts));
825 Yap_Error(DOMAIN_ERROR_LOAD_FILES_OPTION, ARG1, NULL);
830void Yap_InitConsult(
void) {
832 Yap_InitCPred(
"$purge_clauses", 2, p_purge_clauses,
833 SafePredFlag | SyncPredFlag);
834 Yap_InitCPred(
"$new_multifile", 2, new_multifile,
836 SafePredFlag | SyncPredFlag | HiddenPredFlag);
837 Yap_InitCPred(
"$is_multifile", 2, p_is_multifile,
838 TestPredFlag | SafePredFlag);
839 Yap_InitCPred(
"$new_discontiguous", 3, p_new_discontiguous,
840 SafePredFlag | SyncPredFlag);
841 Yap_InitCPred(
"$is_discontiguous", 2, p_is_discontiguous,
842 TestPredFlag | SafePredFlag);
843 Yap_InitCPred(
"$start_consult", 5, p_startconsult,
844 SafePredFlag | SyncPredFlag);
845 Yap_InitCPred(
"$show_consult_level", 1, p_showconslultlev, SafePredFlag);
846 Yap_InitCPred(
"$end_consult", 0, p_endconsult,
847 SafePredFlag | SyncPredFlag);
848 Yap_InitCPred(
"$parent_source_module", 1, parent_source_module,
849 SafePredFlag | SyncPredFlag);
850 Yap_InitCPred(
"$parent_stream_line", 1, parent_stream_line,
851 SafePredFlag | SyncPredFlag);
852 Yap_InitCPred(
"$parent_stream_file", 1, parent_stream_file,
853 SafePredFlag | SyncPredFlag);
854 Yap_InitCPred(
"$grandparent_source_module", 1, grandparent_source_module,
855 SafePredFlag | SyncPredFlag);
856 Yap_InitCPred(
"$get_must_be_module", 0, get_must_be_module,
857 SafePredFlag | SyncPredFlag);
858 Yap_InitCPred(
"$set_must_be_module", 1, set_must_be_module,
859 SafePredFlag | SyncPredFlag);
860 Yap_InitCPred(
"$being_consulted", 1, being_consulted,
861 SafePredFlag | SyncPredFlag);
int Yap_ArgKey(Atom key, const param_t *def, int n)
Returns the index of an argument key, or -1 if not found.
void * Malloc(size_t sz USES_REGS)
allocate a temporary text block
@ encoding
support for coding systens, YAP relies on UTF-8 internally