YAP 7.1.0
other.c
1/*************************************************************************
2* *
3* YAP Prolog *
4* *
5* Yap Prolog was developed at NCCUP - Universidade do Porto *
6* *
7* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
8* *
9**************************************************************************
10* *
11* File: other.c *
12* Last rev: Dec/90 *
13* mods: *
14* comments: extra routines *
15* *
16*************************************************************************/
17#ifdef SCCS
18static char SccsId[] = "%W% %G%";
19#endif
20
21
22#include "Yap.h"
23#include "Yatom.h"
24#include "YapHeap.h"
25#if HAVE_STRING_H
26#include <string.h>
27#endif
28
29/* exile Yap_standard_regs here, otherwise WIN32 linkers may complain */
30REGSTORE Yap_standard_regs;
31
32#if PUSH_REGS
33
34#ifdef THREADS
35/* PushRegs always on */
36
37pthread_key_t Yap_yaamregs_key;
38
39#else
40
41REGSTORE *Yap_regp;
42
43#endif
44
45#else /* !PUSH_REGS */
46
47REGSTORE Yap_REGS;
48
49#endif
50
51Term
52Yap_MkNewPairTerm(void)
53{
54 CACHE_REGS
55 register CELL *p = HR;
56
57 RESET_VARIABLE(HR);
58 RESET_VARIABLE(HR+1);
59 HR+=2;
60 return (AbsPair(p));
61}
62
70Term
71Yap_MkApplTerm(Functor f, arity_t n, const Term *a)
72 {
73 CACHE_REGS
74 CELL *t = HR;
75
76 if (n == 0)
77 return (MkAtomTerm(NameOfFunctor(f)));
78 if (f == FunctorList)
79 return MkPairTerm(a[0], a[1]);
80 *HR++ = (CELL) f;
81 while (n--)
82 *HR++ = * a++;
83 return (AbsAppl(t));
84}
85
86Term
87
88Yap_MkNewApplTerm(Functor f, arity_t n)
89 /* build compound term with functor f and n
90 * args a */
91{
92 CACHE_REGS
93 CELL *t = HR;
94
95 if (n == 0)
96 return (MkAtomTerm(NameOfFunctor(f)));
97 if (f == FunctorList) {
98 RESET_VARIABLE(HR);
99 RESET_VARIABLE(HR+1);
100 HR+=2;
101 return (AbsPair(t));
102 }
103 *HR++ = (CELL) f;
104 while (n--) {
105 RESET_VARIABLE(HR);
106 HR++;
107 }
108 return (AbsAppl(t));
109}
110
111
112Term
113Yap_Globalise(Term t)
114{
115 CACHE_REGS
116 CELL *vt;
117 Term tn;
118
119 if (!IsVarTerm(t))
120 return t;
121 vt = VarOfTerm(t);
122 if (vt <= HR && vt > H0)
123 return t;
124 tn = MkVarTerm();
125 Yap_unify(t, tn);
126 return tn;
127}
Main definitions.