diff --git a/C/flags.c b/C/flags.c index 2554abcf0..2fb60e193 100644 --- a/C/flags.c +++ b/C/flags.c @@ -16,7 +16,7 @@ *************************************************************************/ /** @file C/flags.c - + @brief Prolog parameter setting, */ @@ -221,7 +221,7 @@ static bool sqf(Term t2) { ModEntry *new = Yap_GetModuleEntry(CurrentModule); return sqf1(new, t2 PASS_REGS); } - + static Term isaccess(Term inp) { if (inp == TermReadWrite || inp == TermReadOnly) return inp; @@ -724,7 +724,7 @@ static bool setYapFlagInModule(Term tflag, Term t2, Term mod) { flag_term *tarr = GLOBAL_Flags; if (!(fv->type(t2))) return false; - + if (fv->helper && !(fv->helper(t2))) return false; Term tout = tarr[fv->FlagOfVE].at; @@ -782,7 +782,7 @@ static bool setYapFlagInModule(Term tflag, Term t2, Term mod) { return bqf1(me, t2 PASS_REGS); } else if (fv->FlagOfVE == SINGLE_QUOTES_FLAG) { return sqf1(me, t2 PASS_REGS); - + } // bad key? return false; diff --git a/C/index.c b/C/index.c index 4b7f67508..28d097421 100755 --- a/C/index.c +++ b/C/index.c @@ -633,8 +633,10 @@ type_of_verb(rest,passive). */ -#include #include "absmi.h" + +#include + #include "YapCompile.h" #if DEBUG #include "yapio.h" diff --git a/C/stack.c b/C/stack.c index 675fa47c5..a64fb1c4f 100644 --- a/C/stack.c +++ b/C/stack.c @@ -1391,12 +1391,12 @@ void Yap_dump_code_area_for_profiler(void) { while (pp != NULL) { /* if (pp->ArityOfPE) { - fprintf(stderr,"\%s/%d %p\n", + fprintf(stderr,"%%s/%d %p\n", RepAtom(NameOfFunctor(pp->FunctorOfPred))->StrOfAE, pp->ArityOfPE, pp); } else { - fprintf(stderr,"\%s %p\n", + fprintf(stderr,"%%s %p\n", RepAtom((Atom)(pp->FunctorOfPred))->StrOfAE, pp); }*/ @@ -1797,82 +1797,83 @@ void Yap_dump_stack(void) { if (handled_exception(PASS_REGS1)) return; #if DEBU - fprintf(stderr, "\% YAP regs: P=%p, CP=%p, ASP=%p, H=%p, TR=%p, HeapTop=%p\n", + fprintf(stderr, "%% YAP regs: P=%p, CP=%p, ASP=%p, H=%p, TR=%p, HeapTop=%p\n", P, CP, ASP, HR, TR, HeapTop); #endif - fprintf(stderr, "\% \n% =====================================\n\%\n"); - fprintf(stderr, "\% \n% YAP Status:\n"); - fprintf(stderr, "\% \n\% -------------------------------------\n\%\n"); - yap_error_descriptor_t errno = LOCAL_Error_TYPE; - yap_error_class_number classno = Yap_errorClass(errno); + fprintf(stderr, "%% \n%% =====================================\n%%\n"); + fprintf(stderr, "%% \n%% YAP Status:\n"); + fprintf(stderr, "%% \n%% -------------------------------------\n%%\n"); + yap_error_number errnbr = LOCAL_Error_TYPE; + yap_error_class_number classno = Yap_errorClass(errnbr); - fprintf(stderr, "\% Error STATUS: %s/%s\n\n", Yap_errorName(errno), + fprintf(stderr, "%% Error STATUS: %s/%s\n\n", Yap_errorName(errnbr), Yap_errorName(classno)); - fprintf(stderr, "\% Execution mode\n"); + fprintf(stderr, "%% Execution mode\n"); if (LOCAL_PrologMode & BootMode) - fprintf(stderr, "\% Bootstrap\n"); + fprintf(stderr, "%% Bootstrap\n"); if (LOCAL_PrologMode & UserMode) - fprintf(stderr, "\% User Prolo\n"); + fprintf(stderr, "%% User Prolo\n"); if (LOCAL_PrologMode & CritMode) - fprintf(stderr, "\% Exclusive Access Mode\n"); + fprintf(stderr, "%% Exclusive Access Mode\n"); if (LOCAL_PrologMode & AbortMode) - fprintf(stderr, "\% Abort\n"); + fprintf(stderr, "%% Abort\n"); if (LOCAL_PrologMode & InterruptMode) - fprintf(stderr, "\% Interrupt\n"); + fprintf(stderr, "%% Interrupt\n"); if (LOCAL_PrologMode & InErrorMode) - fprintf(stderr, "\% Error\n"); + fprintf(stderr, "%% Error\n"); if (LOCAL_PrologMode & ConsoleGetcMode) - fprintf(stderr, "\% Prompt Console\n"); + fprintf(stderr, "%% Prompt Console\n"); if (LOCAL_PrologMode & ExtendStackMode) - fprintf(stderr, "\% Stack expansion \n"); + fprintf(stderr, "%% Stack expansion \n"); if (LOCAL_PrologMode & GrowHeapMode) - fprintf(stderr, "\% Data Base Expansion\n"); + fprintf(stderr, "%% Data Base Expansion\n"); if (LOCAL_PrologMode & GrowStackMode) - fprintf(stderr, "\% User Prolog\n"); + fprintf(stderr, "%% User Prolog\n"); if (LOCAL_PrologMode & GCMode) - fprintf(stderr, "\% Garbage Collection\n"); + fprintf(stderr, "%% Garbage Collection\n"); if (LOCAL_PrologMode & ErrorHandlingMode) - fprintf(stderr, "\% Error handler\n"); + fprintf(stderr, "%% Error handler\n"); if (LOCAL_PrologMode & CCallMode) - fprintf(stderr, "\% System Foreign Code\n"); + fprintf(stderr, "%% System Foreign Code\n"); if (LOCAL_PrologMode & UnifyMode) - fprintf(stderr, "\% Off-line Foreign Code\n"); + fprintf(stderr, "%% Off-line Foreign Code\n"); if (LOCAL_PrologMode & UserCCallMode) - fprintf(stderr, "\% User Foreig C\n"); + fprintf(stderr, "%% User Foreig C\n"); if (LOCAL_PrologMode & MallocMode) - fprintf(stderr, "\% Heap Allocaror\n"); + fprintf(stderr, "%% Heap Allocaror\n"); if (LOCAL_PrologMode & SystemMode) - fprintf(stderr, "\% Prolog Internals\n"); + fprintf(stderr, "%% Prolog Internals\n"); if (LOCAL_PrologMode & AsyncIntMode) - fprintf(stderr, "\% Async Interruot mode\n"); + fprintf(stderr, "%% Async Interruot mode\n"); if (LOCAL_PrologMode & InReadlineMode) - fprintf(stderr, "\% Readline Console\n"); + fprintf(stderr, "%% Readline Console\n"); if (LOCAL_PrologMode & TopGoalMode) - fprintf(stderr, "\% Creating new query\n"); - fprintf(stderr, "\% \n\% -------------------------------------\n\%\n"); - fprintf(stderr, "\% \n% YAP Program :\n"); - fprintf(stderr, "\% \n\% -------------------------------------\n\%\n"); - fprintf(stderr, "\% Program Position\n\n", Yap_errorName(errno), - Yap_errorName(classno); - Yap_detect_bug_location(CP, FIND_PRED_FROM_ANYWHERE, 256); - fprintf(stderr, "\% PC: %s\n", (char *)HR); + fprintf(stderr, "%% Creating new query\n"); + fprintf(stderr, "%% \n%% -------------------------------------\n%%\n"); + fprintf(stderr, "%% \n%% YAP Program:\n"); + fprintf(stderr, "%% \n%% -------------------------------------\n%%\n"); + fprintf(stderr, "%% Program Position\n\n", Yap_errorName(errno) ); + fprintf(stderr, "%% PC: %s\n", (char *)HR); Yap_detect_bug_location(CP, FIND_PRED_FROM_ANYWHERE, 256); - fprintf(stderr, "\% Continuation: %s\n", (char *)HR); + fprintf(stderr, "%% Continuation: %s\n", (char *)HR); Yap_detect_bug_location(B->cp_ap, FIND_PRED_FROM_ANYWHERE, 256); - fprintf(stderr, "\% Alternative: %s\n", (char *)HR); + fprintf(stderr, "%% Alternative: %s\n", (char *)HR); + fprintf(stderr, "%% \n%% -------------------------------------\n%%\n"); + fprintf(stderr, "%% \n%% YAP Stack Usage:\n"); + fprintf(stderr, "%% \n%% -------------------------------------\n%%\n"); if (HR > ASP || HR > LCL0) { - fprintf(stderr, "\% YAP ERROR: Global Collided against Local (%p--%p)\n", + fprintf(stderr, "%% YAP ERROR: Global Collided against Local (%p--%p)\n", HR, ASP); } else if (HeapTop > (ADDR)LOCAL_GlobalBase) { fprintf(stderr, - "\% YAP ERROR: Code Space Collided against Global (%p--%p)\n", + "%% YAP ERROR: Code Space Collided against Global (%p--%p)\n", HeapTop, LOCAL_GlobalBase); } else { #if !USE_SYSTEM_MALLOC - fprintf(stderr, "\%ldKB of Code Space (%p--%p)\n", + fprintf(stderr, "%%ldKB of Code Space (%p--%p)\n", (long int)((CELL)HeapTop - (CELL)Yap_HeapBase) / 1024, Yap_HeapBase, HeapTop); #if USE_DL_MALLOC @@ -1885,14 +1886,14 @@ void Yap_dump_stack(void) { } #endif #endif - fprintf(stderr, "\% %luKB of Global Stack (%p--%p)\n", + fprintf(stderr, "%% %luKB of Global Stack (%p--%p)\n", (unsigned long int)(sizeof(CELL) * (HR - H0)) / 1024, H0, HR); - fprintf(stderr, "\% %luKB of Local Stack (%p--%p)\n", + fprintf(stderr, "%% %luKB of Local Stack (%p--%p)\n", (unsigned long int)(sizeof(CELL) * (LCL0 - ASP)) / 1024, ASP, LCL0); - fprintf(stderr, "\% %luKB of Trail (%p--%p)\n", + fprintf(stderr, "%% %luKB of Trail (%p--%p)\n", (unsigned long int)((ADDR)TR - LOCAL_TrailBase) / 1024, LOCAL_TrailBase, TR); - fprintf(stderr, "\% Performed %ld garbage collections\n", + fprintf(stderr, "%% Performed %ld garbage collections\n", (unsigned long int)LOCAL_GcCalls); #if LOW_LEVEL_TRACER { @@ -1907,20 +1908,23 @@ void Yap_dump_stack(void) { } } #endif - fprintf(stderr, "\% All Active Calls and\n"); - fprintf(stderr, "\% Goals With Alternatives Open (Global In " +fprintf(stderr, "%% \n%% -------------------------------------\n%%\n"); +fprintf(stderr, "%% \n%% YAP Stack:\n"); +fprintf(stderr, "%% \n%% -------------------------------------\n%%\n"); + fprintf(stderr, "%% All Active Calls and\n"); + fprintf(stderr, "%% Goals With Alternatives Open (Global In " "Use--Local In Use)\n%%\n"); while (b_ptr != NULL) { while (env_ptr && env_ptr <= (CELL *)b_ptr) { Yap_detect_bug_location(ipc, FIND_PRED_FROM_ENV, 256); if (env_ptr == (CELL *)b_ptr && (choiceptr)env_ptr[E_CB] > b_ptr) { b_ptr = b_ptr->cp_b; - fprintf(stderr, "\% %s\n", tp); + fprintf(stderr, "%% %s\n", tp); } else { fprintf(stderr, "%% %s\n", tp); } if (!max_count--) { - fprintf(stderr, "\% .....\n"); + fprintf(stderr, "%% .....\n"); return; } ipc = (yamop *)(env_ptr[E_CP]); @@ -1928,7 +1932,7 @@ void Yap_dump_stack(void) { } if (b_ptr) { if (!max_count--) { - fprintf(stderr, "\%\** .....\n"); + fprintf(stderr, "%%\** .....\n"); return; } if (b_ptr->cp_ap && /* tabling */ @@ -1937,7 +1941,7 @@ void Yap_dump_stack(void) { b_ptr->cp_ap->opc != Yap_opcode(_Nstop)) { /* we can safely ignore ; because there is always an upper env */ Yap_detect_bug_location(b_ptr->cp_ap, FIND_PRED_FROM_CP, 256); - fprintf(stderr, "\% %s (%luKB--%luKB)\n", tp, + fprintf(stderr, "%% %s (%luKB--%luKB)\n", tp, (unsigned long int)((b_ptr->cp_h - H0) * sizeof(CELL) / 1024), (unsigned long int)((ADDR)LCL0 - (ADDR)b_ptr) / 1024); } @@ -2002,7 +2006,7 @@ void DumpActiveGoals(USES_REGS1) { op_numbers opnum; if (!ONLOCAL(b_ptr) || b_ptr->cp_b == NULL) break; - fprintf(stderr, "\%p ", b_ptr); + fprintf(stderr, "%%p ", b_ptr); pe = Yap_PredForChoicePt(b_ptr, &opnum); if (opnum == _Nstop) { fprintf(stderr, " ********** C-Code Interface Boundary ***********\n"); @@ -2090,15 +2094,15 @@ void Yap_detect_bug_location(yamop *yap_pc, int where_from, int psize) { if ((cl = Yap_PredForCode(yap_pc, where_from, &pred_name, &pred_arity, &pred_module)) == 0) { /* system predicate */ - fprintf(stderr, "\%s", "meta-call"); + fprintf(stderr, "%%s", "meta-call"); } else if (pred_module == 0) { fprintf(stderr, "in prolog:%s/%lu", RepAtom(pred_name)->StrOfAE, (unsigned long int)pred_arity); } else if (cl < 0) { - fprintf(stderr, "\%s:%s/%lu", RepAtom(AtomOfTerm(pred_module))->StrOfAE, + fprintf(stderr, "%%s:%s/%lu", RepAtom(AtomOfTerm(pred_module))->StrOfAE, RepAtom(pred_name)->StrOfAE, (unsigned long int)pred_arity); } else { - fprintf(stderr, "\%s:%s/%lu at clause %lu", + fprintf(stderr, "%%s:%s/%lu at clause %lu", RepAtom(AtomOfTerm(pred_module))->StrOfAE, RepAtom(pred_name)->StrOfAE, (unsigned long int)pred_arity, (unsigned long int)cl); diff --git a/C/yap-args.c b/C/yap-args.c index 41721374b..505f56fb7 100755 --- a/C/yap-args.c +++ b/C/yap-args.c @@ -34,9 +34,9 @@ #endif -#include #include +#include #ifdef _MSC_VER /* Microsoft's Visual C++ Compiler */ #ifdef HAVE_UNISTD_H #undef HAVE_UNISTD_H @@ -160,7 +160,7 @@ static void consult(const char *b_file USES_REGS) { Functor functor_command1 = Yap_MkFunctor(Yap_LookupAtom(":-"), 1); Functor functor_compile2 = Yap_MkFunctor(Yap_LookupAtom("c_compile"), 1); char *full; - + /* consult in C */ int lvl = push_text_stack(); /* the consult mode does not matter here, really */ @@ -316,7 +316,7 @@ static void Yap_set_locations(YAP_init_args *iap) { /// BOOTPLDIR: where we can find Prolog bootstrap files Yap_BOOTSTRAP = sel(true, iap->BOOTSTRAP != NULL, iap->BOOTSTRAP, true, #if __ANDROID__ - "/assets/Yap/pl/boot.yap", + "/assets/Yap/pl/boot,yap", #else join(getenv("DESTDIR"), YAP_BOOTSTRAP), #endif @@ -976,6 +976,8 @@ static void end_init(YAP_init_args *iap) { YAP_initialized = true; if (iap->HaltAfterBoot) Yap_exit(0); LOCAL_PrologMode &= ~BootMode; + CurrentModule = USER_MODULE; + } static void start_modules(void) { @@ -1012,7 +1014,7 @@ X_API void YAP_Init(YAP_init_args *yap_init) { // CACHE_REGS - + if (yap_init->QuietMode) { setVerbosity(TermSilent); } @@ -1044,19 +1046,15 @@ X_API void YAP_Init(YAP_init_args *yap_init) { init_globals(yap_init); start_modules(); - setAtomicGlobalPrologFlag(RESOURCE_DATABASE_FLAG, - MkAtomTerm(Yap_LookupAtom(Yap_INPUT_STARTUP))); - setBooleanGlobalPrologFlag(SAVED_PROGRAM_FLAG, true); - } - YAP_RunGoalOnce(TermInitProlog); - - if (yap_init->install && Yap_OUTPUT_STARTUP) { + consult(Yap_BOOTFILE PASS_REGS); + if (yap_init->install && Yap_OUTPUT_STARTUP) { Term t = MkAtomTerm(Yap_LookupAtom(Yap_OUTPUT_STARTUP)); Term g = Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("qsave_program"), 1), 1, &t); YAP_RunGoalOnce(g); } + } end_init(yap_init); } diff --git a/CXX/yapdb.hh b/CXX/yapdb.hh index 6da81eb24..eddbef28e 100644 --- a/CXX/yapdb.hh +++ b/CXX/yapdb.hh @@ -99,9 +99,9 @@ protected: /// Just do nothing. inline YAPPredicate() { } - YAPPredicate(Term &to, Term &tmod, CELL * &ts, const char *pname); + /// Term constructor for predicates /// /// It is just a call to getPred @@ -110,7 +110,7 @@ protected: ap = getPred(t, v); } } - + inline YAPPredicate(Term t) { if (t) { CELL *v = nullptr; diff --git a/include/YapErrors.h b/include/YapErrors.h index 4405536e3..484df0451 100644 --- a/include/YapErrors.h +++ b/include/YapErrors.h @@ -152,6 +152,11 @@ E(SYSTEM_ERROR_FATAL, SYSTEM_ERROR_CLASS, "fatal") E(SYSTEM_ERROR_GET_FAILED, SYSTEM_ERROR_CLASS, "get_failed") E(SYSTEM_ERROR_PUT_FAILED, SYSTEM_ERROR_CLASS, "put_failed") E(SYSTEM_ERROR_JIT_NOT_AVAILABLE, SYSTEM_ERROR_CLASS, "jit_not_available") +E(SYSTEM_ERROR_RUNTIME_ANDROID, SYSTEM_ERROR_CLASS, "android_runtime error") +E(SYSTEM_ERROR_RUNTIME_JAVA, SYSTEM_ERROR_CLASS, "java_runtime error") +E(SYSTEM_ERROR_RUNTIME_JS, SYSTEM_ERROR_CLASS, "javascript_runtime error") +E(SYSTEM_ERROR_RUNTIME_PYTHON, SYSTEM_ERROR_CLASS, "python_runtime error") +E(SYSTEM_ERROR_RUNTIME_R, SYSTEM_ERROR_CLASS, "r_runtime error") E(SYSTEM_ERROR_OPERATING_SYSTEM, SYSTEM_ERROR_CLASS, "operating_system_error") E(SYSTEM_ERROR_SAVED_STATE, SYSTEM_ERROR_CLASS, "saved_state_error") diff --git a/packages/python/pyio.c b/packages/python/pyio.c index 0bcfdf31b..d748fac32 100644 --- a/packages/python/pyio.c +++ b/packages/python/pyio.c @@ -132,13 +132,9 @@ static bool py_close(int sno) { static bool getLine(StreamDesc *rl_iostream, int sno) { char *myrl_line = NULL; term_t ctk = python_acquire_GIL(); - Py_ssize_t size; - PyObject *prompt = PyUnicode_FromString("?- "), - *msg = PyUnicode_FromString(" **input** "), - *o = PyObject_GetAttrString(rl_iostream->u.private_data, "read"); + /* window of vulnerability opened */ - myrl_line = PyUnicode_AsUTF8AndSize( - PyObject_CallFunctionObjArgs(o, msg, prompt, NULL), &size); + myrl_line = PyUnicode_AsUTF8(PyObject_CallFunctionObjArgs(rl_iostream->u.private_data, NULL)); python_release_GIL(ctk); PyObject *err; if ((err = PyErr_Occurred())) { @@ -147,6 +143,7 @@ static bool getLine(StreamDesc *rl_iostream, int sno) { "Error in getLine\n"); Yap_ThrowError(SYSTEM_ERROR_GET_FAILED, YAP_MkIntTerm(sno), err); } + size_t size = strlen (myrl_line)+1; rl_iostream->u.irl.ptr = rl_iostream->u.irl.buf = (const unsigned char *)malloc(size); memcpy((void *)rl_iostream->u.irl.buf, myrl_line, size);