Merge ssh://ssh.dcc.fc.up.pt:31064/home/vsc/yap
This commit is contained in:
		
							
								
								
									
										47
									
								
								CXX/yapi.cpp
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								CXX/yapi.cpp
									
									
									
									
									
								
							| @@ -34,6 +34,7 @@ X_API bool do_init_python(void); | |||||||
| YAPPredicate::YAPPredicate(Term &t, Term &tmod, CELL *&ts, const char *pname) { | YAPPredicate::YAPPredicate(Term &t, Term &tmod, CELL *&ts, const char *pname) { | ||||||
|   Term t0 = t; |   Term t0 = t; | ||||||
|   ap = nullptr; |   ap = nullptr; | ||||||
|  |   Yap_DebugPlWriteln(t); | ||||||
| restart: | restart: | ||||||
|   if (IsVarTerm(t)) { |   if (IsVarTerm(t)) { | ||||||
|     throw YAPError(SOURCE(), INSTANTIATION_ERROR, t0, pname); |     throw YAPError(SOURCE(), INSTANTIATION_ERROR, t0, pname); | ||||||
| @@ -49,7 +50,8 @@ restart: | |||||||
|   } else if (IsApplTerm(t)) { |   } else if (IsApplTerm(t)) { | ||||||
|     Functor fun = FunctorOfTerm(t); |     Functor fun = FunctorOfTerm(t); | ||||||
|     if (IsExtensionFunctor(fun)) { |     if (IsExtensionFunctor(fun)) { | ||||||
|       throw YAPError( SOURCE(), TYPE_ERROR_CALLABLE, Yap_PredicateIndicator(t, tmod), pname); |       throw YAPError(SOURCE(), TYPE_ERROR_CALLABLE, | ||||||
|  |                      Yap_PredicateIndicator(t, tmod), pname); | ||||||
|     } |     } | ||||||
|     if (fun == FunctorModule) { |     if (fun == FunctorModule) { | ||||||
|       tmod = ArgOfTerm(1, t); |       tmod = ArgOfTerm(1, t); | ||||||
| @@ -319,7 +321,6 @@ std::vector<Term> YAPPairTerm::listToArray() { | |||||||
|   return o; |   return o; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| YAP_tag_t YAPTerm::tag() { | YAP_tag_t YAPTerm::tag() { | ||||||
|   Term tt = gt(); |   Term tt = gt(); | ||||||
|   if (IsVarTerm(tt)) { |   if (IsVarTerm(tt)) { | ||||||
| @@ -487,7 +488,8 @@ bool YAPEngine::call(YAPPredicate ap, YAPTerm ts[]) { | |||||||
|  |  | ||||||
|   if (LOCAL_CommittedError != nullptr) { |   if (LOCAL_CommittedError != nullptr) { | ||||||
|     std::cerr << "Exception received by  " << __func__ << "( " |     std::cerr << "Exception received by  " << __func__ << "( " | ||||||
|               << YAPError( LOCAL_CommittedError).text() << ").\n Forwarded...\n\n"; |               << YAPError(LOCAL_CommittedError).text() | ||||||
|  |               << ").\n Forwarded...\n\n"; | ||||||
|     // Yap_PopTermFromDB(info->errorTerm); |     // Yap_PopTermFromDB(info->errorTerm); | ||||||
|     // throw  throw YAPError( SOURCE(), ); |     // throw  throw YAPError( SOURCE(), ); | ||||||
|   } |   } | ||||||
| @@ -508,8 +510,10 @@ bool YAPEngine::mgoal(Term t, Term tmod) { | |||||||
|   try { |   try { | ||||||
|     if (IsStringTerm(tmod)) |     if (IsStringTerm(tmod)) | ||||||
|       tmod = MkAtomTerm(Yap_LookupAtom(StringOfTerm(tmod))); |       tmod = MkAtomTerm(Yap_LookupAtom(StringOfTerm(tmod))); | ||||||
|     PredEntry *ap = (new YAPPredicate(t, tmod, ts, "C++"))->ap; |     YAPPredicate *p = new YAPPredicate(t, tmod, ts, "C++"); | ||||||
|     if (ap == nullptr || ap->OpcodeOfPred == UNDEF_OPCODE) { |     PredEntry *ap = nullptr; | ||||||
|  |     if (p == nullptr || (ap = p->ap) == nullptr || | ||||||
|  |         ap->OpcodeOfPred == UNDEF_OPCODE) { | ||||||
|       ap = rewriteUndefEngineQuery(ap, t, tmod); |       ap = rewriteUndefEngineQuery(ap, t, tmod); | ||||||
|     } |     } | ||||||
|     if (IsApplTerm(t)) |     if (IsApplTerm(t)) | ||||||
| @@ -538,6 +542,10 @@ bool YAPEngine::mgoal(Term t, Term tmod) { | |||||||
|     } |     } | ||||||
|     { |     { | ||||||
|       YAP_LeaveGoal(result, &q); |       YAP_LeaveGoal(result, &q); | ||||||
|  |       if (LOCAL_CommittedError != nullptr && | ||||||
|  |           LOCAL_CommittedError->errorNo != YAP_NO_ERROR) { | ||||||
|  |         throw YAPError(LOCAL_CommittedError); | ||||||
|  |       } | ||||||
|       //      PyEval_RestoreThread(_save); |       //      PyEval_RestoreThread(_save); | ||||||
|       RECOVER_MACHINE_REGS(); |       RECOVER_MACHINE_REGS(); | ||||||
|       return result; |       return result; | ||||||
| @@ -546,7 +554,12 @@ bool YAPEngine::mgoal(Term t, Term tmod) { | |||||||
|     if (LOCAL_CommittedError != nullptr && |     if (LOCAL_CommittedError != nullptr && | ||||||
|         LOCAL_CommittedError->errorNo != YAP_NO_ERROR) { |         LOCAL_CommittedError->errorNo != YAP_NO_ERROR) { | ||||||
|       std::cerr << "Exception received by  " << __func__ << "( " |       std::cerr << "Exception received by  " << __func__ << "( " | ||||||
|               <<  YAPError( LOCAL_CommittedError).text() << ").\n Forwarded...\n\n"; |                 << YAPError(LOCAL_CommittedError).text() | ||||||
|  |                 << ").\n Forwarded...\n\n"; | ||||||
|  |       YAP_LeaveGoal(result, &q); | ||||||
|  |  | ||||||
|  |       // free(LOCAL_CommittedError); | ||||||
|  |       return false; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -606,7 +619,8 @@ Term YAPEngine::fun(Term t) { | |||||||
|   bool result = (bool)YAP_EnterGoal(ap, nullptr, &q); |   bool result = (bool)YAP_EnterGoal(ap, nullptr, &q); | ||||||
|   if (LOCAL_CommittedError != nullptr) { |   if (LOCAL_CommittedError != nullptr) { | ||||||
|     std::cerr << "Exception received by  " << __func__ << "( " |     std::cerr << "Exception received by  " << __func__ << "( " | ||||||
|               <<  YAPError(  LOCAL_CommittedError).text() << ").\n Forwarded...\n\n"; |               << YAPError(LOCAL_CommittedError).text() | ||||||
|  |               << ").\n Forwarded...\n\n"; | ||||||
|     // Yap_PopTermFromDB(info->errorTerm); |     // Yap_PopTermFromDB(info->errorTerm); | ||||||
|     // throw  throw YAPError( SOURCE(), ); |     // throw  throw YAPError( SOURCE(), ); | ||||||
|   } |   } | ||||||
| @@ -912,8 +926,8 @@ PredEntry *YAPPredicate::getPred(YAPTerm &tt, CELL *&outp) { | |||||||
|   Term m = Yap_CurrentModule(), t = tt.term(); |   Term m = Yap_CurrentModule(), t = tt.term(); | ||||||
|   t = Yap_StripModule(t, &m); |   t = Yap_StripModule(t, &m); | ||||||
|  |  | ||||||
|     std::cerr << "Exception received by  " << __func__ << "( " |   std::cerr << "Exception received by  " << __func__ << "( " << tt.text() | ||||||
|               << tt.text() << ").\n Forwarded...\n\n"; |             << ").\n Forwarded...\n\n"; | ||||||
|  |  | ||||||
|   if (IsVarTerm(t) || IsNumTerm(t)) { |   if (IsVarTerm(t) || IsNumTerm(t)) { | ||||||
|     if (IsVarTerm(t)) |     if (IsVarTerm(t)) | ||||||
| @@ -1002,7 +1016,10 @@ void *YAPPrologPredicate::retractClause(YAPTerm skeleton, bool all) { | |||||||
|  |  | ||||||
| std::string YAPError::text() { | std::string YAPError::text() { | ||||||
|   char buf[256]; |   char buf[256]; | ||||||
|   std::string s = ""; |   return "Error"; | ||||||
|  | #if 0 | ||||||
|  | std::stringstream s; | ||||||
|  |   s << ""; | ||||||
|   if (info->errorNo == YAP_NO_ERROR) |   if (info->errorNo == YAP_NO_ERROR) | ||||||
|     return 0; |     return 0; | ||||||
|       if (info->errorFunction) { |       if (info->errorFunction) { | ||||||
| @@ -1012,21 +1029,19 @@ std::string YAPError::text() { | |||||||
|     s += buf; |     s += buf; | ||||||
|     s += ":0 in C-code"; |     s += ":0 in C-code"; | ||||||
|   } |   } | ||||||
|  |   return s; | ||||||
|   if (info->prologPredLine) { |   if (info->prologPredLine) { | ||||||
|     s += "\n"; |     s += "\n"; | ||||||
|     s += info->prologPredFile; |     s += info->prologPredFile; | ||||||
|     s += ":"; |     s += ":"; | ||||||
|     sprintf(buf, "%ld", (long int)info->prologPredLine); |     s << info->prologPredLine; | ||||||
|     s += buf; // std::to_string(info->prologPredLine) ; |  | ||||||
|     // YAPIntegerTerm(info->prologPredLine).text(); |     // YAPIntegerTerm(info->prologPredLine).text(); | ||||||
|     s += ":0   "; |     s += ":0   "; | ||||||
|     s += info->prologPredModule; |     s += info->prologPredModule; | ||||||
|     s += ":"; |     s += ":"; | ||||||
|     s += (info->prologPredName); |     s += (info->prologPredName); | ||||||
|     s += "/"; |     s += "/"; | ||||||
|     sprintf(buf, "%ld", (long int)info->prologPredArity); |     s << info->prologPredArity; | ||||||
|     s += // std::to_string(info->prologPredArity); |  | ||||||
|         buf; |  | ||||||
|   } |   } | ||||||
|   s += " error "; |   s += " error "; | ||||||
|   if (info->classAsText == nullptr) |   if (info->classAsText == nullptr) | ||||||
| @@ -1041,6 +1056,7 @@ std::string YAPError::text() { | |||||||
|   s += ".\n"; |   s += ".\n"; | ||||||
|   //      printf("%s\n", s.c_str()); |   //      printf("%s\n", s.c_str()); | ||||||
|   return s.c_str(); |   return s.c_str(); | ||||||
|  | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
| void YAPEngine::reSet() { | void YAPEngine::reSet() { | ||||||
| @@ -1063,7 +1079,6 @@ void YAPEngine::reSet() { | |||||||
|   RECOVER_MACHINE_REGS(); |   RECOVER_MACHINE_REGS(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| Term YAPEngine::top_level(std::string s) { | Term YAPEngine::top_level(std::string s) { | ||||||
|   /// parse string s and make term with var names |   /// parse string s and make term with var names | ||||||
|   /// available. |   /// available. | ||||||
|   | |||||||
							
								
								
									
										183
									
								
								H/YapGFlagInfo.h
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								H/YapGFlagInfo.h
									
									
									
									
									
								
							| @@ -8,10 +8,8 @@ | |||||||
|  *									 * |  *									 * | ||||||
|  ************************************************************************** |  ************************************************************************** | ||||||
|  *									 * |  *									 * | ||||||
|  * File:		YapGFlagInfo.h						 * |  * File:		YapGFlagInfo.h * Last rev: | ||||||
|  * Last rev:								 * |  ** mods: * comments:	global flag enumeration. * | ||||||
|  * mods:									 * |  | ||||||
|  * comments:	global flag enumeration.				 * |  | ||||||
|  *									 * |  *									 * | ||||||
|  *************************************************************************/ |  *************************************************************************/ | ||||||
|  |  | ||||||
| @@ -26,47 +24,53 @@ | |||||||
|  |  | ||||||
| START_GLOBAL_FLAGS | START_GLOBAL_FLAGS | ||||||
|  |  | ||||||
|   /** | YAP_FLAG(ADDRESS_BITS_FLAG, "address_bits", false, nat, BITNESS, NULL), /**< | ||||||
|      `address_bits` |        Number of address bits in the machine, either 64 or 32 bits. | ||||||
|      Number of address bits in the machine, either 64 or 32 bits |  | ||||||
|   */ |   */ | ||||||
|   YAP_FLAG(ADDRESS_BITS_FLAG, "address_bits", false, nat, BITNESS, NULL), |  | ||||||
|  |  | ||||||
|   /**< `agc_margin` |     YAP_FLAG(AGC_MARGIN_FLAG, "agc_margin", true, nat, "10000", | ||||||
|  |              agc_threshold), /**< | ||||||
|  |  | ||||||
| An integer: if this amount of atoms has been created since the last | An integer: if this amount of atoms has been created since the last | ||||||
| atom-garbage collection, perform atom garbage collection at the first | atom-garbage collection, perform atom garbage collection at the first | ||||||
| opportunity. Initial value is 10,000. May be changed. A value of 0 | opportunity. Initial value is 10,000. May be changed. A value of 0 | ||||||
| (zero) disables atom garbage collection. | (zero) disables atom garbage collection. | ||||||
| */ | */ | ||||||
|   YAP_FLAG(AGC_MARGIN_FLAG, "agc_margin", true, nat, "10000", |  | ||||||
| 	   agc_threshold), |  | ||||||
|  |  | ||||||
|   /**< `allow_assert_for_static_predicates` allow asserting and retracting clauses of static |  | ||||||
|      predicates. */ |  | ||||||
|     YAP_FLAG(ALLOW_ASSERT_FOR_STATIC_PREDICATES, |     YAP_FLAG(ALLOW_ASSERT_FOR_STATIC_PREDICATES, | ||||||
|              "allow_assert_for_static_predicates", true, booleanFlag, "true", |              "allow_assert_for_static_predicates", true, booleanFlag, "true", | ||||||
| 	   NULL), |              NULL), /**< | ||||||
|  |              boolean: allow asserting and retracting clauses of static | ||||||
|  |              predicates. */ | ||||||
|  |  | ||||||
|   /**<  `allow_variable_name_as_functor` boolean flag allows constructs such as |     YAP_FLAG(ALLOW_VARIABLE_NAME_AS_FUNCTOR_FLAG, | ||||||
|  |              "allow_variable_name_as_functor", false, booleanFlag, "false", | ||||||
|  |              NULL), /**< | ||||||
|  |  | ||||||
|  |               boolean flag allows syntax such | ||||||
|  |               as | ||||||
|               ~~~ |               ~~~ | ||||||
|               Tree(Node(L,node,R)) :- |               Tree(Node(L,node,R)) :- | ||||||
|                    Tree(L), |                    Tree(L), | ||||||
|               Tree(R). |               Tree(R). | ||||||
|               ~~~ |               ~~~ | ||||||
|            */ |            */ | ||||||
|   YAP_FLAG(  ALLOW_VARIABLE_NAME_AS_FUNCTOR_FLAG, "allow_variable_name_as_functor", false, booleanFlag, "false", NULL), |  | ||||||
|  |  | ||||||
|     /**<  `answer_format` how to present answers, default is `~p`. */ |     /**<  `answer_format` how to present answers, default is `~p`. */ | ||||||
|   YAP_FLAG(ANSWER_FORMAT_FLAG, "answer_format", true, isatom, "~p", |     YAP_FLAG(ANSWER_FORMAT_FLAG, "answer_format", true, isatom, "~p", NULL), | ||||||
| 	   NULL), |  | ||||||
| #if __APPLE__ | #if __APPLE__ | ||||||
|   /**< |     YAP_FLAG(APPLE_FLAG, "apple", false, booleanFlag, "true", NULL), /**< | ||||||
|      `apple`: read-only boolean, a machine running an Apple Operating System * |     `read-only boolean, a machine running an Apple Operating System * | ||||||
|   */ |  * | ||||||
|   YAP_FLAG(APPLE_FLAG, "apple", false, booleanFlag, "true", |  | ||||||
| 	   NULL), |  | ||||||
| #endif | #endif | ||||||
|   YAP_FLAG(ARCH_FLAG, "arch", false, isatom, YAP_ARCH, NULL), |  | ||||||
|  |  | ||||||
|  |     YAP_FLAG(ARCH_FLAG, "arch", false, isatom, YAP_ARCH, NULL),/**< | ||||||
|  |     `apple`: read-only atom, it describes the ISA used in this version of YAP. | ||||||
|  |     Available from YAP_AEH. | ||||||
|  |     */ | ||||||
|  |  | ||||||
|     YAP_FLAG(ARGV_FLAG, "argv", false, argv, "@boot", NULL), |     YAP_FLAG(ARGV_FLAG, "argv", false, argv, "@boot", NULL), | ||||||
|     /**< `arithmetic_exceptions` |     /**< `arithmetic_exceptions` | ||||||
|  |  | ||||||
| @@ -103,8 +107,7 @@ | |||||||
|     on whether YAP uses the GMP library or not. |     on whether YAP uses the GMP library or not. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|   YAP_FLAG(BOUNDED_FLAG, "bounded", false, booleanFlag, "false", |     YAP_FLAG(BOUNDED_FLAG, "bounded", false, booleanFlag, "false", NULL), | ||||||
| 	   NULL), |  | ||||||
|     YAP_FLAG(C_CC_FLAG, "c_cc", false, isatom, C_CC, NULL), |     YAP_FLAG(C_CC_FLAG, "c_cc", false, isatom, C_CC, NULL), | ||||||
|     YAP_FLAG(C_CFLAGS_FLAG, "c_cflags", false, isatom, C_CFLAGS, NULL), |     YAP_FLAG(C_CFLAGS_FLAG, "c_cflags", false, isatom, C_CFLAGS, NULL), | ||||||
|     YAP_FLAG(C_LDFLAGS_FLAG, "c_ldflags", false, isatom, C_LDFLAGS, NULL), |     YAP_FLAG(C_LDFLAGS_FLAG, "c_ldflags", false, isatom, C_LDFLAGS, NULL), | ||||||
| @@ -129,8 +132,8 @@ | |||||||
|              true, booleanFlag, "true", NULL), |              true, booleanFlag, "true", NULL), | ||||||
|     /**< `compiled_at ` |     /**< `compiled_at ` | ||||||
|  |  | ||||||
|      Read-only flag that gives the time when the main YAP binary was compiled. It is |     Read-only flag that gives the time when the main YAP binary was compiled. It | ||||||
|      obtained staight from the __TIME__ macro, as defined in the C99. |     is obtained staight from the __TIME__ macro, as defined in the C99. | ||||||
|  */ |  */ | ||||||
|     YAP_FLAG(COMPILED_AT_FLAG, "compiled_at", false, isatom, YAP_COMPILED_AT, |     YAP_FLAG(COMPILED_AT_FLAG, "compiled_at", false, isatom, YAP_COMPILED_AT, | ||||||
|              NULL), |              NULL), | ||||||
| @@ -140,8 +143,7 @@ | |||||||
|     `false`. If  _Value_ is bound to `true` enable debugging, and if |     `false`. If  _Value_ is bound to `true` enable debugging, and if | ||||||
|     it is bound to `false` disable debugging. |     it is bound to `false` disable debugging. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(DEBUG_FLAG, "debug", true, booleanFlag, "false", |     YAP_FLAG(DEBUG_FLAG, "debug", true, booleanFlag, "false", NULL), | ||||||
| 	   NULL), |  | ||||||
|     YAP_FLAG(DEBUG_INFO_FLAG, "debug_info", true, booleanFlag, "true", NULL), |     YAP_FLAG(DEBUG_INFO_FLAG, "debug_info", true, booleanFlag, "true", NULL), | ||||||
|     YAP_FLAG(DEBUG_ON_ERROR_FLAG, "debug_on_error", true, booleanFlag, "true", |     YAP_FLAG(DEBUG_ON_ERROR_FLAG, "debug_on_error", true, booleanFlag, "true", | ||||||
|              NULL), |              NULL), | ||||||
| @@ -160,13 +162,12 @@ | |||||||
|  |  | ||||||
|     Read-only flag that always returns `yap`. |     Read-only flag that always returns `yap`. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(DIALECT_FLAG, "dialect", false, ro, "yap", |     YAP_FLAG(DIALECT_FLAG, "dialect", false, ro, "yap", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `discontiguous_warnings ` |     /**< `discontiguous_warnings ` | ||||||
|  |  | ||||||
|      If `true` (default `true`) YAP checks for definitions of the same predicate that |     If `true` (default `true`) YAP checks for definitions of the same predicate | ||||||
|      are separated by clauses for other predicates. This may indicate that different |     that are separated by clauses for other predicates. This may indicate that | ||||||
|      procedures have the same name. |     different procedures have the same name. | ||||||
|  |  | ||||||
|     The declaration discontiguous/1 disables this warning for user-specified |     The declaration discontiguous/1 disables this warning for user-specified | ||||||
|     predicates. |     predicates. | ||||||
| @@ -180,24 +181,21 @@ | |||||||
|     `on` consider `$` a lower case character. |     `on` consider `$` a lower case character. | ||||||
|  */ |  */ | ||||||
|     YAP_FLAG(DOLLAR_AS_LOWER_CASE_FLAG, "dollar_as_lower_case", true, |     YAP_FLAG(DOLLAR_AS_LOWER_CASE_FLAG, "dollar_as_lower_case", true, | ||||||
| 	   booleanFlag, "false", |              booleanFlag, "false", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `double_quotes is iso ` |     /**< `double_quotes is iso ` | ||||||
|  |  | ||||||
|     If  _Value_ is unbound, tell whether a double quoted list of characters |     If  _Value_ is unbound, tell whether a double quoted list of characters | ||||||
|     token is converted to a list of atoms, `chars`, to a list of integers, |     token is converted to a list of atoms, `chars`, to a list of integers, | ||||||
|     `codes`, or to a single atom, `atom`. If  _Value_ is bound, set to |     `codes`, or to a single atom, `atom`. If  _Value_ is bound, set to | ||||||
|     the corresponding behavior. The default value is `codes`. */ |     the corresponding behavior. The default value is `codes`. */ | ||||||
|   YAP_FLAG(DOUBLE_QUOTES_FLAG, "double_quotes", true, isatom, "codes", |     YAP_FLAG(DOUBLE_QUOTES_FLAG, "double_quotes", true, isatom, "codes", dqs), | ||||||
| 	   dqs), |  | ||||||
|     YAP_FLAG(EDITOR_FLAG, "editor", true, isatom, "$EDITOR", NULL), |     YAP_FLAG(EDITOR_FLAG, "editor", true, isatom, "$EDITOR", NULL), | ||||||
|     /**< `executable ` |     /**< `executable ` | ||||||
|  |  | ||||||
|     Read-only flag. It unifies with an atom that gives the |     Read-only flag. It unifies with an atom that gives the | ||||||
|     original program path. |     original program path. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(EXECUTABLE_FLAG, "executable", false, executable, "@boot", |     YAP_FLAG(EXECUTABLE_FLAG, "executable", false, executable, "@boot", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `fast ` |     /**< `fast ` | ||||||
|  |  | ||||||
|     If `on` allow fast machine code, if `off` (default) disable it. Only |     If `on` allow fast machine code, if `off` (default) disable it. Only | ||||||
| @@ -215,8 +213,7 @@ | |||||||
|     printed, `%g` will print all floats using 6 digits instead of the |     printed, `%g` will print all floats using 6 digits instead of the | ||||||
|     default 15. |     default 15. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(FLOAT_FORMAT_FLAG, "float_format", true, isatom, "%.16f", |     YAP_FLAG(FLOAT_FORMAT_FLAG, "float_format", true, isatom, "%.16f", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `gc` |     /**< `gc` | ||||||
|  |  | ||||||
|     If `on` allow garbage collection (default), if `off` disable it. |     If `on` allow garbage collection (default), if `off` disable it. | ||||||
| @@ -228,8 +225,7 @@ | |||||||
|     collection. The default depends on total stack size. |     collection. The default depends on total stack size. | ||||||
|  |  | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(GC_MARGIN_FLAG, "gc_margin", true, nat, "0", |     YAP_FLAG(GC_MARGIN_FLAG, "gc_margin", true, nat, "0", gc_margin), | ||||||
| 	   gc_margin), |  | ||||||
|     /**< `gc_trace ` |     /**< `gc_trace ` | ||||||
|  |  | ||||||
|     If `off` (default) do not show information on garbage collection |     If `off` (default) do not show information on garbage collection | ||||||
| @@ -239,8 +235,7 @@ | |||||||
|     information on data-structures found during the garbage collection |     information on data-structures found during the garbage collection | ||||||
|     process, namely, on choice-points. |     process, namely, on choice-points. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(GC_TRACE_FLAG, "gc_trace", true, isatom, "off", |     YAP_FLAG(GC_TRACE_FLAG, "gc_trace", true, isatom, "off", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `generate_debug_info ` |     /**< `generate_debug_info ` | ||||||
|  |  | ||||||
|     If `true` (default) generate debugging information for |     If `true` (default) generate debugging information for | ||||||
| @@ -265,8 +260,7 @@ | |||||||
|     Return `configure` system information, including the machine-id |     Return `configure` system information, including the machine-id | ||||||
|     for which YAP was compiled and Operating System information. |     for which YAP was compiled and Operating System information. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(HOST_TYPE_FLAG, "host_type", false, isatom, HOST_ALIAS, |     YAP_FLAG(HOST_TYPE_FLAG, "host_type", false, isatom, HOST_ALIAS, NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `index ` |     /**< `index ` | ||||||
|  |  | ||||||
|     If `on` allow indexing (default), if `off` disable it, if |     If `on` allow indexing (default), if `off` disable it, if | ||||||
| @@ -275,7 +269,8 @@ | |||||||
|     YAP_FLAG(INDEX_FLAG, "index", true, indexer, "multi", NULL), |     YAP_FLAG(INDEX_FLAG, "index", true, indexer, "multi", NULL), | ||||||
|     /**< `Index_sub_term_search_depth ` |     /**< `Index_sub_term_search_depth ` | ||||||
|  |  | ||||||
|      Maximum bound on searching sub-terms for indexing, if `0` (default) no bound. |     Maximum bound on searching sub-terms for indexing, if `0` (default) no | ||||||
|  |     bound. | ||||||
|  */ |  */ | ||||||
|     YAP_FLAG(INDEX_SUB_TERM_SEARCH_DEPTH_FLAG, "index_sub_term_search_depth", |     YAP_FLAG(INDEX_SUB_TERM_SEARCH_DEPTH_FLAG, "index_sub_term_search_depth", | ||||||
|              true, nat, "0", NULL), |              true, nat, "0", NULL), | ||||||
| @@ -290,12 +285,11 @@ | |||||||
|              isatom, "normal", NULL), |              isatom, "normal", NULL), | ||||||
|     /**< `integer_rounding_function is iso ` |     /**< `integer_rounding_function is iso ` | ||||||
|  |  | ||||||
|      Read-only flag telling the rounding function used for integers. Takes the value |     Read-only flag telling the rounding function used for integers. Takes the | ||||||
|      `toward_zero` for the current version of YAP. |     value `toward_zero` for the current version of YAP. | ||||||
|  */ |  */ | ||||||
|     YAP_FLAG(INTEGER_ROUNDING_FUNCTION_FLAG, "integer_rounding_function", true, |     YAP_FLAG(INTEGER_ROUNDING_FUNCTION_FLAG, "integer_rounding_function", true, | ||||||
| 	   isatom, "toward_zero", |              isatom, "toward_zero", NULL), | ||||||
| 	   NULL), |  | ||||||
|     YAP_FLAG(ISO_FLAG, "iso", true, booleanFlag, "false", NULL), |     YAP_FLAG(ISO_FLAG, "iso", true, booleanFlag, "false", NULL), | ||||||
|     /**< `language ` |     /**< `language ` | ||||||
|  |  | ||||||
| @@ -306,21 +300,23 @@ | |||||||
|     are interpreted, when to use dynamic, character escapes, and how files |     are interpreted, when to use dynamic, character escapes, and how files | ||||||
|     are consulted. Also check the `dialect` option. |     are consulted. Also check the `dialect` option. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(LANGUAGE_FLAG, "language", true, isatom, "yap", |     YAP_FLAG(LANGUAGE_FLAG, "language", true, isatom, "yap", NULL), | ||||||
| 	   NULL), |     /**< if defined, first location where YAP expects to find the YAP Prolog | ||||||
|   /**< if defined, first location where YAP expects to find the YAP Prolog library. Takes precedence over library_directory */ |        library. Takes precedence over library_directory */ | ||||||
|   YAP_FLAG(PROLOG_LIBRARY_DIRECTORY_FLAG, "prolog_library_directory", true, isatom, "", NULL), |     YAP_FLAG(PROLOG_LIBRARY_DIRECTORY_FLAG, "prolog_library_directory", true, | ||||||
|  |              isatom, "", NULL), | ||||||
|  |  | ||||||
|   /**< if defined, first location where YAP expects to find the YAP Prolog shared libraries (DLLS). Takes precedence over executable_directory/2. */ |     /**< if defined, first location where YAP expects to find the YAP Prolog | ||||||
|   YAP_FLAG(PROLOG_FOREIGN_DIRECTORY_FLAG, "prolog_foreign_directory", true, isatom, "", NULL), |        shared libraries (DLLS). Takes precedence over executable_directory/2. */ | ||||||
|  |     YAP_FLAG(PROLOG_FOREIGN_DIRECTORY_FLAG, "prolog_foreign_directory", true, | ||||||
|  |              isatom, "", NULL), | ||||||
|  |  | ||||||
|     /**< `max_arity is iso ` |     /**< `max_arity is iso ` | ||||||
|  |  | ||||||
|     Read-only flag telling the maximum arity of a functor. Takes the value |     Read-only flag telling the maximum arity of a functor. Takes the value | ||||||
|     `unbounded` for the current version of YAP. |     `unbounded` for the current version of YAP. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(MAX_ARITY_FLAG, "max_arity", false, isatom, "unbounded", |     YAP_FLAG(MAX_ARITY_FLAG, "max_arity", false, isatom, "unbounded", NULL), | ||||||
| 	   NULL), |  | ||||||
|     YAP_FLAG(MAX_TAGGED_INTEGER_FLAG, "max_tagged_integer", false, at2n, |     YAP_FLAG(MAX_TAGGED_INTEGER_FLAG, "max_tagged_integer", false, at2n, | ||||||
|              "INT_MAX", NULL), |              "INT_MAX", NULL), | ||||||
|     YAP_FLAG(MAX_THREADS_FLAG, "max_threads", false, at2n, "MAX_THREADS", NULL), |     YAP_FLAG(MAX_THREADS_FLAG, "max_threads", false, at2n, "MAX_THREADS", NULL), | ||||||
| @@ -365,19 +361,18 @@ | |||||||
|  |  | ||||||
|     If `off` (default) do not compile call counting information for |     If `off` (default) do not compile call counting information for | ||||||
|     procedures. If `on` compile predicates so that they calls and |     procedures. If `on` compile predicates so that they calls and | ||||||
|      retries to the predicate may be counted. Profiling data can be read through the |     retries to the predicate may be counted. Profiling data can be read through | ||||||
|      call_count_data/3 built-in. |     the call_count_data/3 built-in. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(PROFILING_FLAG, "profiling", true, booleanFlag, "false", |     YAP_FLAG(PROFILING_FLAG, "profiling", true, booleanFlag, "false", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `prompt_alternatives_on(atom, |     /**< `prompt_alternatives_on(atom, | ||||||
|     changeable) ` |     changeable) ` | ||||||
|  |  | ||||||
|     SWI-Compatible option, determines prompting for alternatives in the Prolog |     SWI-Compatible option, determines prompting for alternatives in the Prolog | ||||||
|      toplevel. Default is <tt>groundness</tt>, YAP prompts for alternatives if and |     toplevel. Default is <tt>groundness</tt>, YAP prompts for alternatives if | ||||||
|      only if the query contains variables. The alternative, default in SWI-Prolog is |     and only if the query contains variables. The alternative, default in | ||||||
|      <tt>determinism</tt> which implies the system prompts for alternatives if the |     SWI-Prolog is <tt>determinism</tt> which implies the system prompts for | ||||||
|      goal succeeded while leaving choicepoints. */ |     alternatives if the goal succeeded while leaving choicepoints. */ | ||||||
|     YAP_FLAG(PROMPT_ALTERNATIVES_ON_FLAG, "prompt_alternatives_on", true, |     YAP_FLAG(PROMPT_ALTERNATIVES_ON_FLAG, "prompt_alternatives_on", true, | ||||||
|              isatom, "determinism", NULL), |              isatom, "determinism", NULL), | ||||||
|     YAP_FLAG(QUASI_QUOTATIONS_FLAG, "quasi_quotations", true, booleanFlag, |     YAP_FLAG(QUASI_QUOTATIONS_FLAG, "quasi_quotations", true, booleanFlag, | ||||||
| @@ -385,8 +380,8 @@ | |||||||
|     /**< `readline(boolean, changeable)` |     /**< `readline(boolean, changeable)` | ||||||
|     } |     } | ||||||
|  |  | ||||||
|      enable the use of the readline library for console interactions, true by default |     enable the use of the readline library for console interactions, true by | ||||||
|      if readline was found. */ |     default if readline was found. */ | ||||||
|     YAP_FLAG(READLINE_FLAG, "readline", true, booleanFlag, "false", |     YAP_FLAG(READLINE_FLAG, "readline", true, booleanFlag, "false", | ||||||
|              Yap_InitReadline), |              Yap_InitReadline), | ||||||
|     YAP_FLAG(REPORT_ERROR_FLAG, "report_error", true, booleanFlag, "true", |     YAP_FLAG(REPORT_ERROR_FLAG, "report_error", true, booleanFlag, "true", | ||||||
| @@ -420,9 +415,9 @@ | |||||||
|  */ |  */ | ||||||
|     YAP_FLAG(SHARED_OBJECT_SEARCH_PATH_FLAG, "shared_object_search_path", true, |     YAP_FLAG(SHARED_OBJECT_SEARCH_PATH_FLAG, "shared_object_search_path", true, | ||||||
|              isatom, SO_PATH, NULL), |              isatom, SO_PATH, NULL), | ||||||
|   /**< `single_quoted text is usuallly interpreted as atoms. This flagTerm allows other inerpretations such as strings_contains_strings */ |     /**< `single_quoted text is usuallly interpreted as atoms. This flagTerm | ||||||
|   YAP_FLAG(SINGLE_QUOTES_FLAG, "single_quotes", true, isatom, "atom", |        allows other inerpretations such as strings_contains_strings */ | ||||||
| 	   sqf), |     YAP_FLAG(SINGLE_QUOTES_FLAG, "single_quotes", true, isatom, "atom", sqf), | ||||||
|  |  | ||||||
|     /**< `signals` |     /**< `signals` | ||||||
|  |  | ||||||
| @@ -430,16 +425,14 @@ | |||||||
|     (`SIGINT`). |     (`SIGINT`). | ||||||
|  |  | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(SIGNALS_FLAG, "signals", true, booleanFlag, "true", |     YAP_FLAG(SIGNALS_FLAG, "signals", true, booleanFlag, "true", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `source` |     /**< `source` | ||||||
|  |  | ||||||
|     If `true` maintain the source for all clauses. Notice that this is trivially |     If `true` maintain the source for all clauses. Notice that this is trivially | ||||||
|     supported for facts, and always supported for dynamic code. |     supported for facts, and always supported for dynamic code. | ||||||
|  |  | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(SOURCE_FLAG, "source", true, booleanFlag, "true", |     YAP_FLAG(SOURCE_FLAG, "source", true, booleanFlag, "true", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `strict_iso ` |     /**< `strict_iso ` | ||||||
|  |  | ||||||
|     If  _Value_ is unbound, tell whether strict ISO compatibility mode |     If  _Value_ is unbound, tell whether strict ISO compatibility mode | ||||||
| @@ -462,8 +455,7 @@ | |||||||
|     depends on a Prolog's platform specific features. |     depends on a Prolog's platform specific features. | ||||||
|  |  | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(STRICT_ISO_FLAG, "strict_iso", true, booleanFlag, "false", |     YAP_FLAG(STRICT_ISO_FLAG, "strict_iso", true, booleanFlag, "false", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**<  `system_options ` |     /**<  `system_options ` | ||||||
|  |  | ||||||
|     This read only flag tells which options were used to compile |     This read only flag tells which options were used to compile | ||||||
| @@ -482,8 +474,7 @@ | |||||||
|     (see Tabling) for the list of options. |     (see Tabling) for the list of options. | ||||||
|  |  | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(TABLING_MODE_FLAG, "tabling_mode", true, isatom, "[]", |     YAP_FLAG(TABLING_MODE_FLAG, "tabling_mode", true, isatom, "[]", NULL), | ||||||
| 	   NULL), |  | ||||||
|     YAP_FLAG(THREADS_FLAG, "threads", false, ro, "MAX_THREADS", NULL), |     YAP_FLAG(THREADS_FLAG, "threads", false, ro, "MAX_THREADS", NULL), | ||||||
|     YAP_FLAG(TIMEZONE_FLAG, "timezone", false, ro, "18000", NULL), |     YAP_FLAG(TIMEZONE_FLAG, "timezone", false, ro, "18000", NULL), | ||||||
|     YAP_FLAG(TOPLEVEL_PRINT_ANON_FLAG, "toplevel_print_anon", true, booleanFlag, |     YAP_FLAG(TOPLEVEL_PRINT_ANON_FLAG, "toplevel_print_anon", true, booleanFlag, | ||||||
| @@ -538,8 +529,7 @@ | |||||||
|     are `error`, `fail`, and `warning`. Yap includes the following extensions: |     are `error`, `fail`, and `warning`. Yap includes the following extensions: | ||||||
|     `fast_fail` does not invoke any handler. |     `fast_fail` does not invoke any handler. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(UNKNOWN_FLAG, "unknown", true, isatom, "error", |     YAP_FLAG(UNKNOWN_FLAG, "unknown", true, isatom, "error", Yap_unknown), | ||||||
| 	   Yap_unknown), |  | ||||||
|     YAP_FLAG(VARIABLE_NAMES_MAY_END_WITH_QUOTES_FLAG, |     YAP_FLAG(VARIABLE_NAMES_MAY_END_WITH_QUOTES_FLAG, | ||||||
|              "variable_names_may_end_with_quotes", true, booleanFlag, "false", |              "variable_names_may_end_with_quotes", true, booleanFlag, "false", | ||||||
|              NULL), |              NULL), | ||||||
| @@ -551,8 +541,7 @@ | |||||||
|     YAP is booted with the `-q` or `-L` flag. |     YAP is booted with the `-q` or `-L` flag. | ||||||
|  |  | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(VERBOSE_FLAG, "verbose", true, isatom, "normal", |     YAP_FLAG(VERBOSE_FLAG, "verbose", true, isatom, "normal", NULL), | ||||||
| 	   NULL), |  | ||||||
|     YAP_FLAG(VERBOSE_AUTOLOAD_FLAG, "verbose_autoload", true, booleanFlag, |     YAP_FLAG(VERBOSE_AUTOLOAD_FLAG, "verbose_autoload", true, booleanFlag, | ||||||
|              "false", NULL), |              "false", NULL), | ||||||
|     /**< `verbose_file_search ` |     /**< `verbose_file_search ` | ||||||
| @@ -571,8 +560,7 @@ | |||||||
|     is `normal` by default except if YAP is booted with the `-L` |     is `normal` by default except if YAP is booted with the `-L` | ||||||
|     flag. |     flag. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(VERBOSE_LOAD_FLAG, "verbose_load", true, isatom, "normal", |     YAP_FLAG(VERBOSE_LOAD_FLAG, "verbose_load", true, isatom, "normal", NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `version_data ` |     /**< `version_data ` | ||||||
|  |  | ||||||
|     Read-only flag that unifies with a number of the form |     Read-only flag that unifies with a number of the form | ||||||
| @@ -580,22 +568,19 @@ | |||||||
|     _Major_ is the major version,  _Minor_ is the minor version, |     _Major_ is the major version,  _Minor_ is the minor version, | ||||||
|     and  _Patch_ is the patch number. |     and  _Patch_ is the patch number. | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(VERSION_FLAG, "version", false, nat, YAP_NUMERIC_VERSION, |     YAP_FLAG(VERSION_FLAG, "version", false, nat, YAP_NUMERIC_VERSION, NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< |     /**< | ||||||
|     `version `  Read-only flag that returns a compound term with the |     `version `  Read-only flag that returns a compound term with the | ||||||
|      current version of YAP. The term will have the name `yap` and arity 4, the first |     current version of YAP. The term will have the name `yap` and arity 4, the | ||||||
|      argument will be the |     first argument will be the major version, the second the minor version, the | ||||||
|      major version, the second the minor version, the third the patch number, and the |     third the patch number, and the last one is reserved. | ||||||
|      last one is reserved. |  | ||||||
|  |  | ||||||
|  */ |  */ | ||||||
|   YAP_FLAG(VERSION_DATA_FLAG, "version_data", false, ro, YAP_TVERSION, |     YAP_FLAG(VERSION_DATA_FLAG, "version_data", false, ro, YAP_TVERSION, NULL), | ||||||
| 	   NULL), |  | ||||||
|     /**< `version_git ` |     /**< `version_git ` | ||||||
|     ` |     ` | ||||||
|      this is the unique identifier for the last commit of the current GIT HEAD, it |     this is the unique identifier for the last commit of the current GIT HEAD, | ||||||
|      xan be used to identify versions that differ on small (or large) updates. |     it xan be used to identify versions that differ on small (or large) updates. | ||||||
|  */ |  */ | ||||||
|     YAP_FLAG(VERSION_GIT_FLAG, "version_git", false, isatom, YAP_GIT_HEAD, |     YAP_FLAG(VERSION_GIT_FLAG, "version_git", false, isatom, YAP_GIT_HEAD, | ||||||
|              NULL), |              NULL), | ||||||
|   | |||||||
| @@ -66,10 +66,12 @@ if(R_COMMAND) | |||||||
|   find_library(R_LIBRARY_READLINE readline |   find_library(R_LIBRARY_READLINE readline | ||||||
|             DOC "(Optional) system readline library. Only required if the R libraries were built with readline support.") |             DOC "(Optional) system readline library. Only required if the R libraries were built with readline support.") | ||||||
|  |  | ||||||
|  | else() | ||||||
|  |   message(SEND_ERROR "FindR.cmake requires the following variables to be set: R_COMMAND") | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # Note: R_LIBRARY_BASE is added to R_LIBRARIES twice; this may be due to circular linking dependencies; needs further investigation | # Note: R_LIBRARY_BASE is added to R_LIBRARIES twice; this may be due to circular linking dependencies; needs further investigation | ||||||
| set(R_LIBRARIES ${R_LIBRARY_BASE} ${R_LIBRARY_BLAS} ${R_LIBRARY_LAPACK} ${R_LIBRARY_BASE}) | set(R_LIBRARIES ${R_LIBRARY_BASE} ${R_LIBRARY_BLAS} ${R_LIBRARY_LAPACK} ${R_LIBRARY_BASE}) | ||||||
| if(R_LIBRARY_READLINE) | if(R_LIBRARY_READLINE) | ||||||
|   set(R_LIBRARIES ${R_LIBRARIES} ${R_LIBRARY_READLINE}) |   set(R_LIBRARIES ${R_LIBRARIES} ${R_LIBRARY_READLINE}) | ||||||
| endif() | endif() | ||||||
| endif() |  | ||||||
|   | |||||||
| @@ -2109,20 +2109,20 @@ INCLUDE_FILE_PATTERNS  = | |||||||
| # recursively expanded use the := operator instead of the = operator. | # recursively expanded use the := operator instead of the = operator. | ||||||
| # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | ||||||
|  |  | ||||||
| PREDEFINED          = # | PREDEFINED          = \ | ||||||
|  # YAP_FLAG(ITEM,NAME,WRITABLE,DEF,INIT,HELPER)=ITEM \ |   YAP_FLAG(ITEM,NAME,WRITABLE,DEF,INIT,HELPER):=NAME \ | ||||||
|  # START_LOCAL_FLAGS="enum THREAD_LOCAL_FLAGS {" \ |   START_LOCAL_FLAGS:="enum THREAD_LOCAL_FLAGS {" \ | ||||||
|  # END_LOCAL_FLAGS=" };"\ |   END_LOCAL_FLAGS:=" };"\ | ||||||
|  # START_GLOBAL_FLAGS="enum GLOBAL_FLAGS {" \ |   START_GLOBAL_FLAGS:="enum GLOBAL_FLAGS {" \ | ||||||
|  # END_GLOBAL_FLAGS="};" \ |   END_GLOBAL_FLAGS:="};" \ | ||||||
|  # LOCAL(A, B)="A B" \ |   LOCAL(A, B):="A B" \ | ||||||
|  # LOCAL_INIT(A, B, C)="A B;B = C" \ |   LOCAL_INIT(A, B, C):="A B;B := C" \ | ||||||
|  # LOCAL_ARRAY(A, B, C)="A B[C]" \ |   LOCAL_ARRAY(A, B, C):="A B[C]" \ | ||||||
|  # LOCAL_ARRAY_ARRAY(A, B, C,D)="A B[C][D]"\ |   LOCAL_ARRAY_ARRAY(A, B, C,D):="A B[C][D]"\ | ||||||
|  # LOCAL_INIT(A, B, C, D)="A B[C][D]"\ |   LOCAL_INIT(A, B, C, D):="A B[C][D]"\ | ||||||
|  # LOCAL_INITF(A, B, C)=" A B; C"\ |   LOCAL_INITF(A, B, C):=" A B; C"\ | ||||||
|  # LOCAL_INIT_RESTORE(A,B,C,D)="A B; C; D;"\ |   LOCAL_INIT_RESTORE(A,B,C,D):="A B; C; D;"\ | ||||||
|  # PREG=Yap_REGS.P_ |   PREG:=Yap_REGS.P_ | ||||||
|  |  | ||||||
| # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this | # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this | ||||||
| # tag can be used to specify a list of macro names that should be expanded. The | # tag can be used to specify a list of macro names that should be expanded. The | ||||||
|   | |||||||
| @@ -7,20 +7,5 @@ | |||||||
| YAP includes a number of extensions over the original Prolog | YAP includes a number of extensions over the original Prolog | ||||||
| language. Next, we discuss how to use the most important ones. | language. Next, we discuss how to use the most important ones. | ||||||
|  |  | ||||||
|   + @ref Rational_Trees |  | ||||||
|  |  | ||||||
|   + @ref AttributedVariables |  | ||||||
|  |  | ||||||
|   + @ref  DepthLimited |  | ||||||
|  |  | ||||||
|   + @ref  Tabling |  | ||||||
|  |  | ||||||
|   + @ref Threads |  | ||||||
|  |  | ||||||
|   + @ref Profiling |  | ||||||
|  |  | ||||||
|   + @ref YAPArrays |  | ||||||
|  |  | ||||||
|   + @ref Parallelism |  | ||||||
|  |  | ||||||
| @} | @} | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								os/iopreds.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								os/iopreds.c
									
									
									
									
									
								
							| @@ -28,7 +28,8 @@ static char SccsId[] = "%W% %G%"; | |||||||
|  */ |  */ | ||||||
| /* | /* | ||||||
|  * This file includes the definition of a miscellania of standard predicates * |  * This file includes the definition of a miscellania of standard predicates * | ||||||
|  *for yap refering to: Files and GLOBAL_Streams, Simple Input/Output, |  *for yap refering to: Files and GLOBAL_1588 | ||||||
|  |  *ams, Simple Input/Output, | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| @@ -1584,7 +1585,7 @@ int Yap_OpenStream(Term tin, const char *io_mode, Term user_name, | |||||||
|       st->file = fopen(fname, io_mode); |       st->file = fopen(fname, io_mode); | ||||||
|     } |     } | ||||||
|     if (!st->file) { |     if (!st->file) { | ||||||
|  |       fprintf(stderr, "trying %s\n", fname); | ||||||
|       PlIOError(EXISTENCE_ERROR_SOURCE_SINK, tin, "%s", fname); |       PlIOError(EXISTENCE_ERROR_SOURCE_SINK, tin, "%s", fname); | ||||||
|       /* extract BACK info passed through the stream descriptor */ |       /* extract BACK info passed through the stream descriptor */ | ||||||
|       return -1; |       return -1; | ||||||
| @@ -1632,12 +1633,10 @@ int Yap_OpenStream(Term tin, const char *io_mode, Term user_name, | |||||||
|     if (!strchr(io_mode, 'b') && binary_file(fname)) { |     if (!strchr(io_mode, 'b') && binary_file(fname)) { | ||||||
|       UNLOCK(st->streamlock); |       UNLOCK(st->streamlock); | ||||||
|       if (errno == ENOENT && !strchr(io_mode, 'r')) { |       if (errno == ENOENT && !strchr(io_mode, 'r')) { | ||||||
|         PlIOError(EXISTENCE_ERROR_SOURCE_SINK, |         PlIOError(EXISTENCE_ERROR_SOURCE_SINK, tin, "%s: %s", fname, | ||||||
|                   tin, "%s: %s", fname, |  | ||||||
|                   strerror(errno)); |                   strerror(errno)); | ||||||
|       } else { |       } else { | ||||||
|         PlIOError(PERMISSION_ERROR_OPEN_SOURCE_SINK, |         PlIOError(PERMISSION_ERROR_OPEN_SOURCE_SINK, tin, "%s: %s", fname, | ||||||
|                   tin, "%s: %s", fname, |  | ||||||
|                   strerror(errno)); |                   strerror(errno)); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -200,7 +200,7 @@ | |||||||
|  |  | ||||||
| int getRealNumber(char *c, double *number); | int getRealNumber(char *c, double *number); | ||||||
| int getIntNumber(char *c, int *number); | int getIntNumber(char *c, int *number); | ||||||
| inline int getPosNumber(char *c, int *number); | //inline int getPosNumber(char *c, int *number); | ||||||
| int IsRealNumber(char *c); | int IsRealNumber(char *c); | ||||||
| int IsPosNumber(const char *c); | int IsPosNumber(const char *c); | ||||||
| int IsNumber(const char *c); | int IsNumber(const char *c); | ||||||
|   | |||||||
| @@ -188,12 +188,13 @@ | |||||||
|  |  | ||||||
| //#include <stdio.h> | //#include <stdio.h> | ||||||
| //#include <stdlib.h> | //#include <stdlib.h> | ||||||
|  | #include <unistd.h> | ||||||
| #include "simplecudd.h" | #include "simplecudd.h" | ||||||
| #include "problogmath.h" | #include "problogmath.h" | ||||||
| #include <signal.h> | #include <signal.h> | ||||||
| #include <time.h> | #include <time.h> | ||||||
|  |  | ||||||
| #define  VERSION "2.0.1" | #define  PROBLOGBDD_VERSION "2.0.1" | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef max | #ifndef max | ||||||
| @@ -1550,7 +1551,7 @@ int argtype(const char *arg) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void printhelp(int argc, char **arg) { | void printhelp(int argc, char **arg) { | ||||||
|   fprintf(stderr, "\n\nProbLogBDD Tool Version: %s\n\n", VERSION); |   fprintf(stderr, "\n\nProbLogBDD Tool Version: %s\n\n", PROBLOGBDD_VERSION); | ||||||
|   fprintf(stderr, "SimpleCUDD library (www.cs.kuleuven.be/~theo/tools/simplecudd.html)\n"); |   fprintf(stderr, "SimpleCUDD library (www.cs.kuleuven.be/~theo/tools/simplecudd.html)\n"); | ||||||
|   fprintf(stderr, "SimpleCUDD was developed at Katholieke Universiteit Leuven(www.kuleuven.be)\n"); |   fprintf(stderr, "SimpleCUDD was developed at Katholieke Universiteit Leuven(www.kuleuven.be)\n"); | ||||||
|   fprintf(stderr, "Copyright Katholieke Universiteit Leuven 2008\n"); |   fprintf(stderr, "Copyright Katholieke Universiteit Leuven 2008\n"); | ||||||
|   | |||||||
| @@ -400,7 +400,7 @@ int simpleNamedBDDtoDot(DdManager *manager, namedvars varmap, DdNode *bdd, | |||||||
|   //	Cudd_AutodynEnable(mana, CUDD_REORDER_EXACT); |   //	Cudd_AutodynEnable(mana, CUDD_REORDER_EXACT); | ||||||
|   //	Cudd_ReduceHeap(manager, CUDD_REORDER_SIFT, 1); |   //	Cudd_ReduceHeap(manager, CUDD_REORDER_SIFT, 1); | ||||||
|  |  | ||||||
|   ret = Cudd_DumpDot(manager, 1, f, varmap.vars, NULL, fd); |   ret = Cudd_DumpDot(manager, 1, f, (const char *const *)varmap.vars, NULL, fd); | ||||||
|   fclose(fd); |   fclose(fd); | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -7,8 +7,7 @@ | |||||||
|  |  | ||||||
| YAP_Term TermErrStream, TermOutStream; | YAP_Term TermErrStream, TermOutStream; | ||||||
|  |  | ||||||
| static int py_put(int sno, int ch) | static int py_put(int sno, int ch) { | ||||||
| { |  | ||||||
|   // PyObject *pyw; // buffer |   // PyObject *pyw; // buffer | ||||||
|   // int pyw_kind; |   // int pyw_kind; | ||||||
|   // PyObject *pyw_data; |   // PyObject *pyw_data; | ||||||
| @@ -33,8 +32,7 @@ static int py_put(int sno, int ch) | |||||||
|   PyObject_CallMethodObjArgs(st->u.private_data, PyUnicode_FromString("write"), |   PyObject_CallMethodObjArgs(st->u.private_data, PyUnicode_FromString("write"), | ||||||
|                              PyUnicode_FromString(s), NULL); |                              PyUnicode_FromString(s), NULL); | ||||||
|   python_release_GIL(g0); |   python_release_GIL(g0); | ||||||
|  if ((err = PyErr_Occurred())) |   if ((err = PyErr_Occurred())) { | ||||||
|   { |  | ||||||
|     PyErr_SetString( |     PyErr_SetString( | ||||||
|         err, |         err, | ||||||
|         "Error in put\n"); // %s:%s:%d!\n", __FILE__, __FUNCTION__, __LINE__); |         "Error in put\n"); // %s:%s:%d!\n", __FILE__, __FUNCTION__, __LINE__); | ||||||
| @@ -43,7 +41,8 @@ static int py_put(int sno, int ch) | |||||||
| } | } | ||||||
|  |  | ||||||
| VFS_t pystream; | VFS_t pystream; | ||||||
|  static void *py_open(VFS_t *me, const char *name, const char *io_mode, int sno) { | static void *py_open(VFS_t *me, const char *name, const char *io_mode, | ||||||
|  |                      int sno) { | ||||||
| #if HAVE_STRCASESTR | #if HAVE_STRCASESTR | ||||||
|   if (strcasestr(name, "/python/") == name) |   if (strcasestr(name, "/python/") == name) | ||||||
|     name += strlen("/python/"); |     name += strlen("/python/"); | ||||||
| @@ -67,6 +66,9 @@ VFS_t pystream; | |||||||
|     st->user_name = YAP_MkAtomTerm(st->name); |     st->user_name = YAP_MkAtomTerm(st->name); | ||||||
|   } |   } | ||||||
|   // we assume object is already open, so there is no need to open it. |   // we assume object is already open, so there is no need to open it. | ||||||
|  |   if (PyCallable_Check(pystream)) | ||||||
|  |     st->u.private_data = PyObject_Call(pystream, PyTuple_New(0), NULL); | ||||||
|  |   else | ||||||
|     st->u.private_data = pystream; |     st->u.private_data = pystream; | ||||||
|   st->vfs = me; |   st->vfs = me; | ||||||
|   python_release_GIL(ctk); |   python_release_GIL(ctk); | ||||||
| @@ -75,8 +77,7 @@ VFS_t pystream; | |||||||
|  |  | ||||||
| static bool py_close(int sno) { | static bool py_close(int sno) { | ||||||
|   StreamDesc *st = YAP_RepStreamFromId(sno); |   StreamDesc *st = YAP_RepStreamFromId(sno); | ||||||
|   if (strcmp(st->name,"sys.stdout") && |   if (strcmp(st->name, "sys.stdout") && strcmp(st->name, "sys.stderr")) { | ||||||
|       strcmp(st->name,"sys.stderr")) { |  | ||||||
|     Py_XDECREF(st->u.private_data); |     Py_XDECREF(st->u.private_data); | ||||||
|   } |   } | ||||||
|   st->u.private_data = NULL; |   st->u.private_data = NULL; | ||||||
| @@ -93,14 +94,15 @@ static bool getLine(int inp) { | |||||||
|   PyObject *prompt = PyUnicode_FromString("?- "), |   PyObject *prompt = PyUnicode_FromString("?- "), | ||||||
|            *msg = PyUnicode_FromString(" **input** "); |            *msg = PyUnicode_FromString(" **input** "); | ||||||
|   /* window of vulnerability opened */ |   /* window of vulnerability opened */ | ||||||
|   myrl_line = PyUnicode_AsUTF8(PyObject_CallFunctionObjArgs(rl_instream->u.private_data,msg,prompt,NULL)); |   myrl_line = PyUnicode_AsUTF8(PyObject_CallFunctionObjArgs( | ||||||
|  |       rl_instream->u.private_data, msg, prompt, NULL)); | ||||||
|   python_release_GIL(ctk); |   python_release_GIL(ctk); | ||||||
|   rl_instream->u.irl.ptr = rl_instream->u.irl.buf = (const unsigned char*)myrl_line; |   rl_instream->u.irl.ptr = rl_instream->u.irl.buf = | ||||||
|  |       (const unsigned char *)myrl_line; | ||||||
|   myrl_line = NULL; |   myrl_line = NULL; | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| static int py_getc(int sno) { | static int py_getc(int sno) { | ||||||
|   StreamDesc *s = YAP_RepStreamFromId(sno); |   StreamDesc *s = YAP_RepStreamFromId(sno); | ||||||
|   int ch; |   int ch; | ||||||
| @@ -151,7 +153,6 @@ static int py_peek(int sno) { | |||||||
|   return ch; |   return ch; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| static int64_t py_seek(int sno, int64_t where, int how) { | static int64_t py_seek(int sno, int64_t where, int how) { | ||||||
|   StreamDesc *g0 = YAP_RepStreamFromId(sno); |   StreamDesc *g0 = YAP_RepStreamFromId(sno); | ||||||
|   term_t s0 = python_acquire_GIL(); |   term_t s0 = python_acquire_GIL(); | ||||||
|   | |||||||
| @@ -20,7 +20,6 @@ | |||||||
|   %         ] |   %         ] | ||||||
| %%            ). | %%            ). | ||||||
| :- [library(hacks)]. | :- [library(hacks)]. | ||||||
|  |  | ||||||
| :-	 reexport(library(yapi)). | :-	 reexport(library(yapi)). | ||||||
| :-	 use_module(library(lists)). | :-	 use_module(library(lists)). | ||||||
| :-	 use_module(library(maplist)). | :-	 use_module(library(maplist)). | ||||||
| @@ -274,4 +273,21 @@ close_events( Self ) :- | |||||||
|     fail. |     fail. | ||||||
| close_events( _ ). | close_events( _ ). | ||||||
|  |  | ||||||
|  |  | ||||||
|  | :- if(  current_prolog_flag(apple, true) ). | ||||||
|  |  | ||||||
|  | :- putenv( 'LC_ALL', 'en_us:UTF-8'). | ||||||
|  |  | ||||||
|  | plot_inline :- | ||||||
|  | 	X := self.inline_plotting, | ||||||
|  | 	nb_setval(inline, X ), | ||||||
|  | 	X = true, | ||||||
|  | 	!, | ||||||
|  | 	:= ( | ||||||
|  | 	   import( matplotlib ), | ||||||
|  | 	   matplotlib.use( `nbagg` ) | ||||||
|  | 	   ). | ||||||
|  |  | ||||||
|  | :- endif. | ||||||
|  |  | ||||||
| %:- ( start_low_level_trace ). | %:- ( start_low_level_trace ). | ||||||
|   | |||||||
| @@ -19,231 +19,24 @@ | |||||||
| # | # | ||||||
| # Variable search order: | # Variable search order: | ||||||
| #   1. Attempt to locate and set R_COMMAND | #   1. Attempt to locate and set R_COMMAND | ||||||
| #     - If unsuccessful, generate error and prompt user to manually set R_COMMAND | #                                                   If unsuccessful, generate error and prompt user to manually set R_COMMAND | ||||||
| #   2. Use R_COMMAND to set R_HOME | #   2. Use R_COMMAND to set R_HOME | ||||||
| #   3. Locate other libraries in the priority: | #   3. Locate other libraries in the priority: | ||||||
| #     1. Within a user-built instance of R at R_HOME | #     1. Within a user-built instance of R at R_HOME | ||||||
| #     2. Within an installed instance of R | #     2. Within an installed instance of R | ||||||
| #     3. Within external system libraries | #     3. Within external system libraries | ||||||
| # | # | ||||||
|  |  | ||||||
|  | if (R_LIBRARIES AND R_INCLUDE_DIR) | ||||||
| set_package_properties(R PROPERTIES | set_package_properties(R PROPERTIES | ||||||
|         DESCRIPTION "The R Project for Statistical Computing." |         DESCRIPTION "The R Project for Statistical Computing." | ||||||
|  |   | ||||||
|        URL "https://www.r-project.org/") |        URL "https://www.r-project.org/") | ||||||
|  | add_lib(real  ${REAL_SOURCES}) | ||||||
| find_program ( |   target_link_libraries (real ${R_LIBRARIES}   libYap) | ||||||
|         R_COMMAND |  | ||||||
|         NAMES R r |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| if (R_COMMAND) |  | ||||||
|     # find the R binary |  | ||||||
|  |  | ||||||
|     MESSAGE(STATUS "Looking for R executable") |  | ||||||
|     IF(NOT R_EXECUTABLE) |  | ||||||
|         FIND_PROGRAM(R_EXECUTABLE R) |  | ||||||
|         IF(R_EXECUTABLE-NOTFOUND) |  | ||||||
|             MESSAGE(FATAL_ERROR "Could NOT find R (TODO: name option)") |  | ||||||
|         ELSE(R_EXECUTABLE-NOTFOUND) |  | ||||||
|             MESSAGE(STATUS "Using R at ${R_EXECUTABLE}") |  | ||||||
|         ENDIF(R_EXECUTABLE-NOTFOUND) |  | ||||||
|  |  | ||||||
|     ENDIF(NOT R_EXECUTABLE) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     # find R_HOME |  | ||||||
|  |  | ||||||
|     MESSAGE(STATUS "Looking for R_HOME") |  | ||||||
|     IF(NOT R_HOME) |  | ||||||
|         EXECUTE_PROCESS( |  | ||||||
|                 COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home())" |  | ||||||
|                 OUTPUT_VARIABLE R_HOME) |  | ||||||
|     ENDIF(NOT R_HOME) |  | ||||||
|     IF(NOT R_HOME) |  | ||||||
|         MESSAGE(FATAL_ERROR "Could NOT determine R_HOME (probably you misspecified the location of R)") |  | ||||||
|     ELSE(NOT R_HOME) |  | ||||||
|         MESSAGE(STATUS "R_HOME is ${R_HOME}") |  | ||||||
|     ENDIF(NOT R_HOME) |  | ||||||
|  |  | ||||||
|     # find R include dir |  | ||||||
|  |  | ||||||
|     MESSAGE(STATUS "Looking for R include files") |  | ||||||
|     IF(NOT R_INCLUDEDIR) |  | ||||||
|         IF(WIN32 OR APPLE)	# This version of the test will not work with R < 2.9.0, but the other version (in the else part) will not work on windows or apple (but we do not really need to support ancient versions of R, there). |  | ||||||
|             EXECUTE_PROCESS( |  | ||||||
|                     COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home('include'))" |  | ||||||
|                     OUTPUT_VARIABLE R_INCLUDEDIR) |  | ||||||
|         ELSE(WIN32 OR APPLE) |  | ||||||
|             EXECUTE_PROCESS( |  | ||||||
|                     COMMAND ${R_EXECUTABLE} CMD sh -c "echo -n $R_INCLUDE_DIR" |  | ||||||
|                     OUTPUT_VARIABLE R_INCLUDEDIR) |  | ||||||
|         ENDIF(WIN32 OR APPLE) |  | ||||||
|     ELSE(NOT R_INCLUDEDIR) |  | ||||||
|         MESSAGE(STATUS "Location specified by user") |  | ||||||
|     ENDIF(NOT R_INCLUDEDIR) |  | ||||||
|  |  | ||||||
|     IF(NOT R_INCLUDEDIR) |  | ||||||
|         SET(R_INCLUDEDIR ${R_HOME}/include) |  | ||||||
|         MESSAGE(STATUS "Not findable via R. Guessing") |  | ||||||
|     ENDIF(NOT R_INCLUDEDIR) |  | ||||||
|     MESSAGE(STATUS "Include files should be at ${R_INCLUDEDIR}. Checking for R.h") |  | ||||||
|  |  | ||||||
|     IF(NOT R_H) |  | ||||||
|         FIND_FILE(R_H |  | ||||||
|                 R.h |  | ||||||
|                 PATHS ${R_INCLUDEDIR} |  | ||||||
|                 NO_DEFAULT_PATH) |  | ||||||
|     ENDIF(NOT R_H) |  | ||||||
|  |  | ||||||
|     IF(NOT R_H) |  | ||||||
|         MESSAGE(FATAL_ERROR "Not found") |  | ||||||
|     ELSE(NOT R_H) |  | ||||||
|         MESSAGE(STATUS "Found at ${R_H}") |  | ||||||
|         GET_FILENAME_COMPONENT(R_INCLUDEDIR ${R_H} |  | ||||||
|                 PATH) |  | ||||||
|     ENDIF(NOT R_H) |  | ||||||
|  |  | ||||||
|     # check for existence of libR.so |  | ||||||
|  |  | ||||||
|     IF(NOT LIBR_SO) |  | ||||||
|         MESSAGE(STATUS "Checking for existence of R shared library") |  | ||||||
|         FIND_LIBRARY(LIBR_SO |  | ||||||
|                 R |  | ||||||
|                 PATHS ${R_HOME}/lib ${R_SHAREDLIBDIR} ${R_HOME}/bin |  | ||||||
|                 NO_DEFAULT_PATH) |  | ||||||
|     endif(NOT LIBR_SO) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     IF(NOT LIBR_SO) |  | ||||||
|         MESSAGE(FATAL_ERROR "Not found. Make sure the location of R was detected correctly, above, and R was compiled with the --enable-shlib option") |  | ||||||
|     ELSE(NOT LIBR_SO) |  | ||||||
|         MESSAGE(STATUS "Exists at ${LIBR_SO}") |  | ||||||
|         GET_FILENAME_COMPONENT(R_SHAREDLIBDIR ${LIBR_SO} |  | ||||||
|                 PATH) |  | ||||||
|         SET(R_USED_LIBS R) |  | ||||||
|     ENDIF(NOT LIBR_SO) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     # for at least some versions of R, we seem to have to link against -lRlapack. Else loading some |  | ||||||
|     # R packages will fail due to unresolved symbols, or we can't link against -lR. |  | ||||||
|     # However, we can't do this unconditionally, |  | ||||||
|     # as this is not available in some configurations of R |  | ||||||
|  |  | ||||||
|     MESSAGE(STATUS "Checking whether we should link against Rlapack library") |  | ||||||
|     FIND_LIBRARY(LIBR_LAPACK |  | ||||||
|             Rlapack |  | ||||||
|             PATHS ${R_SHAREDLIBDIR} |  | ||||||
|             NO_DEFAULT_PATH) |  | ||||||
|     IF(NOT LIBR_LAPACK) |  | ||||||
|         MESSAGE(STATUS "No, it does not exist in ${R_SHAREDLIBDIR}") |  | ||||||
|     ELSE(NOT LIBR_LAPACK) |  | ||||||
|         MESSAGE(STATUS "Yes, ${LIBR_LAPACK} exists") |  | ||||||
|         SET(R_USED_LIBS ${R_USED_LIBS} Rlapack) |  | ||||||
|         IF(WIN32 OR APPLE) |  | ||||||
|         ELSE(WIN32 OR APPLE) |  | ||||||
|             # needed when linking to Rlapack on linux for some unknown reason. |  | ||||||
|             # apparently not needed on windows (let's see, when it comes back to bite us, though) |  | ||||||
|             # and compiling on windows is hard enough even without requiring libgfortran, too. |  | ||||||
|             SET(R_USED_LIBS ${R_USED_LIBS} gfortran) |  | ||||||
|         ENDIF(WIN32 OR APPLE) |  | ||||||
|     ENDIF(NOT LIBR_LAPACK) |  | ||||||
|  |  | ||||||
|     # for at least some versions of R, we seem to have to link against -lRlapack. Else loading some |  | ||||||
|     # R packages will fail due to unresolved symbols, or we can't link against -lR. |  | ||||||
|     # However, we can't do this unconditionally, |  | ||||||
|     # as this is not available in some configurations of R |  | ||||||
|  |  | ||||||
|     MESSAGE(STATUS "Checking whether we should link against Rblas library") |  | ||||||
|     FIND_LIBRARY(LIBR_BLAS |  | ||||||
|             Rblas |  | ||||||
|             PATHS ${R_SHAREDLIBDIR} |  | ||||||
|             NO_DEFAULT_PATH) |  | ||||||
|     IF(NOT LIBR_BLAS) |  | ||||||
|         MESSAGE(STATUS "No, it does not exist in ${R_SHAREDLIBDIR}") |  | ||||||
|     ELSE(NOT LIBR_BLAS) |  | ||||||
|         MESSAGE(STATUS "Yes, ${LIBR_BLAS} exists") |  | ||||||
|         SET(R_USED_LIBS ${R_USED_LIBS} Rblas) |  | ||||||
|     ENDIF(NOT LIBR_BLAS) |  | ||||||
|  |  | ||||||
|     # find R package library location |  | ||||||
|     IF(WIN32) |  | ||||||
|         SET(PATH_SEP ";") |  | ||||||
|     ELSE(WIN32) |  | ||||||
|         SET(PATH_SEP ":") |  | ||||||
|     ENDIF(WIN32) |  | ||||||
|  |  | ||||||
|     MESSAGE(STATUS "Checking for R package library location to use") |  | ||||||
|     IF(NOT R_LIBDIR) |  | ||||||
|         EXECUTE_PROCESS( |  | ||||||
|                 COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(paste(unique (c(.Library.site, .Library)), collapse='${PATH_SEP}'))" |  | ||||||
|                 OUTPUT_VARIABLE R_LIBDIR) |  | ||||||
|     ELSE(NOT R_LIBDIR) |  | ||||||
|         MESSAGE(STATUS "Location specified by user") |  | ||||||
|     ENDIF(NOT R_LIBDIR) |  | ||||||
|  |  | ||||||
|     # strip whitespace |  | ||||||
|     STRING(REGEX REPLACE "[ \n]+" |  | ||||||
|             "" R_LIBDIR |  | ||||||
|             "${R_LIBDIR}") |  | ||||||
|  |  | ||||||
|     # strip leading colon(s) |  | ||||||
|     STRING(REGEX REPLACE "^${PATH_SEP}+" |  | ||||||
|             "" R_LIBDIR |  | ||||||
|             "${R_LIBDIR}") |  | ||||||
|  |  | ||||||
|     # strip trailing colon(s) |  | ||||||
|     STRING(REGEX REPLACE "${PATH_SEP}+$" |  | ||||||
|             "" R_LIBDIR |  | ||||||
|             "${R_LIBDIR}") |  | ||||||
|  |  | ||||||
|     # find first path |  | ||||||
|     STRING(REGEX REPLACE "${PATH_SEP}" |  | ||||||
|             " " R_LIBDIR |  | ||||||
|             "${R_LIBDIR}") |  | ||||||
|  |  | ||||||
|     IF(NOT R_LIBDIR) |  | ||||||
|         MESSAGE(STATUS "Not reliably determined or specified. Guessing.") |  | ||||||
|         SET(R_LIBDIR ${R_HOME}/library) |  | ||||||
|     ENDIF(NOT R_LIBDIR) |  | ||||||
|  |  | ||||||
|     SET(R_LIBDIRS ${R_LIBDIR}) |  | ||||||
|     SEPARATE_ARGUMENTS(R_LIBDIRS) |  | ||||||
|  |  | ||||||
|     SET(R_LIBDIR) |  | ||||||
|     FOREACH(CURRENTDIR ${R_LIBDIRS}) |  | ||||||
|         IF(NOT USE_R_LIBDIR) |  | ||||||
|             IF(EXISTS ${CURRENTDIR}) |  | ||||||
|                 SET(R_LIBDIR ${CURRENTDIR}) |  | ||||||
|                 SET(USE_R_LIBDIR 1) |  | ||||||
|             ELSE(EXISTS ${CURRENTDIR}) |  | ||||||
|                 MESSAGE(STATUS "${CURRENTDIR} does not exist. Skipping") |  | ||||||
|             ENDIF(EXISTS ${CURRENTDIR}) |  | ||||||
|         ENDIF(NOT USE_R_LIBDIR) |  | ||||||
|     ENDFOREACH(CURRENTDIR ${R_LIBDIRS}) |  | ||||||
|  |  | ||||||
|     IF(NOT EXISTS ${R_LIBDIR}) |  | ||||||
|         MESSAGE(FATAL_ERROR "No existing library location found") |  | ||||||
|     ELSE(NOT EXISTS ${R_LIBDIR}) |  | ||||||
|         MESSAGE(STATUS "Will use ${R_LIBDIR}") |  | ||||||
|     ENDIF(NOT EXISTS ${R_LIBDIR}) |  | ||||||
| endif() |  | ||||||
| #macro_optional_find_package (R ON) |  | ||||||
|  |  | ||||||
| if (R_INCLUDEDIR AND R_LIBDIR) |  | ||||||
|     add_feature_info(R yes "Real") |  | ||||||
|  |  | ||||||
|      set (REAL_SOURCES |  | ||||||
|     real.c |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| set (REAL_PL |  | ||||||
|   real.pl |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| add_to_group( REAL_PL  pl_library) |  | ||||||
|  |  | ||||||
| include_directories ( | include_directories ( | ||||||
|      ${CMAKE_CURRENT_BINARY_DIR} |      ${CMAKE_CURRENT_BINARY_DIR} | ||||||
|       ${R_INCLUDEDIR} |       ${R_INCLUDE_DIR} | ||||||
|       ) |       ) | ||||||
|  |  | ||||||
|     list (APPEND CMAKE_REQUIRED_INCLUDES |     list (APPEND CMAKE_REQUIRED_INCLUDES | ||||||
| @@ -251,12 +44,8 @@ include_directories ( | |||||||
|         ${R_INCLUDE_DIR} |         ${R_INCLUDE_DIR} | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|   add_lib(real  ${REAL_SOURCES}) |  | ||||||
| link_directories(${R_LIBDIR}) |  | ||||||
|   target_link_libraries (real R   libYap) |  | ||||||
|  |  | ||||||
|   check_include_files( "stdio.h;R.h" HAVE_R_H ) |   check_include_files( "stdio.h;R.h" HAVE_R_H ) | ||||||
|   check_include_files( "R.h;Rembedded.h" HAVE_R_EMBEDDED_H ) |   check_include_files( "R.h,;Rembedded.h" HAVE_R_EMBEDDED_H ) | ||||||
|   check_include_files( "Rembedded.h;Rinterface.h" HAVE_R_INTERFACE_H ) |   check_include_files( "Rembedded.h;Rinterface.h" HAVE_R_INTERFACE_H ) | ||||||
|  |  | ||||||
|   configure_file ("rconfig.h.cmake" "rconfig.h" ) |   configure_file ("rconfig.h.cmake" "rconfig.h" ) | ||||||
|   | |||||||
| @@ -63,8 +63,8 @@ Solver::Solver() : | |||||||
|  |  | ||||||
| Solver::~Solver() | Solver::~Solver() | ||||||
| { | { | ||||||
|     for (int i = 0; i < learnts.size(); i++) free(learnts[i]); |   for (int i = 0; i < learnts.size(); i++) std::free(learnts[i]); | ||||||
|     for (int i = 0; i < clauses.size(); i++) free(clauses[i]); |   for (int i = 0; i < clauses.size(); i++) std::free(clauses[i]); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -163,7 +163,7 @@ void Solver::detachClause(Clause& c) { | |||||||
|  |  | ||||||
| void Solver::removeClause(Clause& c) { | void Solver::removeClause(Clause& c) { | ||||||
|     detachClause(c); |     detachClause(c); | ||||||
|     free(&c); } |     std::free(&c); } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool Solver::satisfied(const Clause& c) const { | bool Solver::satisfied(const Clause& c) const { | ||||||
|   | |||||||
| @@ -147,7 +147,7 @@ template<class V> | |||||||
| Clause* Clause_new(const V& ps, bool learnt) { | Clause* Clause_new(const V& ps, bool learnt) { | ||||||
|         assert(sizeof(Lit)      == sizeof(uint32_t)); |         assert(sizeof(Lit)      == sizeof(uint32_t)); | ||||||
|         assert(sizeof(float)    == sizeof(uint32_t)); |         assert(sizeof(float)    == sizeof(uint32_t)); | ||||||
|         void* mem = malloc(sizeof(Clause) + sizeof(uint32_t)*(ps.size())); |         void* mem = std::malloc(sizeof(Clause) + sizeof(uint32_t)*(ps.size())); | ||||||
|         return new (mem) Clause(ps, learnt); } |         return new (mem) Clause(ps, learnt); } | ||||||
| /*_________________________________________________________________________________________________ | /*_________________________________________________________________________________________________ | ||||||
| | | | | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA | |||||||
| //================================================================================================= | //================================================================================================= | ||||||
| // Automatically resizable arrays | // Automatically resizable arrays | ||||||
| // | // | ||||||
| // NOTE! Don't use this vector on datatypes that cannot be re-located in memory (with realloc) | // NOTE! Don't use this vector on datatypes that cannot be re-located in memory (with std::realloc) | ||||||
|  |  | ||||||
| template<class T> | template<class T> | ||||||
| class vec { | class vec { | ||||||
| @@ -79,9 +79,9 @@ public: | |||||||
|  |  | ||||||
|     // Stack interface: |     // Stack interface: | ||||||
| #if 1 | #if 1 | ||||||
|     void     push  (void)              { if (sz == cap) { cap = imax(2, (cap*3+1)>>1); data = (T*)realloc(data, cap * sizeof(T)); } new (&data[sz]) T(); sz++; } |     void     push  (void)              { if (sz == cap) { cap = imax(2, (cap*3+1)>>1); data = (T*)std::realloc(data, cap * sizeof(T)); } new (&data[sz]) T(); sz++; } | ||||||
|     //void     push  (const T& elem)     { if (sz == cap) { cap = imax(2, (cap*3+1)>>1); data = (T*)realloc(data, cap * sizeof(T)); } new (&data[sz]) T(elem); sz++; } |     //void     push  (const T& elem)     { if (sz == cap) { cap = imax(2, (cap*3+1)>>1); data = (T*)std::realloc(data, cap * sizeof(T)); } new (&data[sz]) T(elem); sz++; } | ||||||
|     void     push  (const T& elem)     { if (sz == cap) { cap = imax(2, (cap*3+1)>>1); data = (T*)realloc(data, cap * sizeof(T)); } data[sz++] = elem; } |     void     push  (const T& elem)     { if (sz == cap) { cap = imax(2, (cap*3+1)>>1); data = (T*)std::realloc(data, cap * sizeof(T)); } data[sz++] = elem; } | ||||||
|     void     push_ (const T& elem)     { assert(sz < cap); data[sz++] = elem; } |     void     push_ (const T& elem)     { assert(sz < cap); data[sz++] = elem; } | ||||||
| #else | #else | ||||||
|     void     push  (void)              { if (sz == cap) grow(sz+1); new (&data[sz]) T()    ; sz++; } |     void     push  (void)              { if (sz == cap) grow(sz+1); new (&data[sz]) T()    ; sz++; } | ||||||
| @@ -106,7 +106,7 @@ void vec<T>::grow(int min_cap) { | |||||||
|     if (min_cap <= cap) return; |     if (min_cap <= cap) return; | ||||||
|     if (cap == 0) cap = (min_cap >= 2) ? min_cap : 2; |     if (cap == 0) cap = (min_cap >= 2) ? min_cap : 2; | ||||||
|     else          do cap = (cap*3+1) >> 1; while (cap < min_cap); |     else          do cap = (cap*3+1) >> 1; while (cap < min_cap); | ||||||
|     data = (T*)realloc(data, cap * sizeof(T)); } |     data = (T*)std::realloc(data, cap * sizeof(T)); } | ||||||
|  |  | ||||||
| template<class T> | template<class T> | ||||||
| void vec<T>::growTo(int size, const T& pad) { | void vec<T>::growTo(int size, const T& pad) { | ||||||
| @@ -127,7 +127,7 @@ void vec<T>::clear(bool dealloc) { | |||||||
|     if (data != NULL){ |     if (data != NULL){ | ||||||
|         for (int i = 0; i < sz; i++) data[i].~T(); |         for (int i = 0; i < sz; i++) data[i].~T(); | ||||||
|         sz = 0; |         sz = 0; | ||||||
|         if (dealloc) free(data), data = NULL, cap = 0; } } |         if (dealloc) std::free(data), data = NULL, cap = 0; } } | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -82,11 +82,12 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| @addtogroup YAPControl | @addtogroup YAPControl | ||||||
|  | @ingroup builtins | ||||||
| %% @{ |  | ||||||
|  |  | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  | %% @{ | ||||||
|  |  | ||||||
| /** @pred  forall(: _Cond_,: _Action_) | /** @pred  forall(: _Cond_,: _Action_) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user