| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | /*************************************************************************
 | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | *	 YAP Prolog 							 * | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | *	Yap Prolog was developed at NCCUP - Universidade do Porto	 * | 
					
						
							|  |  |  | *									 * | 
					
						
							| 
									
										
										
										
											2004-05-14 16:33:47 +00:00
										 |  |  | * Copyright L.Damas, V. Santos Costa and Universidade do Porto 1985--	 * | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | *									 * | 
					
						
							|  |  |  | ************************************************************************** | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | * File:		stdpreds.c						 * | 
					
						
							|  |  |  | * comments:	General-purpose C implemented system predicates		 * | 
					
						
							|  |  |  | *									 * | 
					
						
							| 
									
										
										
										
											2008-07-24 16:02:04 +00:00
										 |  |  | * Last rev:     $Date: 2008-07-24 16:02:00 $,$Author: vsc $						 * | 
					
						
							| 
									
										
										
										
											2004-05-13 20:54:58 +00:00
										 |  |  | * $Log: not supported by cvs2svn $ | 
					
						
							| 
									
										
										
										
											2008-07-24 16:02:04 +00:00
										 |  |  | * Revision 1.131  2008/06/12 10:55:52  vsc | 
					
						
							|  |  |  | * fix syntax error messages | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2008-06-12 10:55:52 +00:00
										 |  |  | * Revision 1.130  2008/04/06 11:53:02  vsc | 
					
						
							|  |  |  | *  fix some restore bugs | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2008-04-06 11:53:02 +00:00
										 |  |  | * Revision 1.129  2008/03/15 12:19:33  vsc | 
					
						
							|  |  |  | * fix flags | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2008-03-15 12:19:33 +00:00
										 |  |  | * Revision 1.128  2008/02/15 12:41:33  vsc | 
					
						
							|  |  |  | * more fixes to modules | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2008-02-15 12:41:33 +00:00
										 |  |  | * Revision 1.127  2008/02/13 10:15:35  vsc | 
					
						
							|  |  |  | * fix some bugs from yesterday plus improve support for modules in | 
					
						
							|  |  |  | * operators. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2008-02-13 10:15:36 +00:00
										 |  |  | * Revision 1.126  2008/02/07 23:09:13  vsc | 
					
						
							|  |  |  | * don't break ISO standard in current_predicate/1. | 
					
						
							|  |  |  | * Include Nicos flag. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2008-02-07 23:09:13 +00:00
										 |  |  | * Revision 1.125  2008/01/23 17:57:53  vsc | 
					
						
							|  |  |  | * valgrind it! | 
					
						
							|  |  |  | * enable atom garbage collection. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2008-01-23 17:57:56 +00:00
										 |  |  | * Revision 1.124  2007/11/26 23:43:08  vsc | 
					
						
							|  |  |  | * fixes to support threads and assert correctly, even if inefficiently. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2007-11-26 23:43:10 +00:00
										 |  |  | * Revision 1.123  2007/11/06 17:02:12  vsc | 
					
						
							|  |  |  | * compile ground terms away. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2007-11-06 17:02:13 +00:00
										 |  |  | * Revision 1.122  2007/10/18 08:24:16  vsc | 
					
						
							|  |  |  | * fix global variables | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2007-10-18 08:24:16 +00:00
										 |  |  | * Revision 1.121  2007/10/10 09:44:24  vsc | 
					
						
							|  |  |  | * some more fixes to make YAP swi compatible | 
					
						
							|  |  |  | * fix absolute_file_name (again) | 
					
						
							|  |  |  | * fix setarg | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2007-10-10 09:44:28 +00:00
										 |  |  | * Revision 1.120  2007/10/08 23:02:15  vsc | 
					
						
							|  |  |  | * minor fixes | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2007-10-08 23:02:16 +00:00
										 |  |  | * Revision 1.119  2007/04/18 23:01:16  vsc | 
					
						
							|  |  |  | * fix deadlock when trying to create a module with the same name as a | 
					
						
							|  |  |  | * predicate (for now, just don't lock modules). obs Paulo Moura. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2007-04-18 23:01:16 +00:00
										 |  |  | * Revision 1.118  2007/02/26 10:41:40  vsc | 
					
						
							|  |  |  | * fix prolog_flags for chr. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2007-02-26 10:41:40 +00:00
										 |  |  | * Revision 1.117  2007/01/28 14:26:37  vsc | 
					
						
							|  |  |  | * WIN32 support | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2007-01-28 14:26:37 +00:00
										 |  |  | * Revision 1.116  2006/12/13 16:10:23  vsc | 
					
						
							|  |  |  | * several debugger and CLP(BN) improvements. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-12-13 16:10:26 +00:00
										 |  |  | * Revision 1.115  2006/11/28 13:46:41  vsc | 
					
						
							|  |  |  | * fix wide_char support for name/2. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-11-28 13:46:41 +00:00
										 |  |  | * Revision 1.114  2006/11/27 17:42:03  vsc | 
					
						
							|  |  |  | * support for UNICODE, and other bug fixes. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-11-27 17:42:03 +00:00
										 |  |  | * Revision 1.113  2006/11/16 14:26:00  vsc | 
					
						
							|  |  |  | * fix handling of infinity in name/2 and friends. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-11-16 14:26:00 +00:00
										 |  |  | * Revision 1.112  2006/11/08 01:56:47  vsc | 
					
						
							|  |  |  | * fix argument order in db statistics. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-11-08 01:56:47 +00:00
										 |  |  | * Revision 1.111  2006/11/06 18:35:04  vsc | 
					
						
							|  |  |  | * 1estranha | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-11-06 18:35:05 +00:00
										 |  |  | * Revision 1.110  2006/10/10 14:08:17  vsc | 
					
						
							|  |  |  | * small fixes on threaded implementation. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-10-10 14:08:17 +00:00
										 |  |  | * Revision 1.109  2006/09/15 19:32:47  vsc | 
					
						
							|  |  |  | * ichanges for QSAR | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-09-15 19:32:47 +00:00
										 |  |  | * Revision 1.108  2006/09/01 20:14:42  vsc | 
					
						
							|  |  |  | * more fixes for global data-structures. | 
					
						
							|  |  |  | * statistics on atom space. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-09-01 20:14:42 +00:00
										 |  |  | * Revision 1.107  2006/08/22 16:12:46  vsc | 
					
						
							|  |  |  | * global variables | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-08-22 16:12:46 +00:00
										 |  |  | * Revision 1.106  2006/08/07 18:51:44  vsc | 
					
						
							|  |  |  | * fix garbage collector not to try to garbage collect when we ask for large | 
					
						
							|  |  |  | * chunks of stack in a single go. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-08-07 18:51:44 +00:00
										 |  |  | * Revision 1.105  2006/06/05 19:36:00  vsc | 
					
						
							|  |  |  | * hacks | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-06-05 19:36:00 +00:00
										 |  |  | * Revision 1.104  2006/05/19 14:31:32  vsc | 
					
						
							|  |  |  | * get rid of IntArrays and FloatArray code. | 
					
						
							|  |  |  | * include holes when calculating memory usage. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-05-19 14:31:32 +00:00
										 |  |  | * Revision 1.103  2006/05/18 16:33:05  vsc | 
					
						
							|  |  |  | * fix info reported by memory manager under DL_MALLOC and SYSTEM_MALLOC | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-05-18 16:33:05 +00:00
										 |  |  | * Revision 1.102  2006/04/28 17:53:44  vsc | 
					
						
							|  |  |  | * fix the expand_consult patch | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-04-28 17:53:44 +00:00
										 |  |  | * Revision 1.101  2006/04/28 13:23:23  vsc | 
					
						
							|  |  |  | * fix number of overflow bugs affecting threaded version | 
					
						
							|  |  |  | * make current_op faster. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-04-28 13:23:23 +00:00
										 |  |  | * Revision 1.100  2006/02/05 02:26:35  tiagosoares | 
					
						
							|  |  |  | * MYDDAS: Top Level Functionality | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-02-05 02:26:35 +00:00
										 |  |  | * Revision 1.99  2006/02/05 02:17:54  tiagosoares | 
					
						
							|  |  |  | * MYDDAS: Top Level Functionality | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2006-02-05 02:19:15 +00:00
										 |  |  | * Revision 1.98  2005/12/17 03:25:39  vsc | 
					
						
							|  |  |  | * major changes to support online event-based profiling | 
					
						
							|  |  |  | * improve error discovery and restart on scanner. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-12-17 03:25:39 +00:00
										 |  |  | * Revision 1.97  2005/11/22 11:25:59  tiagosoares | 
					
						
							|  |  |  | * support for the MyDDAS interface library | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-11-22 11:25:59 +00:00
										 |  |  | * Revision 1.96  2005/10/28 17:38:49  vsc | 
					
						
							|  |  |  | * sveral updates | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-10-28 17:38:50 +00:00
										 |  |  | * Revision 1.95  2005/10/21 16:09:02  vsc | 
					
						
							|  |  |  | * SWI compatible module only operators | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  | * Revision 1.94  2005/09/08 22:06:45  rslopes | 
					
						
							|  |  |  | * BEAM for YAP update... | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | * Revision 1.93  2005/08/04 15:45:53  ricroc | 
					
						
							|  |  |  | * TABLING NEW: support to limit the table space size | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-08-04 15:45:56 +00:00
										 |  |  | * Revision 1.92  2005/07/20 13:54:27  rslopes | 
					
						
							|  |  |  | * solved warning: cast from pointer to integer of different size | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-07-20 13:54:42 +00:00
										 |  |  | * Revision 1.91  2005/07/06 19:33:54  ricroc | 
					
						
							|  |  |  | * TABLING: answers for completed calls can now be obtained by loading (new option) or executing (default) them from the trie data structure. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  | * Revision 1.90  2005/07/06 15:10:14  vsc | 
					
						
							|  |  |  | * improvements to compiler: merged instructions and fixes for -> | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-07-06 15:10:18 +00:00
										 |  |  | * Revision 1.89  2005/05/26 18:01:11  rslopes | 
					
						
							|  |  |  | * *** empty log message *** | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-05-26 18:03:08 +00:00
										 |  |  | * Revision 1.88  2005/04/27 20:09:25  vsc | 
					
						
							|  |  |  | * indexing code could get confused with suspension points | 
					
						
							|  |  |  | * some further improvements on oveflow handling | 
					
						
							|  |  |  | * fix paths in Java makefile | 
					
						
							|  |  |  | * changs to support gibbs sampling in CLP(BN) | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-04-27 20:09:26 +00:00
										 |  |  | * Revision 1.87  2005/04/07 17:48:55  ricroc | 
					
						
							|  |  |  | * Adding tabling support for mixed strategy evaluation (batched and local scheduling) | 
					
						
							|  |  |  | *   UPDATE: compilation flags -DTABLING_BATCHED_SCHEDULING and -DTABLING_LOCAL_SCHEDULING removed. To support tabling use -DTABLING in the Makefile or --enable-tabling in configure. | 
					
						
							|  |  |  | *   NEW: yap_flag(tabling_mode,MODE) changes the tabling execution mode of all tabled predicates to MODE (batched, local or default). | 
					
						
							|  |  |  | *   NEW: tabling_mode(PRED,MODE) changes the default tabling execution mode of predicate PRED to MODE (batched or local). | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-04-07 17:56:58 +00:00
										 |  |  | * Revision 1.86  2005/03/13 06:26:11  vsc | 
					
						
							|  |  |  | * fix excessive pruning in meta-calls | 
					
						
							|  |  |  | * fix Term->int breakage in compiler | 
					
						
							|  |  |  | * improve JPL (at least it does something now for amd64). | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-03-13 06:26:13 +00:00
										 |  |  | * Revision 1.85  2005/03/02 19:48:02  vsc | 
					
						
							|  |  |  | * Fix some possible errors in name/2 and friends, and cleanup code a bit | 
					
						
							|  |  |  | * YAP_Error changed. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-03-02 19:48:03 +00:00
										 |  |  | * Revision 1.84  2005/03/02 18:35:46  vsc | 
					
						
							|  |  |  | * try to make initialisation process more robust | 
					
						
							|  |  |  | * try to make name more robust (in case Lookup new atom fails) | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-03-02 18:35:49 +00:00
										 |  |  | * Revision 1.83  2005/03/01 22:25:09  vsc | 
					
						
							|  |  |  | * fix pruning bug | 
					
						
							|  |  |  | * make DL_MALLOC less enthusiastic about walking through buckets. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-03-01 22:25:09 +00:00
										 |  |  | * Revision 1.82  2005/02/21 16:50:04  vsc | 
					
						
							|  |  |  | * amd64 fixes | 
					
						
							|  |  |  | * library fixes | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-02-21 16:50:21 +00:00
										 |  |  | * Revision 1.81  2005/02/08 04:05:35  vsc | 
					
						
							|  |  |  | * fix mess with add clause | 
					
						
							|  |  |  | * improves on sigsegv handling | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-02-08 04:05:39 +00:00
										 |  |  | * Revision 1.80  2005/01/05 05:32:37  vsc | 
					
						
							|  |  |  | * Ricardo's latest version of profiler. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2005-01-05 05:32:37 +00:00
										 |  |  | * Revision 1.79  2004/12/28 22:20:36  vsc | 
					
						
							|  |  |  | * some extra bug fixes for trail overflows: some cannot be recovered that easily, | 
					
						
							|  |  |  | * some can. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-12-28 22:20:37 +00:00
										 |  |  | * Revision 1.78  2004/12/08 04:45:03  vsc | 
					
						
							|  |  |  | * polish changes to undefp | 
					
						
							|  |  |  | * get rid of a few warnings | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-12-08 04:45:04 +00:00
										 |  |  | * Revision 1.77  2004/12/05 05:07:26  vsc | 
					
						
							|  |  |  | * name/2 should accept [] as a valid list (string) | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-12-05 05:07:26 +00:00
										 |  |  | * Revision 1.76  2004/12/05 05:01:25  vsc | 
					
						
							|  |  |  | * try to reduce overheads when running with goal expansion enabled. | 
					
						
							|  |  |  | * CLPBN fixes | 
					
						
							|  |  |  | * Handle overflows when allocating big clauses properly. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-12-05 05:01:45 +00:00
										 |  |  | * Revision 1.75  2004/12/02 06:06:46  vsc | 
					
						
							|  |  |  | * fix threads so that they at least start | 
					
						
							|  |  |  | * allow error handling to work with threads | 
					
						
							|  |  |  | * replace heap_base by Yap_heap_base, according to Yap's convention for globals. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-12-02 06:06:47 +00:00
										 |  |  | * Revision 1.74  2004/11/19 22:08:43  vsc | 
					
						
							|  |  |  | * replace SYSTEM_ERROR by out OUT_OF_WHATEVER_ERROR whenever appropriate. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-11-19 22:08:43 +00:00
										 |  |  | * Revision 1.73  2004/11/19 17:14:14  vsc | 
					
						
							|  |  |  | * a few fixes for 64 bit compiling. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-11-19 17:14:15 +00:00
										 |  |  | * Revision 1.72  2004/11/18 22:32:37  vsc | 
					
						
							|  |  |  | * fix situation where we might assume nonextsing double initialisation of C predicates (use | 
					
						
							|  |  |  | * Hidden Pred Flag). | 
					
						
							|  |  |  | * $host_type was double initialised. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-11-18 22:32:40 +00:00
										 |  |  | * Revision 1.71  2004/07/23 21:08:44  vsc | 
					
						
							|  |  |  | * windows fixes | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-07-23 21:08:45 +00:00
										 |  |  | * Revision 1.70  2004/06/29 19:04:42  vsc | 
					
						
							|  |  |  | * fix multithreaded version | 
					
						
							|  |  |  | * include new version of Ricardo's profiler | 
					
						
							|  |  |  | * new predicat atomic_concat | 
					
						
							|  |  |  | * allow multithreaded-debugging | 
					
						
							|  |  |  | * small fixes | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-06-29 19:04:46 +00:00
										 |  |  | * Revision 1.69  2004/06/16 14:12:53  vsc | 
					
						
							|  |  |  | * miscellaneous fixes | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-06-16 14:12:53 +00:00
										 |  |  | * Revision 1.68  2004/05/14 17:11:30  vsc | 
					
						
							|  |  |  | * support BigNums in interface | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-05-14 17:11:32 +00:00
										 |  |  | * Revision 1.67  2004/05/14 16:33:45  vsc | 
					
						
							|  |  |  | * add Yap_ReadBuffer | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-05-14 16:33:47 +00:00
										 |  |  | * Revision 1.66  2004/05/13 20:54:58  vsc | 
					
						
							|  |  |  | * debugger fixes | 
					
						
							|  |  |  | * make sure we always go back to current module, even during initizlization. | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2004-05-13 20:54:58 +00:00
										 |  |  | * Revision 1.65  2004/04/27 15:14:36  vsc | 
					
						
							|  |  |  | * fix halt/0 and halt/1 | 
					
						
							|  |  |  | *									 * | 
					
						
							| 
									
										
										
										
											2004-04-27 15:14:38 +00:00
										 |  |  | *									 * | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | *************************************************************************/ | 
					
						
							|  |  |  | #ifdef SCCS
 | 
					
						
							|  |  |  | static char     SccsId[] = "%W% %G%"; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | #define HAS_CACHE_REGS 1
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * This file includes the definition of a miscellania of standard predicates | 
					
						
							|  |  |  |  * for yap refering to: Consulting, Executing a C predicate from call, | 
					
						
							|  |  |  |  * Comparisons (both general and numeric), Structure manipulation, Direct | 
					
						
							|  |  |  |  * access to atoms and predicates, Basic support for the debugger  | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * It also includes a table where all C-predicates are initializated  | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "Yap.h"
 | 
					
						
							|  |  |  | #include "Yatom.h"
 | 
					
						
							| 
									
										
										
										
											2009-10-23 14:22:17 +01:00
										 |  |  | #include "YapHeap.h"
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #include "eval.h"
 | 
					
						
							|  |  |  | #include "yapio.h"
 | 
					
						
							| 
									
										
										
										
											2013-11-15 15:45:55 +00:00
										 |  |  | #include "pl-shared.h"
 | 
					
						
							| 
									
										
										
										
											2010-04-16 02:08:06 +01:00
										 |  |  | #ifdef TABLING
 | 
					
						
							|  |  |  | #include "tab.macros.h"
 | 
					
						
							|  |  |  | #endif /* TABLING */
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #if HAVE_STRING_H
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2006-05-18 16:33:05 +00:00
										 |  |  | #if HAVE_MALLOC_H
 | 
					
						
							|  |  |  | #include <malloc.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2006-11-27 17:42:03 +00:00
										 |  |  | #include <wchar.h>
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-25 17:15:04 -05:00
										 |  |  | static Int p_setval( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_value( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_values( USES_REGS1 ); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #ifdef undefined
 | 
					
						
							| 
									
										
										
										
											2013-04-25 17:15:04 -05:00
										 |  |  | static CODEADDR *FindAtom(CODEADDR, int *); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #endif /* undefined */
 | 
					
						
							| 
									
										
										
										
											2013-04-25 17:15:04 -05:00
										 |  |  | static Int p_opdec( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_univ( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_abort( USES_REGS1 ); | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | #ifdef BEAM
 | 
					
						
							| 
									
										
										
										
											2013-04-25 17:15:04 -05:00
										 |  |  | Int p_halt( USES_REGS1 ); | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2013-04-25 17:15:04 -05:00
										 |  |  | static Int p_halt( USES_REGS1 ); | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2013-04-25 17:15:04 -05:00
										 |  |  | static Int init_current_predicate( USES_REGS1 ); | 
					
						
							|  |  |  | static Int cont_current_predicate( USES_REGS1 ); | 
					
						
							|  |  |  | static Int init_current_predicate_for_atom( USES_REGS1 ); | 
					
						
							|  |  |  | static Int cont_current_predicate_for_atom( USES_REGS1 ); | 
					
						
							|  |  |  | static OpEntry *NextOp(OpEntry * CACHE_TYPE); | 
					
						
							|  |  |  | static Int init_current_op( USES_REGS1 ); | 
					
						
							|  |  |  | static Int cont_current_op( USES_REGS1 ); | 
					
						
							|  |  |  | static Int init_current_atom_op( USES_REGS1 ); | 
					
						
							|  |  |  | static Int cont_current_atom_op( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_flags( USES_REGS1 ); | 
					
						
							|  |  |  | static int AlreadyHidden(char *); | 
					
						
							|  |  |  | static Int p_hide( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_hidden( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_unhide( USES_REGS1 ); | 
					
						
							|  |  |  | static Int TrailMax(void); | 
					
						
							|  |  |  | static Int GlobalMax(void); | 
					
						
							|  |  |  | static Int LocalMax(void); | 
					
						
							|  |  |  | static Int p_statistics_heap_max( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_statistics_global_max( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_statistics_local_max( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_statistics_heap_info( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_statistics_stacks_info( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_statistics_trail_info( USES_REGS1 ); | 
					
						
							|  |  |  | static Term mk_argc_list( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_argv( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_cputime( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_systime( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_runtime( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_walltime( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_access_yap_flags( USES_REGS1 ); | 
					
						
							|  |  |  | static Int p_set_yap_flags( USES_REGS1 ); | 
					
						
							| 
									
										
										
										
											2013-11-15 15:45:55 +00:00
										 |  |  | static Int p_break( USES_REGS1 ); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | #ifdef BEAM
 | 
					
						
							| 
									
										
										
										
											2013-04-25 17:15:04 -05:00
										 |  |  | Int use_eam( USES_REGS1 ); | 
					
						
							|  |  |  | Int eager_split( USES_REGS1 ); | 
					
						
							|  |  |  | Int force_wait( USES_REGS1 ); | 
					
						
							|  |  |  | Int commit( USES_REGS1 ); | 
					
						
							|  |  |  | Int skip_while_var( USES_REGS1 ); | 
					
						
							|  |  |  | Int wait_while_var( USES_REGS1 ); | 
					
						
							|  |  |  | Int show_time( USES_REGS1 ); | 
					
						
							|  |  |  | Int start_eam( USES_REGS1 ); | 
					
						
							|  |  |  | Int cont_eam( USES_REGS1 ); | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern int EAM; | 
					
						
							|  |  |  | extern int eam_am(PredEntry*); | 
					
						
							|  |  |  | extern int showTime(void);  | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | Int start_eam( USES_REGS1 ) { | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  |   if (eam_am((PredEntry *) 0x1)) return (TRUE);  | 
					
						
							|  |  |  |   else { cut_fail(); return (FALSE); } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | Int cont_eam( USES_REGS1 ) { | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  |   if (eam_am((PredEntry *) 0x2)) return (TRUE);  | 
					
						
							|  |  |  |   else { cut_fail(); return (FALSE); } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | Int use_eam( USES_REGS1 ) {  | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  |   if (EAM)  EAM=0; | 
					
						
							| 
									
										
										
										
											2008-12-23 01:53:52 +00:00
										 |  |  |     else { Yap_PutValue(AtomCArith,0); EAM=1; } | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  |   return(TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | Int commit( USES_REGS1 ) {  | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  |   if (EAM) { | 
					
						
							|  |  |  |   printf("Nao deveria ter sido chamado commit do stdpreds\n"); | 
					
						
							|  |  |  |   exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | Int skip_while_var( USES_REGS1 ) {  | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  |   if (EAM) { | 
					
						
							|  |  |  |   printf("Nao deveria ter sido chamado skip_while_var do stdpreds\n"); | 
					
						
							|  |  |  |   exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | Int wait_while_var( USES_REGS1 ) {  | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  |   if (EAM) { | 
					
						
							|  |  |  |   printf("Nao deveria ter sido chamado wait_while_var do stdpreds\n"); | 
					
						
							|  |  |  |   exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | Int force_wait( USES_REGS1 ) { | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  |   if (EAM) { | 
					
						
							|  |  |  |   printf("Nao deveria ter sido chamado force_wait do stdpreds\n"); | 
					
						
							|  |  |  |   exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | Int eager_split( USES_REGS1 ) { | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  |   if (EAM) { | 
					
						
							|  |  |  |   printf("Nao deveria ter sido chamado eager_split do stdpreds\n"); | 
					
						
							|  |  |  |   exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | Int show_time( USES_REGS1 )  /* MORE PRECISION */ | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   return (showTime()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* BEAM */ 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_setval( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* '$set_value'(+Atom,+Atomic) */ | 
					
						
							|  |  |  | 	Term            t1 = Deref(ARG1), t2 = Deref(ARG2); | 
					
						
							|  |  |  | 	if (!IsVarTerm(t1) && IsAtomTerm(t1) && | 
					
						
							|  |  |  | 	    (!IsVarTerm(t2) && (IsAtomTerm(t2) || IsNumTerm(t2)))) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 		Yap_PutValue(AtomOfTerm(t1), t2); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 		return (TRUE); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return (FALSE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_value( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* '$get_value'(+Atom,?Val) */ | 
					
						
							|  |  |  |   Term t1 = Deref(ARG1); | 
					
						
							| 
									
										
										
										
											2002-09-13 21:30:06 +00:00
										 |  |  |   if (IsVarTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(INSTANTIATION_ERROR,t1,"get_value/2"); | 
					
						
							| 
									
										
										
										
											2002-09-13 21:30:06 +00:00
										 |  |  |     return (FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (!IsAtomTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(TYPE_ERROR_ATOM,t1,"get_value/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return (FALSE); | 
					
						
							| 
									
										
										
										
											2002-09-13 21:30:06 +00:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return (Yap_unify_constant(ARG2, Yap_GetValue(AtomOfTerm(t1)))); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_values( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* '$values'(Atom,Old,New) */ | 
					
						
							|  |  |  |   Term            t1 = Deref(ARG1), t3 = Deref(ARG3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-13 21:30:06 +00:00
										 |  |  |   if (IsVarTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(INSTANTIATION_ERROR,t1,"set_value/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return (FALSE); | 
					
						
							| 
									
										
										
										
											2002-09-13 21:30:06 +00:00
										 |  |  |   } | 
					
						
							|  |  |  |   if (!IsAtomTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(TYPE_ERROR_ATOM,t1,"set_value/2"); | 
					
						
							| 
									
										
										
										
											2002-09-13 21:30:06 +00:00
										 |  |  |     return (FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   if (!Yap_unify_constant(ARG2, Yap_GetValue(AtomOfTerm(t1)))) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return (FALSE); | 
					
						
							|  |  |  |   if (!IsVarTerm(t3)) { | 
					
						
							|  |  |  |     if (IsAtomTerm(t3) || IsNumTerm(t3)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       Yap_PutValue(AtomOfTerm(t1), t3); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     } else | 
					
						
							|  |  |  |       return (FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return (TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_opdec( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  | {				/* '$opdec'(p,type,atom)		 */ | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   /* we know the arguments are integer, atom, atom */ | 
					
						
							|  |  |  |   Term            p = Deref(ARG1), t = Deref(ARG2), at = Deref(ARG3); | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  |   Term tmod = Deref(ARG4); | 
					
						
							|  |  |  |   if (tmod == TermProlog) { | 
					
						
							|  |  |  |     tmod = PROLOG_MODULE; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return Yap_OpDec((int) IntOfTerm(p), RepAtom(AtomOfTerm(t))->StrOfAE, | 
					
						
							|  |  |  | 		   AtomOfTerm(at), tmod); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef NO_STRTOD
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if HAVE_CTYPE_H
 | 
					
						
							|  |  |  | #include <ctype.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | double  | 
					
						
							|  |  |  | strtod(s, pe) | 
					
						
							|  |  |  | 	char           *s, **pe; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	double          r = atof(s); | 
					
						
							|  |  |  | 	*pe = s; | 
					
						
							|  |  |  | 	while (*s == ' ') | 
					
						
							|  |  |  | 		++s; | 
					
						
							|  |  |  | 	if (*s == '+' || *s == '-') | 
					
						
							|  |  |  | 		++s; | 
					
						
							|  |  |  | 	if (!isdigit(*s)) | 
					
						
							|  |  |  | 		return (r); | 
					
						
							|  |  |  | 	while (isdigit(*s)) | 
					
						
							|  |  |  | 		++s; | 
					
						
							|  |  |  | 	if (*s == '.') | 
					
						
							|  |  |  | 		++s; | 
					
						
							|  |  |  | 	while (isdigit(*s)) | 
					
						
							|  |  |  | 		++s; | 
					
						
							|  |  |  | 	if (*s == 'e' || *s == 'E') | 
					
						
							|  |  |  | 		++s; | 
					
						
							|  |  |  | 	if (*s == '+' || *s == '-') | 
					
						
							|  |  |  | 		++s; | 
					
						
							|  |  |  | 	while (isdigit(*s)) | 
					
						
							|  |  |  | 		++s; | 
					
						
							|  |  |  | 	*pe = s; | 
					
						
							|  |  |  | 	return (r); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-11-16 14:26:00 +00:00
										 |  |  | #ifndef INFINITY
 | 
					
						
							|  |  |  | #define INFINITY (1.0/0.0)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | static UInt  | 
					
						
							|  |  |  | runtime( USES_REGS1 ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   return(Yap_cputime()-Yap_total_gc_time()-Yap_total_stack_shift_time()); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  | /* $runtime(-SinceInterval,-SinceStart)	 */ | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  | p_runtime( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  |   Int now, interval, | 
					
						
							|  |  |  |     gc_time, | 
					
						
							|  |  |  |     ss_time; | 
					
						
							|  |  |  |   Term tnow, tinterval; | 
					
						
							| 
									
										
										
										
											2005-03-02 19:48:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  |   Yap_cputime_interval(&now, &interval); | 
					
						
							|  |  |  |   gc_time = Yap_total_gc_time(); | 
					
						
							|  |  |  |   now -= gc_time; | 
					
						
							|  |  |  |   ss_time = Yap_total_stack_shift_time(); | 
					
						
							|  |  |  |   now -= ss_time; | 
					
						
							|  |  |  |   interval -= (gc_time-LOCAL_LastGcTime)+(ss_time-LOCAL_LastSSTime); | 
					
						
							|  |  |  |   LOCAL_LastGcTime = gc_time; | 
					
						
							|  |  |  |   LOCAL_LastSSTime = ss_time; | 
					
						
							|  |  |  |   tnow = MkIntegerTerm(now); | 
					
						
							|  |  |  |   tinterval = MkIntegerTerm(interval); | 
					
						
							|  |  |  |   return( Yap_unify_constant(ARG1, tnow) &&  | 
					
						
							|  |  |  | 	 Yap_unify_constant(ARG2, tinterval) ); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  | /* $cputime(-SinceInterval,-SinceStart)	 */ | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  | p_cputime( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  |   Int now, interval; | 
					
						
							|  |  |  |   Yap_cputime_interval(&now, &interval); | 
					
						
							|  |  |  |   return( Yap_unify_constant(ARG1, MkIntegerTerm(now)) &&  | 
					
						
							|  |  |  | 	 Yap_unify_constant(ARG2, MkIntegerTerm(interval)) ); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-08 23:02:16 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  | p_systime( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2007-10-08 23:02:16 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  |   Int now, interval; | 
					
						
							|  |  |  |   Yap_systime_interval(&now, &interval); | 
					
						
							|  |  |  |   return( Yap_unify_constant(ARG1, MkIntegerTerm(now)) &&  | 
					
						
							|  |  |  | 	 Yap_unify_constant(ARG2, MkIntegerTerm(interval)) ); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-02-17 11:31:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  | static Int  | 
					
						
							|  |  |  | p_walltime( USES_REGS1 ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   Int now, interval; | 
					
						
							|  |  |  |   Yap_walltime_interval(&now, &interval); | 
					
						
							|  |  |  |   return( Yap_unify_constant(ARG1, MkIntegerTerm(now)) &&  | 
					
						
							|  |  |  | 	 Yap_unify_constant(ARG2, MkIntegerTerm(interval)) ); | 
					
						
							| 
									
										
										
										
											2007-10-08 23:02:16 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_univ( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* A =.. L			 */ | 
					
						
							|  |  |  |   unsigned int    arity; | 
					
						
							|  |  |  |   register Term   tin; | 
					
						
							|  |  |  |   Term            twork, t2; | 
					
						
							|  |  |  |   Atom            at; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   tin = Deref(ARG1); | 
					
						
							|  |  |  |   t2 = Deref(ARG2); | 
					
						
							|  |  |  |   if (IsVarTerm(tin)) { | 
					
						
							|  |  |  |     /* we need to have a list */ | 
					
						
							|  |  |  |     Term           *Ar; | 
					
						
							|  |  |  |     if (IsVarTerm(t2)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       Yap_Error(INSTANTIATION_ERROR, t2, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       return(FALSE); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (!IsPairTerm(t2)) { | 
					
						
							|  |  |  |       if (t2 == TermNil) | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 	Yap_Error(DOMAIN_ERROR_NON_EMPTY_LIST, t2, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       else | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 	Yap_Error(TYPE_ERROR_LIST, ARG2, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       return (FALSE); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     twork = HeadOfTerm(t2); | 
					
						
							|  |  |  |     if (IsVarTerm(twork)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       Yap_Error(INSTANTIATION_ERROR, twork, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       return(FALSE); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (IsNumTerm(twork)) { | 
					
						
							|  |  |  |       Term tt = TailOfTerm(t2); | 
					
						
							|  |  |  |       if (IsVarTerm(tt) || tt != MkAtomTerm(AtomNil)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 	Yap_Error(TYPE_ERROR_ATOM, twork, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	return (FALSE); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       return (Yap_unify_constant(ARG1, twork)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |     if (!IsAtomTerm(twork)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       Yap_Error(TYPE_ERROR_ATOM, twork, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       return (FALSE); | 
					
						
							|  |  |  |     }       | 
					
						
							|  |  |  |     at = AtomOfTerm(twork); | 
					
						
							|  |  |  |     twork = TailOfTerm(t2); | 
					
						
							|  |  |  |     if (IsVarTerm(twork)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       Yap_Error(INSTANTIATION_ERROR, twork, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       return(FALSE); | 
					
						
							|  |  |  |     } else if (!IsPairTerm(twork)) { | 
					
						
							|  |  |  |       if (twork != TermNil) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 	Yap_Error(TYPE_ERROR_LIST, ARG2, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	return(FALSE); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       return (Yap_unify_constant(ARG1, MkAtomTerm(at))); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2002-05-07 21:19:52 +00:00
										 |  |  |   build_compound: | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     /* build the term directly on the heap */ | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  |     Ar = HR; | 
					
						
							|  |  |  |     HR++; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |      | 
					
						
							|  |  |  |     while (!IsVarTerm(twork) && IsPairTerm(twork)) { | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  |       *HR++ = HeadOfTerm(twork); | 
					
						
							|  |  |  |       if (HR > ASP - 1024) { | 
					
						
							| 
									
										
										
										
											2002-05-07 21:19:52 +00:00
										 |  |  | 	/* restore space */ | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  | 	HR = Ar; | 
					
						
							|  |  |  | 	if (!Yap_gcl((ASP-HR)*sizeof(CELL), 2, ENV, gc_P(P,CP))) { | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  | 	  Yap_Error(OUT_OF_STACK_ERROR, TermNil, LOCAL_ErrorMessage); | 
					
						
							| 
									
										
										
										
											2006-08-07 18:51:44 +00:00
										 |  |  | 	  return FALSE; | 
					
						
							| 
									
										
										
										
											2002-10-10 05:58:49 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-05-07 21:19:52 +00:00
										 |  |  | 	twork = TailOfTerm(Deref(ARG2)); | 
					
						
							|  |  |  | 	goto build_compound; | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       twork = TailOfTerm(twork); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (IsVarTerm(twork)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       Yap_Error(INSTANTIATION_ERROR, twork, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       return(FALSE); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (twork != TermNil) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       Yap_Error(TYPE_ERROR_LIST, ARG2, "(=..)/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       return (FALSE); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #ifdef SFUNC
 | 
					
						
							|  |  |  |     DOES_NOT_WORK(); | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       SFEntry        *pe = (SFEntry *) Yap_GetAProp(at, SFProperty); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       if (pe) | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 	twork = MkSFTerm(Yap_MkFunctor(at, SFArity), | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 			 arity, CellPtr(TR), pe->NilValue); | 
					
						
							|  |  |  |       else | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 	twork = Yap_MkApplTerm(Yap_MkFunctor(at, arity), | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 			   arity, CellPtr(TR)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  |     arity = HR-Ar-1; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     if (at == AtomDot && arity == 2) { | 
					
						
							|  |  |  |       Ar[0] = Ar[1]; | 
					
						
							|  |  |  |       Ar[1] = Ar[2]; | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  |       HR --; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       twork = AbsPair(Ar); | 
					
						
							|  |  |  |     } else {       | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       *Ar = (CELL)(Yap_MkFunctor(at, arity)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       twork = AbsAppl(Ar); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     return (Yap_unify(ARG1, twork)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   } | 
					
						
							|  |  |  |   if (IsAtomicTerm(tin)) { | 
					
						
							|  |  |  |     twork = MkPairTerm(tin, MkAtomTerm(AtomNil)); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     return (Yap_unify(twork, ARG2)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   } | 
					
						
							|  |  |  |   if (IsRefTerm(tin)) | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   if (IsApplTerm(tin)) { | 
					
						
							|  |  |  |     Functor         fun = FunctorOfTerm(tin); | 
					
						
							| 
									
										
										
										
											2014-02-02 21:45:47 +00:00
										 |  |  |     if (IsExtensionFunctor ( fun ) ) { | 
					
						
							|  |  |  |       twork = MkPairTerm(tin, MkAtomTerm(AtomNil)); | 
					
						
							|  |  |  |       return (Yap_unify(twork, ARG2)); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     arity = ArityOfFunctor(fun); | 
					
						
							|  |  |  |     at = NameOfFunctor(fun); | 
					
						
							|  |  |  | #ifdef SFUNC
 | 
					
						
							|  |  |  |     if (arity == SFArity) { | 
					
						
							|  |  |  |       CELL           *p = CellPtr(TR); | 
					
						
							|  |  |  |       CELL           *q = ArgsOfSFTerm(tin); | 
					
						
							|  |  |  |       int             argno = 1; | 
					
						
							|  |  |  |       while (*q) { | 
					
						
							|  |  |  | 	while (*q > argno++) | 
					
						
							|  |  |  | 	  *p++ = MkVarTerm(); | 
					
						
							|  |  |  | 	++q; | 
					
						
							|  |  |  | 	*p++ = Deref(*q++); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       twork = Yap_ArrayToList(CellPtr(TR), argno - 1); | 
					
						
							| 
									
										
										
										
											2002-10-29 04:19:09 +00:00
										 |  |  |       while (IsIntTerm(twork)) { | 
					
						
							| 
									
										
										
										
											2008-08-28 04:43:00 +01:00
										 |  |  | 	if (!Yap_gc(2, ENV, gc_P(P,CP))) { | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  | 	  Yap_Error(OUT_OF_STACK_ERROR, TermNil, LOCAL_ErrorMessage); | 
					
						
							| 
									
										
										
										
											2002-10-29 04:19:09 +00:00
										 |  |  | 	  return(FALSE); | 
					
						
							|  |  |  | 	}     | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 	twork = Yap_ArrayToList(CellPtr(TR), argno - 1); | 
					
						
							| 
									
										
										
										
											2002-10-29 04:19:09 +00:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     } else | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2002-05-07 21:19:52 +00:00
										 |  |  |       { | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  | 	while (HR+arity*2 > ASP-1024) { | 
					
						
							| 
									
										
										
										
											2008-08-28 04:43:00 +01:00
										 |  |  | 	  if (!Yap_gcl((arity*2)*sizeof(CELL), 2, ENV, gc_P(P,CP))) { | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  | 	    Yap_Error(OUT_OF_STACK_ERROR, TermNil, LOCAL_ErrorMessage); | 
					
						
							| 
									
										
										
										
											2002-10-10 05:58:49 +00:00
										 |  |  | 	    return(FALSE); | 
					
						
							|  |  |  | 	  } | 
					
						
							| 
									
										
										
										
											2002-05-07 21:19:52 +00:00
										 |  |  | 	  tin = Deref(ARG1); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 	twork = Yap_ArrayToList(RepAppl(tin) + 1, arity); | 
					
						
							| 
									
										
										
										
											2002-05-07 21:19:52 +00:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   } else { | 
					
						
							|  |  |  |     /* We found a list */ | 
					
						
							|  |  |  |     at = AtomDot; | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     twork = Yap_ArrayToList(RepPair(tin), 2); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   } | 
					
						
							|  |  |  |   twork = MkPairTerm(MkAtomTerm(at), twork); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return (Yap_unify(ARG2, twork)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_abort( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* abort			 */ | 
					
						
							|  |  |  |   /* make sure we won't go creeping around */ | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_Error(PURE_ABORT, TermNil, ""); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   return(FALSE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | #ifdef BEAM
 | 
					
						
							|  |  |  | extern void exit_eam(char *s);  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Int  | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_halt( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* halt				 */ | 
					
						
							|  |  |  |   Term t = Deref(ARG1); | 
					
						
							|  |  |  |   Int out; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | #ifdef BEAM
 | 
					
						
							|  |  |  |   if (EAM) exit_eam("\n\n[ Prolog execution halted ]\n"); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   if (IsVarTerm(t)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(INSTANTIATION_ERROR,t,"halt/1"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (!IsIntegerTerm(t)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(TYPE_ERROR_INTEGER,t,"halt/1"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   out = IntegerOfTerm(t); | 
					
						
							| 
									
										
										
										
											2004-04-27 15:14:38 +00:00
										 |  |  |   Yap_exit(out); | 
					
						
							|  |  |  |   return TRUE; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | cont_current_predicate( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2001-11-15 00:01:43 +00:00
										 |  |  |   PredEntry      *pp = (PredEntry *)IntegerOfTerm(EXTRA_CBACK_ARG(3,1)); | 
					
						
							| 
									
										
										
										
											2001-10-03 13:39:16 +00:00
										 |  |  |   UInt Arity; | 
					
						
							| 
									
										
										
										
											2003-10-28 01:16:03 +00:00
										 |  |  |   Term name; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-08-14 16:00:54 +00:00
										 |  |  |   while (pp != NULL) { | 
					
						
							| 
									
										
										
										
											2007-04-18 23:01:16 +00:00
										 |  |  |     if (pp->PredFlags & HiddenPredFlag) { | 
					
						
							| 
									
										
										
										
											2002-08-14 16:00:54 +00:00
										 |  |  |       pp = pp->NextPredOfModule; | 
					
						
							| 
									
										
										
										
											2007-04-18 23:01:16 +00:00
										 |  |  |     } else | 
					
						
							| 
									
										
										
										
											2002-08-14 16:00:54 +00:00
										 |  |  |       break; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2001-10-03 13:39:16 +00:00
										 |  |  |   if (pp == NULL) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     cut_fail(); | 
					
						
							| 
									
										
										
										
											2001-11-15 00:01:43 +00:00
										 |  |  |   EXTRA_CBACK_ARG(3,1) = (CELL)MkIntegerTerm((Int)(pp->NextPredOfModule)); | 
					
						
							| 
									
										
										
										
											2002-09-17 16:37:48 +00:00
										 |  |  |   if (pp->FunctorOfPred == FunctorModule) | 
					
						
							| 
									
										
										
										
											2008-04-06 11:53:02 +00:00
										 |  |  |     return FALSE; | 
					
						
							| 
									
										
										
										
											2004-02-12 12:37:12 +00:00
										 |  |  |   if (pp->ModuleOfPred != IDB_MODULE) { | 
					
						
							| 
									
										
										
										
											2003-10-28 01:16:03 +00:00
										 |  |  |     Arity = pp->ArityOfPE; | 
					
						
							|  |  |  |     if (Arity) | 
					
						
							|  |  |  |       name = MkAtomTerm(NameOfFunctor(pp->FunctorOfPred)); | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       name = MkAtomTerm((Atom)pp->FunctorOfPred); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     if (pp->PredFlags & NumberDBPredFlag) { | 
					
						
							|  |  |  |       name = MkIntegerTerm(pp->src.IndxId); | 
					
						
							|  |  |  |       Arity = 0; | 
					
						
							|  |  |  |     } else if (pp->PredFlags & AtomDBPredFlag) { | 
					
						
							|  |  |  |       name = MkAtomTerm((Atom)pp->FunctorOfPred); | 
					
						
							|  |  |  |       Arity = 0; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       Functor f = pp->FunctorOfPred; | 
					
						
							|  |  |  |       name = MkAtomTerm(NameOfFunctor(f)); | 
					
						
							|  |  |  |       Arity = ArityOfFunctor(f); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2012-11-08 14:07:55 +00:00
										 |  |  |   if (pp->PredFlags & HiddenPredFlag) | 
					
						
							|  |  |  |     return FALSE; | 
					
						
							| 
									
										
										
										
											2008-04-06 11:53:02 +00:00
										 |  |  |   return | 
					
						
							|  |  |  |     Yap_unify(ARG2,name) && | 
					
						
							|  |  |  |     Yap_unify(ARG3, MkIntegerTerm((Int)Arity)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | init_current_predicate( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2001-11-15 00:01:43 +00:00
										 |  |  |   Term t1 = Deref(ARG1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(t1) || !IsAtomTerm(t1)) cut_fail(); | 
					
						
							| 
									
										
										
										
											2004-02-12 17:09:17 +00:00
										 |  |  |   EXTRA_CBACK_ARG(3,1) = MkIntegerTerm((Int)Yap_ModulePred(t1)); | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   return cont_current_predicate( PASS_REGS1 ); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | cont_current_predicate_for_atom( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Prop pf = (Prop)IntegerOfTerm(EXTRA_CBACK_ARG(3,1)); | 
					
						
							| 
									
										
										
										
											2004-02-12 12:37:12 +00:00
										 |  |  |   Term mod = Deref(ARG2); | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   while (pf != NIL) { | 
					
						
							|  |  |  |     FunctorEntry *pp = RepFunctorProp(pf); | 
					
						
							|  |  |  |     if (IsFunctorProperty(pp->KindOfPE)) { | 
					
						
							| 
									
										
										
										
											2012-06-12 14:50:07 +01:00
										 |  |  |       Prop p0; | 
					
						
							| 
									
										
										
										
											2014-06-11 19:44:01 +01:00
										 |  |  |       FUNC_READ_LOCK(pp); | 
					
						
							| 
									
										
										
										
											2012-06-12 14:50:07 +01:00
										 |  |  |       p0 = pp->PropsOfFE; | 
					
						
							|  |  |  |       if (p0) { | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  | 	PredEntry *p = RepPredProp(p0); | 
					
						
							|  |  |  | 	if (p->ModuleOfPred == mod || | 
					
						
							|  |  |  | 	    p->ModuleOfPred == 0) { | 
					
						
							| 
									
										
										
										
											2012-06-12 14:50:07 +01:00
										 |  |  | 	  UInt ar = p->ArityOfPE; | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  | 	  /* we found the predicate */ | 
					
						
							| 
									
										
										
										
											2008-04-06 11:53:02 +00:00
										 |  |  | 	  EXTRA_CBACK_ARG(3,1) = MkIntegerTerm((Int)(pp->NextOfPE)); | 
					
						
							| 
									
										
										
										
											2014-06-11 19:44:01 +01:00
										 |  |  | 	  FUNC_READ_UNLOCK(pp); | 
					
						
							| 
									
										
										
										
											2008-04-06 11:53:02 +00:00
										 |  |  | 	  return  | 
					
						
							| 
									
										
										
										
											2012-06-12 14:50:07 +01:00
										 |  |  | 	    Yap_unify(ARG3,MkIntegerTerm(ar)); | 
					
						
							|  |  |  | 	} else if (p->NextOfPE) { | 
					
						
							|  |  |  | 	  UInt hash = PRED_HASH(pp,mod,PredHashTableSize); | 
					
						
							|  |  |  | 	  READ_LOCK(PredHashRWLock); | 
					
						
							|  |  |  | 	  PredEntry *p = PredHash[hash]; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | 	  while (p) { | 
					
						
							|  |  |  | 	    if (p->FunctorOfPred == pp && | 
					
						
							|  |  |  | 		p->ModuleOfPred == mod) | 
					
						
							|  |  |  | 	      { | 
					
						
							|  |  |  | 		READ_UNLOCK(PredHashRWLock); | 
					
						
							| 
									
										
										
										
											2014-06-11 19:44:01 +01:00
										 |  |  |         FUNC_READ_UNLOCK(pp); | 
					
						
							| 
									
										
										
										
											2012-06-12 14:50:07 +01:00
										 |  |  | 		/* we found the predicate */ | 
					
						
							|  |  |  | 		EXTRA_CBACK_ARG(3,1) = MkIntegerTerm((Int)(p->NextOfPE)); | 
					
						
							|  |  |  | 		return Yap_unify(ARG3,MkIntegerTerm(p->ArityOfPE)); | 
					
						
							|  |  |  | 	      } | 
					
						
							|  |  |  | 	    p = RepPredProp(p->NextOfPE); | 
					
						
							|  |  |  | 	  } | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2014-06-11 19:44:01 +01:00
										 |  |  |       FUNC_READ_UNLOCK(pp); | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  |     } else if (pp->KindOfPE == PEProp) { | 
					
						
							|  |  |  |       PredEntry *pe = RepPredProp(pf); | 
					
						
							| 
									
										
										
										
											2012-07-02 19:48:58 +01:00
										 |  |  |       PELOCK(31,pe); | 
					
						
							| 
									
										
										
										
											2012-11-08 14:07:55 +00:00
										 |  |  |       if (pe->PredFlags & HiddenPredFlag) | 
					
						
							|  |  |  | 	return FALSE; | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  |       if (pe->ModuleOfPred == mod || | 
					
						
							|  |  |  | 	  pe->ModuleOfPred == 0) { | 
					
						
							|  |  |  | 	/* we found the predicate */ | 
					
						
							| 
									
										
										
										
											2008-04-06 11:53:02 +00:00
										 |  |  | 	EXTRA_CBACK_ARG(3,1) = MkIntegerTerm((Int)(pp->NextOfPE)); | 
					
						
							| 
									
										
										
										
											2012-07-02 19:48:58 +01:00
										 |  |  | 	UNLOCKPE(31,pe); | 
					
						
							| 
									
										
										
										
											2012-06-12 14:50:07 +01:00
										 |  |  | 	return Yap_unify(ARG3,MkIntTerm(0)); | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2012-07-02 19:48:58 +01:00
										 |  |  |       UNLOCKPE(31,pe); | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |     pf = pp->NextOfPE; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   cut_fail(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | init_current_predicate_for_atom( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term t1 = Deref(ARG1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(t1) || !IsAtomTerm(t1)) cut_fail(); | 
					
						
							|  |  |  |   EXTRA_CBACK_ARG(3,1) = MkIntegerTerm((Int)RepAtom(AtomOfTerm(t1))->PropsOfAE); | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   return (cont_current_predicate_for_atom( PASS_REGS1 )); | 
					
						
							| 
									
										
										
										
											2002-09-02 17:33:00 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static OpEntry * | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | NextOp(OpEntry *pp USES_REGS) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-11-27 16:09:48 +00:00
										 |  |  |   while (!EndOfPAEntr(pp) && pp->KindOfPE != OpProperty && | 
					
						
							|  |  |  | 	 (pp->OpModule != PROLOG_MODULE || pp->OpModule != CurrentModule)) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     pp = RepOpProp(pp->NextOfPE); | 
					
						
							|  |  |  |   return (pp); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-27 16:09:48 +00:00
										 |  |  | int | 
					
						
							|  |  |  | Yap_IsOp(Atom at) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   CACHE_REGS | 
					
						
							|  |  |  |   OpEntry *op = NextOp(RepOpProp((Prop)(RepAtom(at)->PropsOfAE)) PASS_REGS); | 
					
						
							| 
									
										
										
										
											2009-11-27 16:09:48 +00:00
										 |  |  |   return (!EndOfPAEntr(op)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-26 14:14:10 +00:00
										 |  |  | int | 
					
						
							|  |  |  | Yap_IsOpMaxPrio(Atom at) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   CACHE_REGS | 
					
						
							|  |  |  |   OpEntry *op = NextOp(RepOpProp((Prop)(RepAtom(at)->PropsOfAE)) PASS_REGS); | 
					
						
							| 
									
										
										
										
											2010-02-26 14:14:10 +00:00
										 |  |  |   int max; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (EndOfPAEntr(op)) | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  |   max = (op->Prefix & 0xfff); | 
					
						
							|  |  |  |   if ((op->Infix & 0xfff) > max) | 
					
						
							|  |  |  |     max = op->Infix & 0xfff; | 
					
						
							|  |  |  |   if ((op->Posfix & 0xfff) > max) | 
					
						
							|  |  |  |     max = op->Posfix & 0xfff; | 
					
						
							|  |  |  |   return max; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | unify_op(OpEntry         *op USES_REGS) | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term tmod = op->OpModule; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (tmod == PROLOG_MODULE) | 
					
						
							|  |  |  |     tmod = TermProlog; | 
					
						
							|  |  |  |   return  | 
					
						
							|  |  |  |     Yap_unify_constant(ARG2,tmod) && | 
					
						
							|  |  |  |     Yap_unify_constant(ARG3,MkIntegerTerm(op->Prefix)) && | 
					
						
							|  |  |  |     Yap_unify_constant(ARG4,MkIntegerTerm(op->Infix)) && | 
					
						
							|  |  |  |     Yap_unify_constant(ARG5,MkIntegerTerm(op->Posfix)); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | cont_current_op( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |   OpEntry         *op = (OpEntry *)IntegerOfTerm(EXTRA_CBACK_ARG(5,1)), *next; | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   READ_LOCK(op->OpRWLock); | 
					
						
							|  |  |  |   next = op->OpNext; | 
					
						
							|  |  |  |   if (Yap_unify_constant(ARG1,MkAtomTerm(op->OpName)) && | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |       unify_op(op PASS_REGS)) { | 
					
						
							| 
									
										
										
										
											2009-12-17 16:11:02 -02:00
										 |  |  |     READ_UNLOCK(op->OpRWLock); | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |     if (next) { | 
					
						
							|  |  |  |       EXTRA_CBACK_ARG(5,1) = (CELL) MkIntegerTerm((CELL)next); | 
					
						
							|  |  |  |       return TRUE; | 
					
						
							|  |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       cut_succeed(); | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |   } else { | 
					
						
							| 
									
										
										
										
											2009-12-17 16:11:02 -02:00
										 |  |  |     READ_UNLOCK(op->OpRWLock); | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |     if (next) { | 
					
						
							|  |  |  |       EXTRA_CBACK_ARG(5,1) = (CELL) MkIntegerTerm((CELL)next); | 
					
						
							|  |  |  |       return FALSE; | 
					
						
							| 
									
										
										
										
											2006-04-28 13:23:23 +00:00
										 |  |  |     } else { | 
					
						
							|  |  |  |       cut_fail(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | init_current_op( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* current_op(-Precedence,-Type,-Atom)		 */ | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |   EXTRA_CBACK_ARG(5,1) = (CELL) MkIntegerTerm((CELL)OpList); | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   return cont_current_op( PASS_REGS1 ); | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | cont_current_atom_op( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   OpEntry         *op = (OpEntry *)IntegerOfTerm(EXTRA_CBACK_ARG(5,1)), *next; | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   READ_LOCK(op->OpRWLock); | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   next = NextOp(RepOpProp(op->NextOfPE) PASS_REGS); | 
					
						
							|  |  |  |   if (unify_op(op PASS_REGS)) { | 
					
						
							| 
									
										
										
										
											2009-12-17 16:11:02 -02:00
										 |  |  |     READ_UNLOCK(op->OpRWLock); | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |     if (next) { | 
					
						
							|  |  |  |       EXTRA_CBACK_ARG(5,1) = (CELL) MkIntegerTerm((CELL)next); | 
					
						
							|  |  |  |       return TRUE; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       cut_succeed(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2006-04-28 13:23:23 +00:00
										 |  |  |   } else { | 
					
						
							| 
									
										
										
										
											2009-12-17 16:11:02 -02:00
										 |  |  |     READ_UNLOCK(op->OpRWLock); | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |     if (next) { | 
					
						
							|  |  |  |       EXTRA_CBACK_ARG(5,1) = (CELL) MkIntegerTerm((CELL)next); | 
					
						
							|  |  |  |       return FALSE; | 
					
						
							|  |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2006-04-28 13:23:23 +00:00
										 |  |  |       cut_fail(); | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | init_current_atom_op( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  | {				/* current_op(-Precedence,-Type,-Atom)		 */ | 
					
						
							|  |  |  |   Term t = Deref(ARG1); | 
					
						
							|  |  |  |   AtomEntry *ae; | 
					
						
							|  |  |  |   OpEntry *ope; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(t) || !IsAtomTerm(t)) { | 
					
						
							|  |  |  |     Yap_Error(TYPE_ERROR_ATOM,t,"current_op/3"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     cut_fail(); | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |   } | 
					
						
							|  |  |  |   ae = RepAtom(AtomOfTerm(t)); | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   if (EndOfPAEntr((ope = NextOp(RepOpProp(ae->PropsOfAE) PASS_REGS)))) { | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |     cut_fail(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   EXTRA_CBACK_ARG(5,1) = (CELL) MkIntegerTerm((Int)ope); | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   return cont_current_atom_op( PASS_REGS1 ); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_flags( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-11-15 00:01:43 +00:00
										 |  |  | {				/* $flags(+Functor,+Mod,?OldFlags,?NewFlags) */ | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   PredEntry      *pe; | 
					
						
							|  |  |  |   Int             newFl; | 
					
						
							|  |  |  |   Term t1 = Deref(ARG1); | 
					
						
							| 
									
										
										
										
											2004-02-12 12:37:12 +00:00
										 |  |  |   Term mod = Deref(ARG2); | 
					
						
							| 
									
										
										
										
											2001-11-15 00:01:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-02-12 12:37:12 +00:00
										 |  |  |   if (IsVarTerm(mod) || !IsAtomTerm(mod)) { | 
					
						
							| 
									
										
										
										
											2001-11-15 00:01:43 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   if (IsVarTerm(t1)) | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							| 
									
										
										
										
											2001-10-30 16:42:05 +00:00
										 |  |  |   if (IsAtomTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2007-11-06 17:02:13 +00:00
										 |  |  |     while ((pe = RepPredProp(PredPropByAtom(AtomOfTerm(t1), mod)))== NULL) { | 
					
						
							|  |  |  |       if (!Yap_growheap(FALSE, 0, NULL)) { | 
					
						
							|  |  |  | 	Yap_Error(OUT_OF_HEAP_ERROR, ARG1, "while generating new predicate"); | 
					
						
							|  |  |  | 	return FALSE; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       t1 = Deref(ARG1); | 
					
						
							|  |  |  |       mod = Deref(ARG2); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2001-10-30 16:42:05 +00:00
										 |  |  |   } else if (IsApplTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     Functor         funt = FunctorOfTerm(t1); | 
					
						
							| 
									
										
										
										
											2007-11-06 17:02:13 +00:00
										 |  |  |     while ((pe = RepPredProp(PredPropByFunc(funt, mod)))== NULL) { | 
					
						
							|  |  |  |       if (!Yap_growheap(FALSE, 0, NULL)) { | 
					
						
							|  |  |  | 	Yap_Error(OUT_OF_HEAP_ERROR, ARG1, "while generating new predicate"); | 
					
						
							|  |  |  | 	return FALSE; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       t1 = Deref(ARG1); | 
					
						
							|  |  |  |       mod = Deref(ARG2); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   } else | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   if (EndOfPAEntr(pe)) | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							| 
									
										
										
										
											2010-07-25 11:22:16 +01:00
										 |  |  |   PELOCK(92,pe); | 
					
						
							| 
									
										
										
										
											2003-12-04 18:13:04 +00:00
										 |  |  |   if (!Yap_unify_constant(ARG3, MkIntegerTerm(pe->PredFlags))) { | 
					
						
							| 
									
										
										
										
											2007-11-26 23:43:10 +00:00
										 |  |  |     UNLOCK(pe->PELock); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2001-11-15 00:01:43 +00:00
										 |  |  |   ARG4 = Deref(ARG4); | 
					
						
							|  |  |  |   if (IsVarTerm(ARG4)) { | 
					
						
							| 
									
										
										
										
											2007-11-26 23:43:10 +00:00
										 |  |  |     UNLOCK(pe->PELock); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return (TRUE); | 
					
						
							| 
									
										
										
										
											2003-12-04 18:13:04 +00:00
										 |  |  |   } else if (!IsIntegerTerm(ARG4)) { | 
					
						
							| 
									
										
										
										
											2008-12-04 23:33:32 +00:00
										 |  |  |     Term te = Yap_Eval(ARG4); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-04 23:33:32 +00:00
										 |  |  |     if (IsIntegerTerm(te)) { | 
					
						
							|  |  |  |       newFl = IntegerOfTerm(te); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2007-11-26 23:43:10 +00:00
										 |  |  |       UNLOCK(pe->PELock); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |       Yap_Error(TYPE_ERROR_INTEGER, ARG4, "flags"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       return(FALSE); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } else | 
					
						
							| 
									
										
										
										
											2003-12-04 18:13:04 +00:00
										 |  |  |     newFl = IntegerOfTerm(ARG4); | 
					
						
							|  |  |  |   pe->PredFlags = (CELL)newFl; | 
					
						
							| 
									
										
										
										
											2007-11-26 23:43:10 +00:00
										 |  |  |   UNLOCK(pe->PELock); | 
					
						
							|  |  |  |   return TRUE; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-25 11:26:42 +01:00
										 |  |  | static Int  | 
					
						
							|  |  |  | p_set_flag( USES_REGS1 ) | 
					
						
							|  |  |  | {				/* $flags(+Functor,+Mod,?OldFlags,?NewFlags) */ | 
					
						
							|  |  |  |   PredEntry      *pe; | 
					
						
							|  |  |  |   Term t1 = Deref(ARG1); | 
					
						
							|  |  |  |   Term mod = Deref(ARG2); | 
					
						
							|  |  |  |   Term v = Deref(ARG4); | 
					
						
							|  |  |  |   char *s; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(mod) || !IsAtomTerm(mod)) { | 
					
						
							|  |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (IsVarTerm(t1)) | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   if (IsAtomTerm(t1)) { | 
					
						
							|  |  |  |     while ((pe = RepPredProp(PredPropByAtom(AtomOfTerm(t1), mod)))== NULL) { | 
					
						
							|  |  |  |       if (!Yap_growheap(FALSE, 0, NULL)) { | 
					
						
							|  |  |  | 	Yap_Error(OUT_OF_HEAP_ERROR, ARG1, "while generating new predicate"); | 
					
						
							|  |  |  | 	return FALSE; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       t1 = Deref(ARG1); | 
					
						
							|  |  |  |       mod = Deref(ARG2); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } else if (IsApplTerm(t1)) { | 
					
						
							|  |  |  |     Functor         funt = FunctorOfTerm(t1); | 
					
						
							|  |  |  |     while ((pe = RepPredProp(PredPropByFunc(funt, mod)))== NULL) { | 
					
						
							|  |  |  |       if (!Yap_growheap(FALSE, 0, NULL)) { | 
					
						
							|  |  |  | 	Yap_Error(OUT_OF_HEAP_ERROR, ARG1, "while generating new predicate"); | 
					
						
							|  |  |  | 	return FALSE; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       t1 = Deref(ARG1); | 
					
						
							|  |  |  |       mod = Deref(ARG2); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } else | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   if (EndOfPAEntr(pe)) | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   ARG3 = Deref(ARG3); | 
					
						
							|  |  |  |   if (IsVarTerm(ARG3)) { | 
					
						
							|  |  |  |     UNLOCK(pe->PELock); | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   } else if (!IsAtomTerm(ARG3)) { | 
					
						
							|  |  |  |     Yap_Error(TYPE_ERROR_ATOM,ARG3,"set_property/1"); | 
					
						
							|  |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   v = Deref(ARG4); | 
					
						
							|  |  |  |   if (IsVarTerm(ARG4)) { | 
					
						
							|  |  |  |     UNLOCK(pe->PELock); | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   } else if (!IsIntTerm(v)) { | 
					
						
							|  |  |  |     Yap_Error(TYPE_ERROR_ATOM,v,"set_property/1"); | 
					
						
							|  |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   s = RepAtom(AtomOfTerm(ARG3))->StrOfAE; | 
					
						
							|  |  |  |   if (v == MkIntTerm(1)) { | 
					
						
							|  |  |  |     if (!strcmp(s, "quasi_quotation_syntax")) { | 
					
						
							|  |  |  |       pe->ExtraPredFlags |= QuasiQuotationPredFlag; | 
					
						
							|  |  |  |     } else if (!strcmp(s, "trace")) { | 
					
						
							|  |  |  |       // proc->ExtraPredFlags |= QuasiQuotationPredFlag;
 | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       fprintf( stderr, "not implemented"); | 
					
						
							|  |  |  |       UNLOCK(pe->PELock); | 
					
						
							|  |  |  |       return FALSE; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } else if (v == MkIntTerm(0)) { | 
					
						
							|  |  |  |     if (!strcmp(s, "quasi_quotation_syntax")) { | 
					
						
							|  |  |  |       pe->ExtraPredFlags &= ~QuasiQuotationPredFlag; | 
					
						
							|  |  |  |     } else if (!strcmp(s, "trace")) { | 
					
						
							|  |  |  |       // proc->ExtraPredFlags |= QuasiQuotationPredFlag;
 | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       fprintf( stderr, "not implemented"); | 
					
						
							|  |  |  |       UNLOCK(pe->PELock); | 
					
						
							|  |  |  |       return FALSE; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   UNLOCK(pe->PELock); | 
					
						
							|  |  |  |   return TRUE; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static int  | 
					
						
							|  |  |  | AlreadyHidden(char *name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   AtomEntry      *chain; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   READ_LOCK(INVISIBLECHAIN.AERWLock); | 
					
						
							|  |  |  |   chain = RepAtom(INVISIBLECHAIN.Entry); | 
					
						
							|  |  |  |   READ_UNLOCK(INVISIBLECHAIN.AERWLock); | 
					
						
							|  |  |  |   while (!EndOfPAEntr(chain) && strcmp(chain->StrOfAE, name) != 0) | 
					
						
							|  |  |  |     chain = RepAtom(chain->NextOfAE); | 
					
						
							|  |  |  |   if (EndOfPAEntr(chain)) | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   return (TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_hide( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* hide(+Atom)		 */ | 
					
						
							|  |  |  |   Atom            atomToInclude; | 
					
						
							|  |  |  |   Term t1 = Deref(ARG1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(INSTANTIATION_ERROR,t1,"hide/1"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (!IsAtomTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(TYPE_ERROR_ATOM,t1,"hide/1"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   atomToInclude = AtomOfTerm(t1); | 
					
						
							|  |  |  |   if (AlreadyHidden(RepAtom(atomToInclude)->StrOfAE)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(SYSTEM_ERROR,t1,"an atom of name %s was already hidden", | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	  RepAtom(atomToInclude)->StrOfAE); | 
					
						
							|  |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_ReleaseAtom(atomToInclude); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   WRITE_LOCK(INVISIBLECHAIN.AERWLock); | 
					
						
							|  |  |  |   WRITE_LOCK(RepAtom(atomToInclude)->ARWLock); | 
					
						
							|  |  |  |   RepAtom(atomToInclude)->NextOfAE = INVISIBLECHAIN.Entry; | 
					
						
							|  |  |  |   WRITE_UNLOCK(RepAtom(atomToInclude)->ARWLock); | 
					
						
							|  |  |  |   INVISIBLECHAIN.Entry = atomToInclude; | 
					
						
							|  |  |  |   WRITE_UNLOCK(INVISIBLECHAIN.AERWLock); | 
					
						
							|  |  |  |   return (TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_hidden( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* '$hidden'(+F)		 */ | 
					
						
							|  |  |  |   Atom            at; | 
					
						
							|  |  |  |   AtomEntry      *chain; | 
					
						
							|  |  |  |   Term t1 = Deref(ARG1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(t1)) | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   if (IsAtomTerm(t1)) | 
					
						
							|  |  |  |     at = AtomOfTerm(t1); | 
					
						
							|  |  |  |   else if (IsApplTerm(t1)) | 
					
						
							|  |  |  |     at = NameOfFunctor(FunctorOfTerm(t1)); | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   READ_LOCK(INVISIBLECHAIN.AERWLock); | 
					
						
							|  |  |  |   chain = RepAtom(INVISIBLECHAIN.Entry); | 
					
						
							|  |  |  |   while (!EndOfPAEntr(chain) && AbsAtom(chain) != at) | 
					
						
							|  |  |  |     chain = RepAtom(chain->NextOfAE); | 
					
						
							| 
									
										
										
										
											2001-10-30 22:13:18 +00:00
										 |  |  |   READ_UNLOCK(INVISIBLECHAIN.AERWLock); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   if (EndOfPAEntr(chain)) | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							|  |  |  |   return (TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_unhide( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | {				/* unhide(+Atom)		 */ | 
					
						
							|  |  |  |   AtomEntry      *atom, *old, *chain; | 
					
						
							|  |  |  |   Term t1 = Deref(ARG1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(INSTANTIATION_ERROR,t1,"unhide/1"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (!IsAtomTerm(t1)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(TYPE_ERROR_ATOM,t1,"unhide/1"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   atom = RepAtom(AtomOfTerm(t1)); | 
					
						
							|  |  |  |   WRITE_LOCK(atom->ARWLock); | 
					
						
							| 
									
										
										
										
											2001-10-30 16:42:05 +00:00
										 |  |  |   if (atom->PropsOfAE != NIL) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(SYSTEM_ERROR,t1,"cannot unhide an atom in use"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   WRITE_LOCK(INVISIBLECHAIN.AERWLock); | 
					
						
							|  |  |  |   chain = RepAtom(INVISIBLECHAIN.Entry); | 
					
						
							|  |  |  |   old = NIL; | 
					
						
							|  |  |  |   while (!EndOfPAEntr(chain) && strcmp(chain->StrOfAE, atom->StrOfAE) != 0) { | 
					
						
							|  |  |  |     old = chain; | 
					
						
							|  |  |  |     chain = RepAtom(chain->NextOfAE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (EndOfPAEntr(chain)) | 
					
						
							|  |  |  |     return (FALSE); | 
					
						
							| 
									
										
										
										
											2001-10-30 16:42:05 +00:00
										 |  |  |   atom->PropsOfAE = chain->PropsOfAE; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   if (old == NIL) | 
					
						
							|  |  |  |     INVISIBLECHAIN.Entry = chain->NextOfAE; | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     old->NextOfAE = chain->NextOfAE; | 
					
						
							|  |  |  |   WRITE_UNLOCK(INVISIBLECHAIN.AERWLock); | 
					
						
							|  |  |  |   WRITE_UNLOCK(atom->ARWLock); | 
					
						
							|  |  |  |   return (TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-11 17:38:10 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | Yap_show_statistics(void) | 
					
						
							| 
									
										
										
										
											2002-11-11 17:38:10 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   CACHE_REGS | 
					
						
							| 
									
										
										
										
											2006-05-18 16:33:05 +00:00
										 |  |  |   unsigned long int heap_space_taken; | 
					
						
							|  |  |  |   double frag; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if USE_SYSTEM_MALLOC && HAVE_MALLINFO
 | 
					
						
							|  |  |  |   struct mallinfo mi = mallinfo(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-19 14:31:32 +00:00
										 |  |  |   heap_space_taken = (mi.arena+mi.hblkhd)-Yap_HoleSize; | 
					
						
							| 
									
										
										
										
											2006-05-18 16:33:05 +00:00
										 |  |  | #else
 | 
					
						
							|  |  |  |   heap_space_taken =  | 
					
						
							| 
									
										
										
										
											2006-05-19 14:31:32 +00:00
										 |  |  |     (unsigned long int)(Unsigned(HeapTop)-Unsigned(Yap_HeapBase))-Yap_HoleSize; | 
					
						
							| 
									
										
										
										
											2006-05-18 16:33:05 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  |   frag  = (100.0*(heap_space_taken-HeapUsed))/heap_space_taken; | 
					
						
							| 
									
										
										
										
											2002-11-11 17:38:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-06 02:09:48 +00:00
										 |  |  |   Sfprintf(GLOBAL_stderr, "Code Space:  %ld (%ld bytes needed, %ld bytes used, fragmentation %.3f%%).\n",  | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | 	     (unsigned long int)(Unsigned (H0) - Unsigned (Yap_HeapBase)), | 
					
						
							|  |  |  | 	     (unsigned long int)(Unsigned(HeapTop)-Unsigned(Yap_HeapBase)), | 
					
						
							| 
									
										
										
										
											2002-11-11 17:38:10 +00:00
										 |  |  | 	     (unsigned long int)(HeapUsed), | 
					
						
							|  |  |  | 	     frag); | 
					
						
							| 
									
										
										
										
											2014-03-06 02:09:48 +00:00
										 |  |  |   Sfprintf(GLOBAL_stderr, "Stack Space: %ld (%ld for Global, %ld for local).\n",  | 
					
						
							| 
									
										
										
										
											2002-11-11 17:38:10 +00:00
										 |  |  | 	     (unsigned long int)(sizeof(CELL)*(LCL0-H0)), | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  | 	     (unsigned long int)(sizeof(CELL)*(HR-H0)), | 
					
						
							| 
									
										
										
										
											2002-11-11 17:38:10 +00:00
										 |  |  | 	     (unsigned long int)(sizeof(CELL)*(LCL0-ASP))); | 
					
						
							| 
									
										
										
										
											2014-03-06 02:09:48 +00:00
										 |  |  |   Sfprintf(GLOBAL_stderr, "Trail Space: %ld (%ld used).\n",  | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  | 	     (unsigned long int)(sizeof(tr_fr_ptr)*(Unsigned(LOCAL_TrailTop)-Unsigned(LOCAL_TrailBase))), | 
					
						
							|  |  |  | 	     (unsigned long int)(sizeof(tr_fr_ptr)*(Unsigned(TR)-Unsigned(LOCAL_TrailBase)))); | 
					
						
							| 
									
										
										
										
											2014-03-06 02:09:48 +00:00
										 |  |  |   Sfprintf(GLOBAL_stderr, "Runtime: %lds.\n", (unsigned long int)(runtime ( PASS_REGS1 ))); | 
					
						
							|  |  |  |   Sfprintf(GLOBAL_stderr, "Cputime: %lds.\n", (unsigned long int)(Yap_cputime ())); | 
					
						
							|  |  |  |   Sfprintf(GLOBAL_stderr, "Walltime: %lds.\n", (unsigned long int)(Yap_walltime ())); | 
					
						
							| 
									
										
										
										
											2002-11-11 17:38:10 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_heap_max( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term tmax = MkIntegerTerm(HeapMax); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return(Yap_unify(tmax, ARG1)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* The results of the next routines are not to be trusted too */ | 
					
						
							|  |  |  | /* much. Basically, any stack shifting will seriously confuse the */ | 
					
						
							|  |  |  | /* results */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int    TrailTide = -1, LocalTide = -1, GlobalTide = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* maximum Trail usage */ | 
					
						
							|  |  |  | static Int | 
					
						
							|  |  |  | TrailMax(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   CACHE_REGS | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   Int i; | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  |   Int TrWidth = Unsigned(LOCAL_TrailTop) - Unsigned(LOCAL_TrailBase); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   CELL *pt; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (TrailTide != TrWidth) { | 
					
						
							|  |  |  |     pt = (CELL *)TR; | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  |     while (pt+2 < (CELL *)LOCAL_TrailTop) { | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       if (pt[0] == 0 && | 
					
						
							|  |  |  | 	  pt[1] == 0 && | 
					
						
							|  |  |  | 	  pt[2] == 0) | 
					
						
							|  |  |  | 	break; | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	pt++; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  |     if (pt+2 < (CELL *)LOCAL_TrailTop) | 
					
						
							|  |  |  |       i = Unsigned(pt) - Unsigned(LOCAL_TrailBase); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     else | 
					
						
							|  |  |  |       i = TrWidth; | 
					
						
							|  |  |  |   } else | 
					
						
							|  |  |  |     return(TrWidth); | 
					
						
							|  |  |  |   if (TrailTide > i) | 
					
						
							|  |  |  |     i = TrailTide; | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     TrailTide = i; | 
					
						
							|  |  |  |   return(i); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_trail_max( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term tmax = MkIntegerTerm(TrailMax()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return(Yap_unify(tmax, ARG1)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |    | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* maximum Global usage */ | 
					
						
							|  |  |  | static Int | 
					
						
							|  |  |  | GlobalMax(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   CACHE_REGS | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   Int i; | 
					
						
							|  |  |  |   Int StkWidth = Unsigned(LCL0) - Unsigned(H0); | 
					
						
							|  |  |  |   CELL *pt; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (GlobalTide != StkWidth) { | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  |     pt = HR; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     while (pt+2 < ASP) { | 
					
						
							|  |  |  |       if (pt[0] == 0 && | 
					
						
							|  |  |  | 	  pt[1] == 0 && | 
					
						
							|  |  |  | 	  pt[2] == 0) | 
					
						
							|  |  |  | 	break; | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	pt++; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (pt+2 < ASP) | 
					
						
							|  |  |  |       i = Unsigned(pt) - Unsigned(H0); | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       /* so that both Local and Global have reached maximum width */ | 
					
						
							|  |  |  |       GlobalTide = LocalTide = i = StkWidth; | 
					
						
							|  |  |  |   } else | 
					
						
							|  |  |  |     return(StkWidth); | 
					
						
							|  |  |  |   if (GlobalTide > i) | 
					
						
							|  |  |  |     i = GlobalTide; | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     GlobalTide = i; | 
					
						
							|  |  |  |   return(i); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_global_max( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term tmax = MkIntegerTerm(GlobalMax()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return(Yap_unify(tmax, ARG1)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |    | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int | 
					
						
							|  |  |  | LocalMax(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   CACHE_REGS | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   Int i; | 
					
						
							|  |  |  |   Int StkWidth = Unsigned(LCL0) - Unsigned(H0); | 
					
						
							|  |  |  |   CELL *pt; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (LocalTide != StkWidth) { | 
					
						
							|  |  |  |     pt = LCL0; | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  |     while (pt-3 > HR) { | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       if (pt[-1] == 0 && | 
					
						
							|  |  |  | 	  pt[-2] == 0 && | 
					
						
							|  |  |  | 	  pt[-3] == 0) | 
					
						
							|  |  |  | 	break; | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	--pt; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  |     if (pt-3 > HR) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       i = Unsigned(LCL0) - Unsigned(pt); | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       /* so that both Local and Global have reached maximum width */ | 
					
						
							|  |  |  |       GlobalTide = LocalTide = i = StkWidth; | 
					
						
							|  |  |  |   } else | 
					
						
							|  |  |  |     return(StkWidth); | 
					
						
							|  |  |  |   if (LocalTide > i) | 
					
						
							|  |  |  |     i = LocalTide; | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     LocalTide = i; | 
					
						
							|  |  |  |   return(i); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_local_max( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term tmax = MkIntegerTerm(LocalMax()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return(Yap_unify(tmax, ARG1)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |    | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_heap_info( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term tusage = MkIntegerTerm(HeapUsed); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-18 16:33:05 +00:00
										 |  |  | #if USE_SYSTEM_MALLOC && HAVE_MALLINFO
 | 
					
						
							|  |  |  |   struct mallinfo mi = mallinfo(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  |   UInt sstack = Yap_HoleSize+(LOCAL_TrailTop-LOCAL_GlobalBase); | 
					
						
							| 
									
										
										
										
											2010-04-10 21:18:35 +01:00
										 |  |  |   UInt mmax = (mi.arena+mi.hblkhd); | 
					
						
							|  |  |  |   Term tmax = MkIntegerTerm(mmax-sstack); | 
					
						
							|  |  |  |   tusage = MkIntegerTerm(mmax-(mi.fordblks+sstack)); | 
					
						
							| 
									
										
										
										
											2006-05-18 16:33:05 +00:00
										 |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  |   Term tmax = MkIntegerTerm((LOCAL_GlobalBase - Yap_HeapBase)-Yap_HoleSize); | 
					
						
							| 
									
										
										
										
											2006-05-18 16:33:05 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return(Yap_unify(tmax, ARG1) && Yap_unify(tusage,ARG2)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |    | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_stacks_info( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term tmax = MkIntegerTerm(Unsigned(LCL0) - Unsigned(H0)); | 
					
						
							| 
									
										
										
										
											2014-01-19 21:15:05 +00:00
										 |  |  |   Term tgusage = MkIntegerTerm(Unsigned(HR) - Unsigned(H0)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   Term tlusage = MkIntegerTerm(Unsigned(LCL0) - Unsigned(ASP)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return(Yap_unify(tmax, ARG1) && Yap_unify(tgusage,ARG2) && Yap_unify(tlusage,ARG3)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |    | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-11-06 18:35:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_trail_info( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  |   Term tmax = MkIntegerTerm(Unsigned(LOCAL_TrailTop) - Unsigned(LOCAL_TrailBase)); | 
					
						
							|  |  |  |   Term tusage = MkIntegerTerm(Unsigned(TR) - Unsigned(LOCAL_TrailBase)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return(Yap_unify(tmax, ARG1) && Yap_unify(tusage,ARG2)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |    | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-01 20:14:42 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_atom_info( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2006-09-01 20:14:42 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   UInt count = 0, spaceused = 0, i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   for (i =0; i < AtomHashTableSize; i++) { | 
					
						
							|  |  |  |     Atom catom; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-10 14:08:17 +00:00
										 |  |  |     READ_LOCK(HashChain[i].AERWLock); | 
					
						
							| 
									
										
										
										
											2006-09-01 20:14:42 +00:00
										 |  |  |     catom = HashChain[i].Entry; | 
					
						
							|  |  |  |     if (catom != NIL) { | 
					
						
							|  |  |  |       READ_LOCK(RepAtom(catom)->ARWLock); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     READ_UNLOCK(HashChain[i].AERWLock); | 
					
						
							|  |  |  |     while (catom != NIL) { | 
					
						
							|  |  |  |       Atom ncatom; | 
					
						
							|  |  |  |       count++; | 
					
						
							| 
									
										
										
										
											2013-01-23 09:55:11 +00:00
										 |  |  |       spaceused += sizeof(AtomEntry)+strlen(RepAtom(catom)->StrOfAE)+1; | 
					
						
							| 
									
										
										
										
											2006-09-01 20:14:42 +00:00
										 |  |  |       ncatom = RepAtom(catom)->NextOfAE; | 
					
						
							|  |  |  |       if (ncatom != NIL) { | 
					
						
							|  |  |  | 	READ_LOCK(RepAtom(ncatom)->ARWLock); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2013-01-23 09:55:11 +00:00
										 |  |  |       READ_UNLOCK(RepAtom(catom)->ARWLock); | 
					
						
							| 
									
										
										
										
											2006-09-01 20:14:42 +00:00
										 |  |  |       catom = ncatom; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2006-11-27 17:42:03 +00:00
										 |  |  |   for (i =0; i < WideAtomHashTableSize; i++) { | 
					
						
							|  |  |  |     Atom catom; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     READ_LOCK(WideHashChain[i].AERWLock); | 
					
						
							|  |  |  |     catom = WideHashChain[i].Entry; | 
					
						
							|  |  |  |     if (catom != NIL) { | 
					
						
							|  |  |  |       READ_LOCK(RepAtom(catom)->ARWLock); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     READ_UNLOCK(WideHashChain[i].AERWLock); | 
					
						
							|  |  |  |     while (catom != NIL) { | 
					
						
							|  |  |  |       Atom ncatom; | 
					
						
							|  |  |  |       count++; | 
					
						
							| 
									
										
										
										
											2013-01-23 09:55:11 +00:00
										 |  |  |       spaceused += sizeof(AtomEntry)+sizeof(wchar_t)*(wcslen((wchar_t *)( RepAtom(catom)->StrOfAE)+1)); | 
					
						
							| 
									
										
										
										
											2006-11-27 17:42:03 +00:00
										 |  |  |       ncatom = RepAtom(catom)->NextOfAE; | 
					
						
							|  |  |  |       if (ncatom != NIL) { | 
					
						
							|  |  |  | 	READ_LOCK(RepAtom(ncatom)->ARWLock); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2013-01-23 09:55:11 +00:00
										 |  |  |       READ_UNLOCK(RepAtom(catom)->ARWLock); | 
					
						
							| 
									
										
										
										
											2006-11-27 17:42:03 +00:00
										 |  |  |       catom = ncatom; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2006-09-01 20:14:42 +00:00
										 |  |  |   return Yap_unify(ARG1, MkIntegerTerm(count)) && | 
					
						
							|  |  |  |     Yap_unify(ARG2, MkIntegerTerm(spaceused)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-11-06 18:35:05 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_db_size( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2006-11-06 18:35:05 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term t = MkIntegerTerm(Yap_ClauseSpace); | 
					
						
							|  |  |  |   Term tit = MkIntegerTerm(Yap_IndexSpace_Tree); | 
					
						
							|  |  |  |   Term tis = MkIntegerTerm(Yap_IndexSpace_SW); | 
					
						
							|  |  |  |   Term tie = MkIntegerTerm(Yap_IndexSpace_EXT); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return | 
					
						
							|  |  |  |     Yap_unify(t, ARG1) && | 
					
						
							|  |  |  |     Yap_unify(tit, ARG2) && | 
					
						
							|  |  |  |     Yap_unify(tis, ARG3) && | 
					
						
							|  |  |  |     Yap_unify(tie, ARG4); | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_statistics_lu_db_size( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2006-11-06 18:35:05 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term t = MkIntegerTerm(Yap_LUClauseSpace); | 
					
						
							|  |  |  |   Term tit = MkIntegerTerm(Yap_LUIndexSpace_Tree); | 
					
						
							|  |  |  |   Term tic = MkIntegerTerm(Yap_LUIndexSpace_CP); | 
					
						
							|  |  |  |   Term tix = MkIntegerTerm(Yap_LUIndexSpace_EXT); | 
					
						
							|  |  |  |   Term tis = MkIntegerTerm(Yap_LUIndexSpace_SW); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return | 
					
						
							|  |  |  |     Yap_unify(t, ARG1) && | 
					
						
							|  |  |  |     Yap_unify(tit, ARG2) && | 
					
						
							|  |  |  |     Yap_unify(tic, ARG3) && | 
					
						
							| 
									
										
										
										
											2006-11-08 01:56:47 +00:00
										 |  |  |     Yap_unify(tis, ARG4) && | 
					
						
							|  |  |  |     Yap_unify(tix, ARG5); | 
					
						
							| 
									
										
										
										
											2006-11-06 18:35:05 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static Term | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | mk_argc_list( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   int i =0; | 
					
						
							|  |  |  |   Term t = TermNil; | 
					
						
							| 
									
										
										
										
											2011-05-25 16:40:36 +01:00
										 |  |  |   while (i < GLOBAL_argc) { | 
					
						
							|  |  |  |     char *arg = GLOBAL_argv[i]; | 
					
						
							| 
									
										
										
										
											2001-05-28 19:54:53 +00:00
										 |  |  |     /* check for -L -- */ | 
					
						
							|  |  |  |     if (arg[0] == '-' && arg[1] == 'L') { | 
					
						
							|  |  |  |       arg += 2; | 
					
						
							|  |  |  |       while (*arg != '\0' && (*arg == ' ' || *arg == '\t')) | 
					
						
							|  |  |  | 	arg++; | 
					
						
							|  |  |  |       if (*arg == '-' && arg[1] == '-' && arg[2] == '\0') { | 
					
						
							|  |  |  | 	/* we found the separator */ | 
					
						
							|  |  |  | 	int j; | 
					
						
							| 
									
										
										
										
											2011-05-25 16:40:36 +01:00
										 |  |  | 	for (j = GLOBAL_argc-1; j > i+1; --j) { | 
					
						
							|  |  |  | 	  t = MkPairTerm(MkAtomTerm(Yap_LookupAtom(GLOBAL_argv[j])),t); | 
					
						
							| 
									
										
										
										
											2001-05-28 19:54:53 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-10-17 12:37:39 +01:00
										 |  |  | 	return t; | 
					
						
							| 
									
										
										
										
											2011-05-25 16:40:36 +01:00
										 |  |  |       } else if (GLOBAL_argv[i+1] && GLOBAL_argv[i+1][0] == '-' && GLOBAL_argv[i+1][1] == '-'  && GLOBAL_argv[i+1][2] == '\0') { | 
					
						
							| 
									
										
										
										
											2008-10-17 12:37:39 +01:00
										 |  |  | 	/* we found the separator */ | 
					
						
							|  |  |  | 	int j; | 
					
						
							| 
									
										
										
										
											2011-05-25 16:40:36 +01:00
										 |  |  | 	for (j = GLOBAL_argc-1; j > i+2; --j) { | 
					
						
							|  |  |  | 	  t = MkPairTerm(MkAtomTerm(Yap_LookupAtom(GLOBAL_argv[j])),t); | 
					
						
							| 
									
										
										
										
											2008-10-17 12:37:39 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return t; | 
					
						
							| 
									
										
										
										
											2001-05-28 19:54:53 +00:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     if (arg[0] == '-' && arg[1] == '-' && arg[2] == '\0') { | 
					
						
							|  |  |  |       /* we found the separator */ | 
					
						
							|  |  |  |       int j; | 
					
						
							| 
									
										
										
										
											2011-05-25 16:40:36 +01:00
										 |  |  |       for (j = GLOBAL_argc-1; j > i; --j) { | 
					
						
							|  |  |  | 	t = MkPairTerm(MkAtomTerm(Yap_LookupAtom(GLOBAL_argv[j])),t); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       } | 
					
						
							|  |  |  |       return(t); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     i++; | 
					
						
							|  |  |  |   }  | 
					
						
							|  |  |  |   return(t); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_argv( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |   Term t = mk_argc_list( PASS_REGS1 ); | 
					
						
							| 
									
										
										
										
											2009-12-10 01:16:29 +00:00
										 |  |  |   return Yap_unify(t, ARG1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_executable( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2009-12-10 01:16:29 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-01-13 17:55:13 +00:00
										 |  |  |   if (GLOBAL_argv && GLOBAL_argv[0]) | 
					
						
							|  |  |  |     Yap_TrueFileName (GLOBAL_argv[0], LOCAL_FileNameBuf, FALSE); | 
					
						
							|  |  |  |   else | 
					
						
							| 
									
										
										
										
											2013-01-29 10:50:04 +00:00
										 |  |  |     strncpy(LOCAL_FileNameBuf, Yap_FindExecutable(), YAP_FILENAME_MAX-1) ; | 
					
						
							| 
									
										
										
										
											2013-01-13 17:55:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-23 16:19:47 +01:00
										 |  |  |   return Yap_unify(MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf)),ARG1); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_access_yap_flags( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term tflag = Deref(ARG1); | 
					
						
							|  |  |  |   Int flag; | 
					
						
							| 
									
										
										
										
											2005-08-04 15:45:56 +00:00
										 |  |  |   Term tout = 0; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(tflag)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(INSTANTIATION_ERROR, tflag, "access_yap_flags/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE);		 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (!IsIntTerm(tflag)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(TYPE_ERROR_INTEGER, tflag, "access_yap_flags/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE);		 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   flag = IntOfTerm(tflag); | 
					
						
							| 
									
										
										
										
											2013-01-09 09:20:41 +00:00
										 |  |  |   if (flag < 0 || flag >= NUMBER_OF_YAP_FLAGS) { | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  |   if (flag == TABLING_MODE_FLAG) { | 
					
						
							| 
									
										
										
										
											2013-01-29 10:50:04 +00:00
										 |  |  | #ifdef TABLING
 | 
					
						
							| 
									
										
										
										
											2010-04-16 02:08:06 +01:00
										 |  |  |     tout = TermNil; | 
					
						
							|  |  |  |     if (IsMode_LocalTrie(yap_flags[flag])) | 
					
						
							|  |  |  |       tout = MkPairTerm(MkAtomTerm(AtomLocalTrie), tout); | 
					
						
							| 
									
										
										
										
											2013-12-18 15:01:02 +00:00
										 |  |  |     else if (IsMode_GlobalTrie(yap_flags[flag])) | 
					
						
							| 
									
										
										
										
											2010-04-16 02:08:06 +01:00
										 |  |  |       tout = MkPairTerm(MkAtomTerm(AtomGlobalTrie), tout); | 
					
						
							| 
									
										
										
										
											2013-01-29 10:50:04 +00:00
										 |  |  |     if (IsMode_LoadAnswers(yap_flags[flag])) | 
					
						
							| 
									
										
										
										
											2010-04-16 02:08:06 +01:00
										 |  |  |       tout = MkPairTerm(MkAtomTerm(AtomLoadAnswers), tout); | 
					
						
							| 
									
										
										
										
											2013-12-18 15:01:02 +00:00
										 |  |  |     else if (IsMode_ExecAnswers(yap_flags[flag])) | 
					
						
							| 
									
										
										
										
											2013-01-29 10:50:04 +00:00
										 |  |  |       tout = MkPairTerm(MkAtomTerm(AtomExecAnswers), tout); | 
					
						
							|  |  |  |     if (IsMode_Local(yap_flags[flag])) | 
					
						
							| 
									
										
										
										
											2010-04-16 02:08:06 +01:00
										 |  |  |       tout = MkPairTerm(MkAtomTerm(AtomLocal), tout); | 
					
						
							| 
									
										
										
										
											2013-12-18 15:01:02 +00:00
										 |  |  |     else if (IsMode_Batched(yap_flags[flag])) | 
					
						
							| 
									
										
										
										
											2013-01-29 10:50:04 +00:00
										 |  |  |       tout = MkPairTerm(MkAtomTerm(AtomBatched), tout); | 
					
						
							| 
									
										
										
										
											2013-12-19 16:56:55 +00:00
										 |  |  |     else if (IsMode_CoInductive(yap_flags[flag])) | 
					
						
							|  |  |  |       tout = MkPairTerm(MkAtomTerm(AtomCoInductive), tout); | 
					
						
							| 
									
										
										
										
											2013-01-29 10:50:04 +00:00
										 |  |  | #else
 | 
					
						
							|  |  |  |     tout = MkAtomTerm(AtomFalse); | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  | #endif /* TABLING */
 | 
					
						
							| 
									
										
										
										
											2013-01-29 10:50:04 +00:00
										 |  |  |   } else | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   tout = MkIntegerTerm(yap_flags[flag]); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return(Yap_unify(ARG2, tout)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_has_yap_or( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  | #ifdef YAPOR
 | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |   return(FALSE); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | static Int  | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_has_eam( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | { | 
					
						
							|  |  |  | #ifdef BEAM
 | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |   return(FALSE); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-06-22 17:53:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_set_yap_flags( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   Term tflag = Deref(ARG1); | 
					
						
							|  |  |  |   Term tvalue = Deref(ARG2); | 
					
						
							|  |  |  |   Int flag, value; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(tflag)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(INSTANTIATION_ERROR, tflag, "set_yap_flags/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE);		 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (!IsIntTerm(tflag)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(TYPE_ERROR_INTEGER, tflag, "set_yap_flags/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE);		 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   flag = IntOfTerm(tflag); | 
					
						
							|  |  |  |   if (IsVarTerm(tvalue)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(INSTANTIATION_ERROR, tvalue, "set_yap_flags/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE);		 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (!IsIntTerm(tvalue)) { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_Error(TYPE_ERROR_INTEGER, tvalue, "set_yap_flags/2"); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     return(FALSE);		 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   value = IntOfTerm(tvalue); | 
					
						
							|  |  |  |   /* checking should have been performed */ | 
					
						
							|  |  |  |   switch(flag) { | 
					
						
							|  |  |  |   case LANGUAGE_MODE_FLAG: | 
					
						
							|  |  |  |     if (value < 0 || value > 2) | 
					
						
							|  |  |  |       return(FALSE); | 
					
						
							|  |  |  |     if (value == 1) { | 
					
						
							| 
									
										
										
										
											2008-12-24 09:04:44 +00:00
										 |  |  |       Yap_heap_regs->pred_meta_call = RepPredProp(PredPropByFunc(FunctorMetaCall,0)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2008-12-24 09:04:44 +00:00
										 |  |  |       Yap_heap_regs->pred_meta_call = RepPredProp(PredPropByFunc(FunctorMetaCall,0)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |     yap_flags[LANGUAGE_MODE_FLAG] = value; | 
					
						
							|  |  |  |     break; | 
					
						
							|  |  |  |   case SOURCE_MODE_FLAG: | 
					
						
							|  |  |  |     if (value != 0 && value !=  1) | 
					
						
							|  |  |  |       return(FALSE); | 
					
						
							|  |  |  |     yap_flags[SOURCE_MODE_FLAG] = value; | 
					
						
							|  |  |  |     break; | 
					
						
							|  |  |  |   case WRITE_QUOTED_STRING_FLAG: | 
					
						
							|  |  |  |     if (value != 0 && value !=  1) | 
					
						
							|  |  |  |       return(FALSE); | 
					
						
							|  |  |  |     yap_flags[WRITE_QUOTED_STRING_FLAG] = value; | 
					
						
							|  |  |  |     break; | 
					
						
							|  |  |  |   case ALLOW_ASSERTING_STATIC_FLAG: | 
					
						
							|  |  |  |     if (value != 0 && value !=  1) | 
					
						
							|  |  |  |       return(FALSE); | 
					
						
							|  |  |  |     yap_flags[ALLOW_ASSERTING_STATIC_FLAG] = value; | 
					
						
							|  |  |  |     break; | 
					
						
							| 
									
										
										
										
											2002-12-10 14:36:22 +00:00
										 |  |  |   case STACK_DUMP_ON_ERROR_FLAG: | 
					
						
							|  |  |  |     if (value != 0 && value !=  1) | 
					
						
							|  |  |  |       return(FALSE); | 
					
						
							|  |  |  |     yap_flags[STACK_DUMP_ON_ERROR_FLAG] = value; | 
					
						
							|  |  |  |     break; | 
					
						
							| 
									
										
										
										
											2003-06-06 11:54:02 +00:00
										 |  |  |   case INDEXING_MODE_FLAG: | 
					
						
							|  |  |  |     if (value < INDEX_MODE_OFF || value >  INDEX_MODE_MAX) | 
					
						
							|  |  |  |       return(FALSE); | 
					
						
							|  |  |  |     yap_flags[INDEXING_MODE_FLAG] = value; | 
					
						
							|  |  |  |     break; | 
					
						
							| 
									
										
										
										
											2005-04-07 17:56:58 +00:00
										 |  |  | #ifdef TABLING
 | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  |   case TABLING_MODE_FLAG: | 
					
						
							|  |  |  |     if (value == 0) {  /* default */ | 
					
						
							| 
									
										
										
										
											2011-05-10 11:47:18 +01:00
										 |  |  |       tab_ent_ptr tab_ent = GLOBAL_root_tab_ent; | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  |       while(tab_ent) { | 
					
						
							| 
									
										
										
										
											2010-04-16 02:08:06 +01:00
										 |  |  | 	TabEnt_mode(tab_ent) = TabEnt_flags(tab_ent); | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  | 	tab_ent = TabEnt_next(tab_ent); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       yap_flags[TABLING_MODE_FLAG] = 0; | 
					
						
							|  |  |  |     } else if (value == 1) {  /* batched */ | 
					
						
							| 
									
										
										
										
											2011-05-10 11:47:18 +01:00
										 |  |  |       tab_ent_ptr tab_ent = GLOBAL_root_tab_ent; | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  |       while(tab_ent) { | 
					
						
							|  |  |  | 	SetMode_Batched(TabEnt_mode(tab_ent)); | 
					
						
							|  |  |  | 	tab_ent = TabEnt_next(tab_ent); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       SetMode_Batched(yap_flags[TABLING_MODE_FLAG]); | 
					
						
							|  |  |  |     } else if (value == 2) {  /* local */ | 
					
						
							| 
									
										
										
										
											2011-05-10 11:47:18 +01:00
										 |  |  |       tab_ent_ptr tab_ent = GLOBAL_root_tab_ent; | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  |       while(tab_ent) { | 
					
						
							|  |  |  | 	SetMode_Local(TabEnt_mode(tab_ent)); | 
					
						
							|  |  |  | 	tab_ent = TabEnt_next(tab_ent); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       SetMode_Local(yap_flags[TABLING_MODE_FLAG]); | 
					
						
							|  |  |  |     } else if (value == 3) {  /* exec_answers */ | 
					
						
							| 
									
										
										
										
											2011-05-10 11:47:18 +01:00
										 |  |  |       tab_ent_ptr tab_ent = GLOBAL_root_tab_ent; | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  |       while(tab_ent) { | 
					
						
							|  |  |  | 	SetMode_ExecAnswers(TabEnt_mode(tab_ent)); | 
					
						
							|  |  |  | 	tab_ent = TabEnt_next(tab_ent); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       SetMode_ExecAnswers(yap_flags[TABLING_MODE_FLAG]); | 
					
						
							|  |  |  |     } else if (value == 4) {  /* load_answers */ | 
					
						
							| 
									
										
										
										
											2011-05-10 11:47:18 +01:00
										 |  |  |       tab_ent_ptr tab_ent = GLOBAL_root_tab_ent; | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  |       while(tab_ent) { | 
					
						
							|  |  |  | 	SetMode_LoadAnswers(TabEnt_mode(tab_ent)); | 
					
						
							|  |  |  | 	tab_ent = TabEnt_next(tab_ent); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       SetMode_LoadAnswers(yap_flags[TABLING_MODE_FLAG]); | 
					
						
							| 
									
										
										
										
											2010-04-16 02:08:06 +01:00
										 |  |  |     } else if (value == 5) {  /* local_trie */ | 
					
						
							| 
									
										
										
										
											2011-05-10 11:47:18 +01:00
										 |  |  |       tab_ent_ptr tab_ent = GLOBAL_root_tab_ent; | 
					
						
							| 
									
										
										
										
											2010-04-16 02:08:06 +01:00
										 |  |  |       while(tab_ent) { | 
					
						
							|  |  |  | 	SetMode_LocalTrie(TabEnt_mode(tab_ent)); | 
					
						
							|  |  |  | 	tab_ent = TabEnt_next(tab_ent); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       SetMode_LocalTrie(yap_flags[TABLING_MODE_FLAG]); | 
					
						
							|  |  |  |     } else if (value == 6) {  /* global_trie */ | 
					
						
							| 
									
										
										
										
											2011-05-10 11:47:18 +01:00
										 |  |  |       tab_ent_ptr tab_ent = GLOBAL_root_tab_ent; | 
					
						
							| 
									
										
										
										
											2010-04-16 02:08:06 +01:00
										 |  |  |       while(tab_ent) { | 
					
						
							|  |  |  | 	SetMode_GlobalTrie(TabEnt_mode(tab_ent)); | 
					
						
							|  |  |  | 	tab_ent = TabEnt_next(tab_ent); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       SetMode_GlobalTrie(yap_flags[TABLING_MODE_FLAG]); | 
					
						
							| 
									
										
										
										
											2013-12-19 16:56:55 +00:00
										 |  |  |     } else if (value == 7) {  /* CoInductive */ | 
					
						
							|  |  |  |       tab_ent_ptr tab_ent = GLOBAL_root_tab_ent; | 
					
						
							|  |  |  |       while(tab_ent) { | 
					
						
							|  |  |  |         SetMode_CoInductive(TabEnt_mode(tab_ent)); | 
					
						
							|  |  |  |         tab_ent = TabEnt_next(tab_ent); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       SetMode_CoInductive(yap_flags[TABLING_MODE_FLAG]); | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  |     }  | 
					
						
							| 
									
										
										
										
											2005-04-07 17:56:58 +00:00
										 |  |  |     break; | 
					
						
							| 
									
										
										
										
											2005-07-06 19:34:12 +00:00
										 |  |  | #endif /* TABLING */
 | 
					
						
							| 
									
										
										
										
											2008-02-07 23:09:13 +00:00
										 |  |  |   case VARS_CAN_HAVE_QUOTE_FLAG: | 
					
						
							|  |  |  |     if (value != 0  && value != 1) | 
					
						
							|  |  |  |       return(FALSE); | 
					
						
							|  |  |  |     yap_flags[VARS_CAN_HAVE_QUOTE_FLAG] = value; | 
					
						
							|  |  |  |     break; | 
					
						
							| 
									
										
										
										
											2008-03-15 12:19:33 +00:00
										 |  |  |   case QUIET_MODE_FLAG: | 
					
						
							|  |  |  |     if (value != 0  && value != 1) | 
					
						
							| 
									
										
										
										
											2010-04-14 23:47:01 +01:00
										 |  |  |       return FALSE; | 
					
						
							|  |  |  |     yap_flags[QUIET_MODE_FLAG] = value; | 
					
						
							| 
									
										
										
										
											2008-03-15 12:19:33 +00:00
										 |  |  |     break; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   default: | 
					
						
							|  |  |  |     return(FALSE); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-12-13 16:10:26 +00:00
										 |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_system_mode( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2006-12-13 16:10:26 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-12-10 22:58:02 +00:00
										 |  |  |   Term t1 = Deref(ARG1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (IsVarTerm(t1)) { | 
					
						
							|  |  |  |     if (LOCAL_PrologMode & SystemMode) | 
					
						
							|  |  |  |       return Yap_unify( t1, MkAtomTerm(AtomTrue)); | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       return Yap_unify( t1, MkAtomTerm(AtomFalse)); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     Atom at = AtomOfTerm(t1); | 
					
						
							|  |  |  |     if (at == AtomFalse)  | 
					
						
							|  |  |  |       LOCAL_PrologMode &= ~SystemMode; | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       LOCAL_PrologMode |= SystemMode; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2006-12-13 16:10:26 +00:00
										 |  |  |   return TRUE; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-12-01 17:27:42 +00:00
										 |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_lock_system( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2003-12-01 17:27:42 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-05-10 10:06:51 +01:00
										 |  |  |   LOCK(GLOBAL_BGL); | 
					
						
							| 
									
										
										
										
											2003-12-01 17:27:42 +00:00
										 |  |  |   return TRUE; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_unlock_system( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2003-12-01 17:27:42 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-05-10 10:06:51 +01:00
										 |  |  |   UNLOCK(GLOBAL_BGL); | 
					
						
							| 
									
										
										
										
											2003-12-01 17:27:42 +00:00
										 |  |  |   return TRUE; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-12-08 04:45:04 +00:00
										 |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_enterundefp( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2004-12-08 04:45:04 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-05-04 10:11:41 +01:00
										 |  |  |   if (LOCAL_DoingUndefp) { | 
					
						
							| 
									
										
										
										
											2004-12-08 04:45:04 +00:00
										 |  |  |     return FALSE; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2011-05-04 10:11:41 +01:00
										 |  |  |   LOCAL_DoingUndefp = TRUE; | 
					
						
							| 
									
										
										
										
											2004-12-08 04:45:04 +00:00
										 |  |  |   return TRUE; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_exitundefp( USES_REGS1 ) | 
					
						
							| 
									
										
										
										
											2004-12-08 04:45:04 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-05-04 10:11:41 +01:00
										 |  |  |   if (LOCAL_DoingUndefp) { | 
					
						
							|  |  |  |     LOCAL_DoingUndefp = FALSE; | 
					
						
							| 
									
										
										
										
											2004-12-08 04:45:04 +00:00
										 |  |  |     return TRUE; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return FALSE; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #ifdef DEBUG
 | 
					
						
							|  |  |  | extern void DumpActiveGoals(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_dump_active_goals( USES_REGS1 ) { | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   DumpActiveGoals(); | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-03-04 03:25:41 +00:00
										 |  |  | #ifdef INES
 | 
					
						
							|  |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_euc_dist( USES_REGS1 ) { | 
					
						
							| 
									
										
										
										
											2002-03-04 03:25:41 +00:00
										 |  |  |   Term t1 = Deref(ARG1); | 
					
						
							|  |  |  |   Term t2 = Deref(ARG2); | 
					
						
							|  |  |  |   double d1 = (double)(IntegerOfTerm(ArgOfTerm(1,t1))-IntegerOfTerm(ArgOfTerm(1,t2))); | 
					
						
							|  |  |  |   double d2 = (double)(IntegerOfTerm(ArgOfTerm(2,t1))-IntegerOfTerm(ArgOfTerm(2,t2))); | 
					
						
							|  |  |  |   double d3 = (double)(IntegerOfTerm(ArgOfTerm(3,t1))-IntegerOfTerm(ArgOfTerm(3,t2))); | 
					
						
							|  |  |  |   Int result = (Int)sqrt(d1*d1+d2*d2+d3*d3); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   return(Yap_unify(ARG3,MkIntegerTerm(result))); | 
					
						
							| 
									
										
										
										
											2002-03-04 03:25:41 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2002-03-08 06:32:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | volatile int loop_counter = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Int | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  | p_loop( USES_REGS1 ) { | 
					
						
							| 
									
										
										
										
											2002-03-08 06:32:11 +00:00
										 |  |  |   while (loop_counter == 0); | 
					
						
							|  |  |  |   return(TRUE); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2002-03-04 03:25:41 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-05 19:36:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-28 17:38:50 +00:00
										 |  |  | static Int | 
					
						
							| 
									
										
										
										
											2013-11-15 15:45:55 +00:00
										 |  |  | p_break( USES_REGS1 ) { | 
					
						
							|  |  |  |   Atom at = AtomOfTerm(Deref( ARG1 )); | 
					
						
							|  |  |  |   if (at == AtomTrue) { | 
					
						
							|  |  |  |     LOCAL_PL_local_data_p->break_level++; | 
					
						
							|  |  |  |     return TRUE; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (at == AtomFalse) { | 
					
						
							|  |  |  |     LOCAL_PL_local_data_p->break_level--; | 
					
						
							|  |  |  |     return TRUE; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return FALSE; | 
					
						
							| 
									
										
										
										
											2005-10-28 17:38:50 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | void  | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | Yap_InitBackCPreds(void) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitCPredBack("$current_predicate", 3, 1, init_current_predicate, cont_current_predicate, | 
					
						
							| 
									
										
										
										
											2012-10-19 18:10:48 +01:00
										 |  |  | 		SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitCPredBack("$current_predicate_for_atom", 3, 1, init_current_predicate_for_atom, cont_current_predicate_for_atom, | 
					
						
							| 
									
										
										
										
											2012-10-19 18:10:48 +01:00
										 |  |  | 		SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2009-11-25 00:38:47 +00:00
										 |  |  |   Yap_InitCPredBack("$current_op", 5, 1, init_current_op, cont_current_op, | 
					
						
							|  |  |  | 		SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPredBack("$current_atom_op", 5, 1, init_current_atom_op, cont_current_atom_op, | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 		SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | #ifdef BEAM
 | 
					
						
							|  |  |  |   Yap_InitCPredBack("eam", 1, 0, start_eam, cont_eam, | 
					
						
							|  |  |  | 		SafePredFlag); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  |   Yap_InitBackAtoms(); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitBackIO(); | 
					
						
							|  |  |  |   Yap_InitBackDB(); | 
					
						
							|  |  |  |   Yap_InitUserBacks(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef void (*Proc)(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Proc E_Modules[]= {/* init_fc,*/ (Proc) 0 }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-15 01:03:34 +00:00
										 |  |  | #ifndef YAPOR
 | 
					
						
							| 
									
										
										
										
											2011-06-21 15:19:07 +01:00
										 |  |  | static Int p_parallel_mode( USES_REGS1 ) { | 
					
						
							| 
									
										
										
										
											2010-01-15 01:03:34 +00:00
										 |  |  |   return FALSE; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2011-06-21 15:19:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | static Int p_yapor_workers( USES_REGS1 ) { | 
					
						
							|  |  |  |   return FALSE; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif /* YAPOR */
 | 
					
						
							| 
									
										
										
										
											2010-01-15 01:03:34 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | void  | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  | Yap_InitCPreds(void) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   /* numerical comparison */ | 
					
						
							| 
									
										
										
										
											2003-08-27 13:37:10 +00:00
										 |  |  |   Yap_InitCPred("set_value", 2, p_setval, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("get_value", 2, p_value, TestPredFlag|SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2012-10-19 18:10:48 +01:00
										 |  |  |   Yap_InitCPred("$values", 3, p_values, SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   /* general purpose */ | 
					
						
							| 
									
										
										
										
											2012-10-19 18:10:48 +01:00
										 |  |  |   Yap_InitCPred("$opdec", 4, p_opdec, SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitCPred("=..", 2, p_univ, 0); | 
					
						
							| 
									
										
										
										
											2012-10-19 18:10:48 +01:00
										 |  |  |   Yap_InitCPred("$statistics_trail_max", 1, p_statistics_trail_max, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$statistics_heap_max", 1, p_statistics_heap_max, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$statistics_global_max", 1, p_statistics_global_max, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$statistics_local_max", 1, p_statistics_local_max, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$statistics_heap_info", 2, p_statistics_heap_info, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$statistics_stacks_info", 3, p_statistics_stacks_info, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$statistics_trail_info", 2, p_statistics_trail_info, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$statistics_atom_info", 2, p_statistics_atom_info, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$statistics_db_size", 4, p_statistics_db_size, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$statistics_lu_db_size", 5, p_statistics_lu_db_size, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$argv", 1, p_argv, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$executable", 1, p_executable, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$runtime", 2, p_runtime, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$cputime", 2, p_cputime, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$systime", 2, p_systime, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$walltime", 2, p_walltime, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$access_yap_flags", 2, p_access_yap_flags, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$set_yap_flags", 2, p_set_yap_flags, SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2013-12-10 22:58:02 +00:00
										 |  |  |   Yap_InitCPred("$system_mode", 1, p_system_mode, SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitCPred("abort", 0, p_abort, SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2013-11-15 15:45:55 +00:00
										 |  |  |   Yap_InitCPred("$break", 1, p_break, SafePredFlag); | 
					
						
							| 
									
										
										
										
											2005-09-08 22:06:45 +00:00
										 |  |  | #ifdef BEAM
 | 
					
						
							|  |  |  |   Yap_InitCPred("@", 0, eager_split, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred(":", 0, force_wait, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("/", 0, commit, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("skip_while_var",1,skip_while_var,SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("wait_while_var",1,wait_while_var,SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("eamtime", 0, show_time, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("eam", 0, use_eam, SafePredFlag); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2012-10-19 18:10:48 +01:00
										 |  |  |   Yap_InitCPred("$halt", 1, p_halt, SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$lock_system", 0, p_lock_system, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$unlock_system", 0, p_unlock_system, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$enter_undefp", 0, p_enterundefp, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$exit_undefp", 0, p_exitundefp, SafePredFlag); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   /* Accessing and changing the flags for a predicate */ | 
					
						
							| 
									
										
										
										
											2012-10-19 18:10:48 +01:00
										 |  |  |   Yap_InitCPred("$flags", 4, p_flags, SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2013-11-25 11:26:42 +01:00
										 |  |  |   Yap_InitCPred("$set_flag", 4, p_set_flag, SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   /* hiding and unhiding some predicates */ | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitCPred("hide", 1, p_hide, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("unhide", 1, p_unhide, SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2012-10-19 18:10:48 +01:00
										 |  |  |   Yap_InitCPred("$hidden", 1, p_hidden, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$has_yap_or", 0, p_has_yap_or, SafePredFlag|SyncPredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("$has_eam", 0, p_has_eam, SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2001-05-28 19:54:53 +00:00
										 |  |  | #ifndef YAPOR
 | 
					
						
							| 
									
										
										
										
											2011-06-21 15:19:07 +01:00
										 |  |  |   Yap_InitCPred("parallel_mode", 1, p_parallel_mode, SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2012-10-19 18:10:48 +01:00
										 |  |  |   Yap_InitCPred("$c_yapor_workers", 1, p_yapor_workers, SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2011-06-21 15:19:07 +01:00
										 |  |  | #endif /* YAPOR */
 | 
					
						
							| 
									
										
										
										
											2002-03-04 03:25:41 +00:00
										 |  |  | #ifdef INES
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitCPred("euc_dist", 3, p_euc_dist, SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("loop", 0, p_loop, SafePredFlag); | 
					
						
							| 
									
										
										
										
											2002-03-04 03:25:41 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2006-06-05 19:36:00 +00:00
										 |  |  | #if QSAR
 | 
					
						
							| 
									
										
										
										
											2006-09-15 19:32:47 +00:00
										 |  |  |   Yap_InitCPred("in_range", 8, p_in_range, TestPredFlag|SafePredFlag); | 
					
						
							|  |  |  |   Yap_InitCPred("in_range", 4, p_in_range2, TestPredFlag|SafePredFlag); | 
					
						
							| 
									
										
										
										
											2006-06-05 19:36:00 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #ifdef DEBUG
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitCPred("dump_active_goals", 0, p_dump_active_goals, SafePredFlag|SyncPredFlag); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-22 16:12:46 +00:00
										 |  |  |   Yap_InitArrayPreds(); | 
					
						
							| 
									
										
										
										
											2013-05-09 18:00:41 -05:00
										 |  |  |   Yap_InitAtomPreds(); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitBBPreds(); | 
					
						
							|  |  |  |   Yap_InitBigNums(); | 
					
						
							| 
									
										
										
										
											2006-08-22 16:12:46 +00:00
										 |  |  |   Yap_InitCdMgr(); | 
					
						
							|  |  |  |   Yap_InitCmpPreds(); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitCoroutPreds(); | 
					
						
							| 
									
										
										
										
											2006-08-22 16:12:46 +00:00
										 |  |  |   Yap_InitDBPreds(); | 
					
						
							|  |  |  |   Yap_InitExecFs(); | 
					
						
							|  |  |  |   Yap_InitGlobals(); | 
					
						
							|  |  |  |   Yap_InitInlines(); | 
					
						
							|  |  |  |   Yap_InitIOPreds(); | 
					
						
							| 
									
										
										
										
											2013-01-07 09:47:14 +00:00
										 |  |  |   Yap_InitExoPreds(); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitLoadForeign(); | 
					
						
							| 
									
										
										
										
											2004-02-06 02:26:23 +00:00
										 |  |  |   Yap_InitModulesC(); | 
					
						
							| 
									
										
										
										
											2006-08-22 16:12:46 +00:00
										 |  |  |   Yap_InitSavePreds(); | 
					
						
							| 
									
										
										
										
											2012-10-23 14:55:44 +01:00
										 |  |  |   Yap_InitRange(); | 
					
						
							| 
									
										
										
										
											2006-08-22 16:12:46 +00:00
										 |  |  |   Yap_InitSysPreds(); | 
					
						
							|  |  |  |   Yap_InitUnify(); | 
					
						
							| 
									
										
										
										
											2011-08-03 08:23:00 +01:00
										 |  |  |   Yap_InitQLY(); | 
					
						
							| 
									
										
										
										
											2011-08-24 00:11:54 -03:00
										 |  |  |   Yap_InitQLYR(); | 
					
						
							| 
									
										
										
										
											2009-02-20 11:42:48 +00:00
										 |  |  |   Yap_udi_init(); | 
					
						
							| 
									
										
										
										
											2013-04-25 14:21:41 -05:00
										 |  |  |   Yap_udi_Interval_init(); | 
					
						
							| 
									
										
										
										
											2013-02-08 10:36:45 -06:00
										 |  |  |   Yap_InitSignalCPreds(); | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitUserCPreds(); | 
					
						
							|  |  |  |   Yap_InitUtilCPreds(); | 
					
						
							|  |  |  |   Yap_InitSortPreds(); | 
					
						
							|  |  |  |   Yap_InitMaVarCPreds(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #ifdef DEPTH_LIMIT
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitItDeepenPreds(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef ANALYST
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitAnalystPreds(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef LOW_LEVEL_TRACER
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitLowLevelTrace(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_InitEval(); | 
					
						
							|  |  |  |   Yap_InitGrowPreds(); | 
					
						
							| 
									
										
										
										
											2005-12-17 03:25:39 +00:00
										 |  |  |   Yap_InitLowProf(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #if defined(YAPOR) || defined(TABLING)
 | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |   Yap_init_optyap_preds(); | 
					
						
							| 
									
										
										
										
											2003-11-07 16:31:08 +00:00
										 |  |  | #endif /* YAPOR || TABLING */
 | 
					
						
							| 
									
										
										
										
											2004-01-23 02:23:51 +00:00
										 |  |  |   Yap_InitThreadPreds(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   { | 
					
						
							|  |  |  |     void            (*(*(p))) (void) = E_Modules; | 
					
						
							|  |  |  |     while (*p) | 
					
						
							|  |  |  |       (*(*p++)) (); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | #if CAMACHO
 | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     extern void InitForeignPreds(void); | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2002-11-18 18:18:05 +00:00
										 |  |  |     Yap_InitForeignPreds(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   } | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2002-09-25 04:29:01 +00:00
										 |  |  | #if APRIL
 | 
					
						
							| 
									
										
										
										
											2002-09-24 19:01:29 +00:00
										 |  |  |   { | 
					
						
							|  |  |  |     extern void init_ol(void), init_time(void); | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |     init_ol(); | 
					
						
							|  |  |  |     init_time(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2006-04-28 17:53:44 +00:00
										 |  |  | #if SUPPORT_CONDOR
 | 
					
						
							|  |  |  |   init_sys(); | 
					
						
							|  |  |  |   init_random(); | 
					
						
							|  |  |  |   //  init_tries();
 | 
					
						
							|  |  |  |   init_regexp(); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2007-10-10 09:44:28 +00:00
										 |  |  |   { | 
					
						
							| 
									
										
										
										
											2011-03-07 16:02:55 +00:00
										 |  |  |     CACHE_REGS | 
					
						
							| 
									
										
										
										
											2007-10-10 09:44:28 +00:00
										 |  |  |     Term cm = CurrentModule; | 
					
						
							|  |  |  |     CurrentModule = SWI_MODULE; | 
					
						
							| 
									
										
										
										
											2007-10-18 08:24:16 +00:00
										 |  |  |     Yap_swi_install(); | 
					
						
							| 
									
										
										
										
											2007-10-10 09:44:28 +00:00
										 |  |  |     CurrentModule = cm; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } |