11 d0 = XREG(PREG->y_u.xl.x);
12 deref_head(d0, atom_x_unk);
14 if (IsAtomTerm(d0) && !IsBlob(AtomOfTerm(d0))) {
15 PREG = NEXTOP(PREG, xl);
19 PREG = PREG->y_u.xl.F;
24 deref_body(d0, pt0, atom_x_unk, atom_x_nvar);
25 PREG = PREG->y_u.xl.F;
34 pt0 = YREG + PREG->y_u.yl.y;
36 deref_head(d0, atom_y_unk);
38 if (IsAtomTerm(d0) && !IsBlob(AtomOfTerm(d0))) {
39 PREG = NEXTOP(PREG, yl);
43 PREG = PREG->y_u.yl.F;
47 derefa_body(d0, pt0, atom_y_unk, atom_y_nvar);
48 PREG = PREG->y_u.yl.F;
56 d0 = XREG(PREG->y_u.xl.x);
57 deref_head(d0, atomic_x_unk);
60 if (IsAtomicTerm(d0)) {
61 PREG = NEXTOP(PREG, xl);
65 PREG = PREG->y_u.xl.F;
70 deref_body(d0, pt0, atomic_x_unk, atomic_x_nvar);
71 PREG = PREG->y_u.xl.F;
80 pt0 = YREG + PREG->y_u.yl.y;
82 deref_head(d0, atomic_y_unk);
85 if (IsAtomicTerm(d0)) {
86 PREG = NEXTOP(PREG, yl);
90 PREG = PREG->y_u.yl.F;
94 derefa_body(d0, pt0, atomic_y_unk, atomic_y_nvar);
95 PREG = PREG->y_u.yl.F;
103 d0 = XREG(PREG->y_u.xl.x);
104 deref_head(d0, integer_x_unk);
108 PREG = NEXTOP(PREG, xl);
111 if (IsApplTerm(d0)) {
112 Functor f0 = FunctorOfTerm(d0);
113 if (IsExtensionFunctor(f0)) {
115 case (CELL)FunctorBigInt:
116 { CELL *pt = RepAppl(d0);
117 if ( pt[1] != BIG_INT ) {
118 PREG = PREG->y_u.xl.F;
122 PREG = NEXTOP(PREG, xl);
125 case (CELL)FunctorLongInt:
126 PREG = NEXTOP(PREG, xl);
130 PREG = PREG->y_u.xl.F;
135 PREG = PREG->y_u.xl.F;
139 deref_body(d0, pt0, integer_x_unk, integer_x_nvar);
140 PREG = PREG->y_u.xl.F;
149 pt0 = YREG + PREG->y_u.yl.y;
151 deref_head(d0, integer_y_unk);
155 PREG = NEXTOP(PREG, yl);
158 if (IsApplTerm(d0)) {
159 Functor f0 = FunctorOfTerm(d0);
160 if (IsExtensionFunctor(f0)) {
162 case (CELL)FunctorBigInt:
163 { CELL *pt = RepAppl(d0);
164 if ( pt[1] != BIG_INT ) {
165 PREG = PREG->y_u.yl.F;
169 PREG = NEXTOP(PREG, yl);
172 case (CELL)FunctorLongInt:
173 PREG = NEXTOP(PREG, yl);
177 PREG = PREG->y_u.yl.F;
182 PREG = PREG->y_u.yl.F;
185 derefa_body(d0, pt0, integer_y_unk, integer_y_nvar);
186 PREG = PREG->y_u.yl.F;
194 d0 = XREG(PREG->y_u.xl.x);
195 deref_head(d0, nonvar_x_unk);
197 PREG = NEXTOP(PREG, xl);
201 deref_body(d0, pt0, nonvar_x_unk, nonvar_x_nvar);
202 PREG = PREG->y_u.xl.F;
211 pt0 = YREG + PREG->y_u.yl.y;
213 deref_head(d0, nonvar_y_unk);
215 PREG = NEXTOP(PREG, yl);
218 derefa_body(d0, pt0, nonvar_y_unk, nonvar_y_nvar);
219 PREG = PREG->y_u.yl.F;
227 d0 = XREG(PREG->y_u.xl.x);
228 deref_head(d0, number_x_unk);
232 PREG = NEXTOP(PREG, xl);
235 if (IsApplTerm(d0)) {
236 Functor f0 = FunctorOfTerm(d0);
237 if (IsExtensionFunctor(f0)) {
239 case (CELL)FunctorBigInt:
240 { CELL *pt = RepAppl(d0);
241 if ( pt[1] != BIG_RATIONAL && pt[1] != BIG_INT ) {
242 PREG = PREG->y_u.xl.F;
246 case (CELL)FunctorLongInt:
247 case (CELL)FunctorDouble:
248 PREG = NEXTOP(PREG, xl);
252 PREG = PREG->y_u.xl.F;
257 PREG = PREG->y_u.xl.F;
261 deref_body(d0, pt0, number_x_unk, number_x_nvar);
262 PREG = PREG->y_u.xl.F;
271 pt0 = YREG + PREG->y_u.yl.y;
273 deref_head(d0, number_y_unk);
278 PREG = NEXTOP(PREG, xl);
281 if (IsApplTerm(d0)) {
282 Functor f0 = FunctorOfTerm(d0);
283 if (IsExtensionFunctor(f0)) {
285 case (CELL)FunctorBigInt:
286 { CELL *pt = RepAppl(d0);
287 if ( pt[1] != BIG_RATIONAL && pt[1] != BIG_INT ) {
288 PREG = PREG->y_u.yl.F;
293 case (CELL)FunctorLongInt:
294 case (CELL)FunctorDouble:
295 PREG = NEXTOP(PREG, yl);
299 PREG = PREG->y_u.yl.F;
304 PREG = PREG->y_u.yl.F;
307 derefa_body(d0, pt0, number_y_unk, number_y_nvar);
308 PREG = PREG->y_u.yl.F;
316 d0 = XREG(PREG->y_u.xl.x);
317 deref_head(d0, var_x_unk);
320 PREG = PREG->y_u.xl.F;
324 deref_body(d0, pt0, var_x_unk, var_x_nvar);
325 PREG = NEXTOP(PREG, xl);
334 pt0 = YREG + PREG->y_u.yl.y;
336 deref_head(d0, var_y_unk);
339 PREG = PREG->y_u.yl.F;
342 derefa_body(d0, pt0, var_y_unk, var_y_nvar);
343 PREG = NEXTOP(PREG, yl);
351 d0 = XREG(PREG->y_u.xl.x);
352 deref_head(d0, dbref_x_unk);
355 if (IsDBRefTerm(d0)) {
358 PREG = NEXTOP(PREG, xl);
362 PREG = PREG->y_u.xl.F;
367 deref_body(d0, pt0, dbref_x_unk, dbref_x_nvar);
368 PREG = PREG->y_u.xl.F;
377 pt0 = YREG + PREG->y_u.yl.y;
379 deref_head(d0, dbref_y_unk);
382 if (IsDBRefTerm(d0)) {
385 PREG = NEXTOP(PREG, yl);
389 PREG = PREG->y_u.yl.F;
393 derefa_body(d0, pt0, dbref_y_unk, dbref_y_nvar);
394 PREG = PREG->y_u.yl.F;
400 Op(p_primitive_x, xl);
402 d0 = XREG(PREG->y_u.xl.x);
403 deref_head(d0, primi_x_unk);
406 if (IsPrimitiveTerm(d0)) {
407 PREG = NEXTOP(PREG, xl);
411 PREG = PREG->y_u.xl.F;
416 deref_body(d0, pt0, primi_x_unk, primi_x_nvar);
417 PREG = PREG->y_u.xl.F;
423 Op(p_primitive_y, yl);
426 pt0 = YREG + PREG->y_u.yl.y;
428 deref_head(d0, primi_y_unk);
431 if (IsPrimitiveTerm(d0)) {
432 PREG = NEXTOP(PREG, yl);
436 PREG = PREG->y_u.yl.F;
440 derefa_body(d0, pt0, primi_y_unk, primi_y_nvar);
441 PREG = PREG->y_u.yl.F;
447 Op(p_compound_x, xl);
449 d0 = XREG(PREG->y_u.xl.x);
450 deref_head(d0, compound_x_unk);
453 if (IsPairTerm(d0)) {
454 PREG = NEXTOP(PREG, xl);
457 else if (IsApplTerm(d0)) {
458 if (IsExtensionFunctor(FunctorOfTerm(d0))) {
459 PREG = PREG->y_u.xl.F;
462 PREG = NEXTOP(PREG, xl);
466 PREG = PREG->y_u.xl.F;
471 deref_body(d0, pt0, compound_x_unk, compound_x_nvar);
472 PREG = PREG->y_u.xl.F;
478 Op(p_compound_y, yl);
481 pt0 = YREG + PREG->y_u.yl.y;
483 deref_head(d0, compound_y_unk);
486 if (IsPairTerm(d0)) {
487 PREG = NEXTOP(PREG, yl);
490 else if (IsApplTerm(d0)) {
491 if (IsExtensionFunctor(FunctorOfTerm(d0))) {
492 PREG = PREG->y_u.yl.F;
495 PREG = NEXTOP(PREG, yl);
499 PREG = PREG->y_u.yl.F;
503 derefa_body(d0, pt0, compound_y_unk, compound_y_nvar);
504 PREG = PREG->y_u.yl.F;
512 d0 = XREG(PREG->y_u.xl.x);
513 deref_head(d0, float_x_unk);
516 if (IsFloatTerm(d0)) {
517 PREG = NEXTOP(PREG, xl);
520 PREG = PREG->y_u.xl.F;
524 deref_body(d0, pt0, float_x_unk, float_x_nvar);
525 PREG = PREG->y_u.xl.F;
534 pt0 = YREG + PREG->y_u.yl.y;
536 deref_head(d0, float_y_unk);
539 if (IsFloatTerm(d0)) {
540 PREG = NEXTOP(PREG, yl);
543 PREG = PREG->y_u.yl.F;
546 derefa_body(d0, pt0, float_y_unk, float_y_nvar);
547 PREG = PREG->y_u.yl.F;