1
2------ Test 1 -------
3p :-
4	p(A).
5
6p / 0:
7label(1):
8	put_variable             a(1) 
9	jmp                      p / 1 
10
11------ Test 2 -------
12p :-
13	p(A),
14	q(A),
15	r(A).
16
17p / 0:
18label(1):
19	allocate                 1 
20	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
21	move_callf               y(1)     a(1)     q / 1     Y[1] 
22	move_chain               y(1)     a(1)     r / 1 
23
24------ Test 3 -------
25p :-
26	(
27	    q(A)
28	;
29	    r(A)
30	).
31
32p / 0:
33label(1):
34	try_me_else              0     0     ref(3) 
35label(2):
36	put_variable             a(1) 
37	jmp                      q / 1 
38label(3):
39	trust_me                 0 
40label(4):
41	put_variable             a(1) 
42	jmp                      r / 1 
43
44------ Test 4 -------
45p :-
46	p(A),
47	(
48	    q(A)
49	;
50	    r(A)
51	).
52
53p / 0:
54label(1):
55	allocate                 1 
56	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
57	try_me_else              0     0     ref(3) 
58label(2):
59	move_chain               y(1)     a(1)     q / 1 
60label(3):
61	trust_me_inline          0     Y[1] 
62label(4):
63	move_chain               y(1)     a(1)     r / 1 
64
65------ Test 5 -------
66p :-
67	(
68	    q(A)
69	;
70	    r(A)
71	),
72	p(A).
73
74p / 0:
75label(1):
76	try_me_else              0     0     ref(3) 
77label(2):
78	allocate                 1 
79	put_global_variable_callf     a(1)     y(1)     q / 1     Y[1] 
80	move_chain               y(1)     a(1)     p / 1 
81label(3):
82	trust_me                 0 
83label(4):
84	allocate                 1 
85	put_global_variable_callf     a(1)     y(1)     r / 1     Y[1] 
86	move_chain               y(1)     a(1)     p / 1 
87
88------ Test 6 -------
89p :-
90	(
91	    q(A),
92	    r(A)
93	;
94	    s(A),
95	    t(A)
96	).
97
98p / 0:
99label(1):
100	try_me_else              0     0     ref(3) 
101label(2):
102	allocate                 1 
103	put_global_variable_callf     a(1)     y(1)     q / 1     Y[1] 
104	move_chain               y(1)     a(1)     r / 1 
105label(3):
106	trust_me                 0 
107label(4):
108	allocate                 1 
109	put_global_variable_callf     a(1)     y(1)     s / 1     Y[1] 
110	move_chain               y(1)     a(1)     t / 1 
111
112------ Test 7 -------
113p :-
114	f(A),
115	(
116	    q(A),
117	    r(A)
118	;
119	    s(A),
120	    t(A)
121	).
122
123p / 0:
124label(1):
125	allocate                 1 
126	put_global_variable_callf     a(1)     y(1)     f / 1     Y[1] 
127	try_me_else              0     0     ref(3) 
128label(2):
129	move_callf               y(1)     a(1)     q / 1     Y[1] 
130	move_chain               y(1)     a(1)     r / 1 
131label(3):
132	trust_me_inline          0     Y[1] 
133label(4):
134	move_callf               y(1)     a(1)     s / 1     Y[1] 
135	move_chain               y(1)     a(1)     t / 1 
136
137------ Test 8 -------
138p :-
139	(
140	    q(A),
141	    r(A)
142	;
143	    s(A),
144	    t(A)
145	),
146	f(A).
147
148p / 0:
149label(1):
150	try_me_else              0     0     ref(3) 
151label(2):
152	allocate                 1 
153	put_global_variable_callf     a(1)     y(1)     q / 1     Y[1] 
154	move_callf               y(1)     a(1)     r / 1     Y[1] 
155	move_chain               y(1)     a(1)     f / 1 
156label(3):
157	trust_me                 0 
158label(4):
159	allocate                 1 
160	put_global_variable_callf     a(1)     y(1)     s / 1     Y[1] 
161	move_callf               y(1)     a(1)     t / 1     Y[1] 
162	move_chain               y(1)     a(1)     f / 1 
163
164------ Test 9 -------
165p :-
166	(
167	    a(A)
168	;
169	    (
170		b(A)
171	    ;
172		c(A)
173	    ),
174	    (
175		d(A)
176	    ;
177		e(A)
178	    )
179	).
180
181p / 0:
182label(1):
183	try_me_else              0     0     ref(3) 
184label(2):
185	put_variable             a(1) 
186	jmp                      a / 1 
187label(3):
188	trust_me                 0 
189label(4):
190	try_me_else              0     0     ref(6) 
191label(5):
192	allocate                 1 
193	put_global_variable_callf     a(1)     y(1)     b / 1     Y[1] 
194label(8):
195	try_me_else              0     0     ref(10) 
196label(9):
197	move_chain               y(1)     a(1)     d / 1 
198label(6):
199	trust_me                 0 
200label(7):
201	allocate                 1 
202	put_global_variable_callf     a(1)     y(1)     c / 1     Y[1] 
203	branch                   ref(8) 
204label(10):
205	trust_me_inline          0     Y[1] 
206label(11):
207	move_chain               y(1)     a(1)     e / 1 
208
209------ Test 10 -------
210p(a, A) :-
211	q(A).
212p(b, A) :-
213	r(A).
214
215INDEXES for (nondet) disjunction [2]
2161. Quality 1.3
217    [] - []
218    [atom] - []
219    [atom, a] - [1]
220    [atom, b] - [2]
221    [var] - [1, 2]
222Branch determinisms for disjunction [2]
223    Branch 1: try
224    Branch 2: trust
225p / 2:
226label(1):
227	atom_switch              a(1) 
228		a: 	ref(7)
229		b: 	ref(8)
230		default: 	ref(fail)
231
232label(2):
233	try_me_else              0     2     ref(4) 
234label(3):
235	get_atom                 a(1)     a 
236label(7):
237	move                     a(2)     a(1) 
238	jmp                      q / 1 
239label(4):
240	trust_me                 0 
241label(5):
242	get_atom                 a(1)     b 
243label(8):
244	move                     a(2)     a(1) 
245	jmp                      r / 1 
246
247------ Test 11 -------
248p :-
249	p(A, A).
250
251p / 0:
252label(1):
253	put_variable             a(1) 
254	move                     a(1)     a(2) 
255	jmp                      p / 2 
256
257------ Test 12 -------
258p :-
259	p(A, A),
260	q(A, A),
261	r(A, A).
262
263p / 0:
264label(1):
265	allocate                 1 
266	put_global_variable      a(1)     y(1) 
267	move                     a(1)     a(2) 
268	callf                    p / 2     Y[1] 
269	move                     y(1)     a(1) 
270	move                     a(1)     a(2) 
271	callf                    q / 2     Y[1] 
272	move                     y(1)     a(1) 
273	move                     a(1)     a(2) 
274	chain                    r / 2 
275
276------ Test 13 -------
277p :-
278	(
279	    q(A, A)
280	;
281	    r(A, A)
282	).
283
284p / 0:
285label(1):
286	try_me_else              0     0     ref(3) 
287label(2):
288	put_variable             a(1) 
289	move                     a(1)     a(2) 
290	jmp                      q / 2 
291label(3):
292	trust_me                 0 
293label(4):
294	put_variable             a(1) 
295	move                     a(1)     a(2) 
296	jmp                      r / 2 
297
298------ Test 14 -------
299p :-
300	p(A, A),
301	(
302	    q(A, A)
303	;
304	    r(A, A)
305	).
306
307p / 0:
308label(1):
309	allocate                 1 
310	put_global_variable      a(1)     y(1) 
311	move                     a(1)     a(2) 
312	callf                    p / 2     Y[1] 
313	try_me_else              0     0     ref(3) 
314label(2):
315	move                     y(1)     a(1) 
316	move                     a(1)     a(2) 
317	chain                    q / 2 
318label(3):
319	trust_me_inline          0     Y[1] 
320label(4):
321	move                     y(1)     a(1) 
322	move                     a(1)     a(2) 
323	chain                    r / 2 
324
325------ Test 15 -------
326p :-
327	(
328	    q(A, A)
329	;
330	    r(A, A)
331	),
332	p(A, A).
333
334p / 0:
335label(1):
336	try_me_else              0     0     ref(3) 
337label(2):
338	allocate                 1 
339	put_global_variable      a(1)     y(1) 
340	move                     a(1)     a(2) 
341	callf                    q / 2     Y[1] 
342label(5):
343	move                     y(1)     a(1) 
344	move                     a(1)     a(2) 
345	chain                    p / 2 
346label(3):
347	trust_me                 0 
348label(4):
349	allocate                 1 
350	put_global_variable      a(1)     y(1) 
351	move                     a(1)     a(2) 
352	callf                    r / 2     Y[1] 
353	branch                   ref(5) 
354
355------ Test 16 -------
356p :-
357	(
358	    q(A, A),
359	    r(A, A)
360	;
361	    s(A, A),
362	    t(A, A)
363	).
364
365p / 0:
366label(1):
367	try_me_else              0     0     ref(3) 
368label(2):
369	allocate                 1 
370	put_global_variable      a(1)     y(1) 
371	move                     a(1)     a(2) 
372	callf                    q / 2     Y[1] 
373	move                     y(1)     a(1) 
374	move                     a(1)     a(2) 
375	chain                    r / 2 
376label(3):
377	trust_me                 0 
378label(4):
379	allocate                 1 
380	put_global_variable      a(1)     y(1) 
381	move                     a(1)     a(2) 
382	callf                    s / 2     Y[1] 
383	move                     y(1)     a(1) 
384	move                     a(1)     a(2) 
385	chain                    t / 2 
386
387------ Test 17 -------
388p :-
389	f(A, A),
390	(
391	    q(A, A),
392	    r(A, A)
393	;
394	    s(A, A),
395	    t(A, A)
396	).
397
398p / 0:
399label(1):
400	allocate                 1 
401	put_global_variable      a(1)     y(1) 
402	move                     a(1)     a(2) 
403	callf                    f / 2     Y[1] 
404	try_me_else              0     0     ref(3) 
405label(2):
406	move                     y(1)     a(1) 
407	move                     a(1)     a(2) 
408	callf                    q / 2     Y[1] 
409	move                     y(1)     a(1) 
410	move                     a(1)     a(2) 
411	chain                    r / 2 
412label(3):
413	trust_me_inline          0     Y[1] 
414label(4):
415	move                     y(1)     a(1) 
416	move                     a(1)     a(2) 
417	callf                    s / 2     Y[1] 
418	move                     y(1)     a(1) 
419	move                     a(1)     a(2) 
420	chain                    t / 2 
421
422------ Test 18 -------
423p :-
424	(
425	    q(A, A),
426	    r(A, A)
427	;
428	    s(A, A),
429	    t(A, A)
430	),
431	f(A, A).
432
433p / 0:
434label(1):
435	try_me_else              0     0     ref(3) 
436label(2):
437	allocate                 1 
438	put_global_variable      a(1)     y(1) 
439	move                     a(1)     a(2) 
440	callf                    q / 2     Y[1] 
441	move                     y(1)     a(1) 
442	move                     a(1)     a(2) 
443	callf                    r / 2     Y[1] 
444label(5):
445	move                     y(1)     a(1) 
446	move                     a(1)     a(2) 
447	chain                    f / 2 
448label(3):
449	trust_me                 0 
450label(4):
451	allocate                 1 
452	put_global_variable      a(1)     y(1) 
453	move                     a(1)     a(2) 
454	callf                    s / 2     Y[1] 
455	move                     y(1)     a(1) 
456	move                     a(1)     a(2) 
457	callf                    t / 2     Y[1] 
458	branch                   ref(5) 
459
460------ Test 19 -------
461p :-
462	a(A),
463	(
464	    a(A, B)
465	;
466	    a(A, B, B)
467	).
468
469p / 0:
470label(1):
471	allocate                 1 
472	put_global_variable_callf     a(1)     y(1)     a / 1     Y[1] 
473	try_me_else              0     0     ref(3) 
474label(2):
475	put_variable             a(2) 
476	move_chain               y(1)     a(1)     a / 2 
477label(3):
478	trust_me_inline          0     Y[1] 
479label(4):
480	put_variable             a(2) 
481	move                     a(2)     a(3) 
482	move_chain               y(1)     a(1)     a / 3 
483
484------ Test 30 -------
485p :-
486	p,
487	+(1, 2, 3).
488
489p / 0:
490label(1):
491	allocate                 0 
492	callf                    ref(1)     Y[] 
493	put_integer              a(1)     1 
494	bi_addi                  a(1)     2     a(1)     24 
495	get_integer              a(1)     3 
496	exit                 
497
498------ Test 31 -------
499p :-
500	p(A),
501	q,
502	+(A, 2, 3).
503
504p / 0:
505label(1):
506	allocate                 1 
507	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
508	callf                    q / 0     Y[1] 
509	move                     y(1)     a(1) 
510	bi_addi                  a(1)     2     a(1)     24 
511	get_integer              a(1)     3 
512	exit                 
513
514------ Test 32 -------
515p(A, A, B) :-
516	q(a, b, A).
517
518p / 3:
519label(1):
520	get_value                a(2)     a(1) 
521	move                     a(1)     a(3) 
522	put_atom                 a(1)     a 
523	put_atom                 a(2)     b 
524	jmp                      q / 3 
525
526------ Test 33 -------
527p(A, A) :-
528	+(B, C, 1),
529	q(a, b, A).
530
531p / 2:
532label(1):
533	get_value                a(2)     a(1) 
534	put_variable2            a(4)     a(5) 
535	bi_add                   a(4)     a(5)     a(4)     16 
536	get_integer              a(4)     1 
537	move                     a(1)     a(3) 
538	put_atom                 a(1)     a 
539	put_atom                 a(2)     b 
540	jmp                      q / 3 
541
542------ Test 34 -------
543p(A, B, C) :-
544	+(D, E, F),
545	p(A, B, C).
546
547p / 3:
548label(1):
549	put_variable2            a(4)     a(5) 
550	bi_add                   a(4)     a(5)     a(4)     16 
551	jmp                      ref(1) 
552
553------ Test 35 -------
554p(A) :-
555	(
556	    q(A)
557	;
558	    r(A)
559	).
560
561p / 1:
562label(1):
563	try_me_else              0     1     ref(3) 
564label(2):
565	jmp                      q / 1 
566label(3):
567	trust_me                 0 
568label(4):
569	jmp                      r / 1 
570
571------ Test 36 -------
572p :-
573	A = B,
574	q,
575	r(B).
576
577p / 0:
578label(1):
579	allocate                 1 
580	put_global_variable      y(1) 
581	callf                    q / 0     Y[1] 
582	move_chain               y(1)     a(1)     r / 1 
583
584------ Test 37 -------
585p :-
586	A = B,
587	q(A),
588	r(B).
589
590p / 0:
591label(1):
592	allocate                 1 
593	put_global_variable_callf     a(1)     y(1)     q / 1     Y[1] 
594	move_chain               y(1)     a(1)     r / 1 
595
596------ Test 38 -------
597p(A) :-
598	q,
599	r(A).
600
601p / 1:
602label(1):
603	get_variable             1     a(1)     y(1) 
604	callf                    q / 0     Y[1] 
605	move_chain               y(1)     a(1)     r / 1 
606
607------ Test 39 -------
608p(A) :-
609	B = A,
610	q(B),
611	r(A).
612
613p / 1:
614label(1):
615	move                     a(1)     a(2) 
616	get_variable             1     a(1)     y(1) 
617	move                     a(2)     a(1) 
618	callf                    q / 1     Y[1] 
619	move_chain               y(1)     a(1)     r / 1 
620
621------ Test 40 -------
622p :-
623	q(A),
624	(
625	    r1(B),
626	    r2(A, B)
627	;
628	    s(A)
629	).
630
631p / 0:
632label(1):
633	allocate                 2 
634	put_global_variable_callf     a(1)     y(1)     q / 1     Y[1] 
635	try_me_else              0     0     ref(3) 
636label(2):
637	put_global_variable_callf     a(1)     y(2)     r1 / 1     Y[1,2] 
638	move                     2     y(1)     a(1) 
639	chain                    r2 / 2 
640label(3):
641	trust_me_inline          0     Y[1] 
642label(4):
643	move_chain               y(1)     a(1)     s / 1 
644
645------ Test 41 -------
646p :-
647	(
648	    !
649	;
650	    p(A),
651	    p(A),
652	    !
653	).
654
655p / 0:
656label(1):
657	savecut                  a(1) 
658	try_me_else              0     1     ref(3) 
659label(2):
660	cut                      a(1) 
661	ret                  
662label(3):
663	trust_me                 0 
664label(4):
665	get_variable             2     a(1)     y(1) 
666	put_global_variable_callf     a(1)     y(2)     p / 1     Y[1,2] 
667	move_callf               y(2)     a(1)     p / 1     Y[1] 
668	cut                      y(1)     0 
669	exit                 
670
671------ Test 42 -------
672p(A, B) :-
673	!.
674p(A, B) :-
675	p(A),
676	p(B),
677	!.
678
679p / 2:
680label(1):
681	move                     a(2)     a(3) 
682	savecut                  a(2) 
683	get_variable             2     a(3)     y(1) 
684	try_me_else              0     2     ref(3) 
685label(2):
686	cut                      a(2)     0 
687	exit                 
688label(3):
689	trust_me_inline          0     Y[1] 
690label(4):
691	move                     a(2)     y(2) 
692	callf                    p / 1     Y[1,2] 
693	move_callf               y(1)     a(1)     p / 1     Y[2] 
694	cut                      y(2)     0 
695	exit                 
696
697------ Test 43 -------
698p :-
699	s(A),
700	(
701	    c(A)
702	;
703	    p(B),
704	    p(B),
705	    c(A)
706	).
707
708p / 0:
709label(1):
710	allocate                 2 
711	put_global_variable_callf     a(1)     y(1)     s / 1     Y[1] 
712	try_me_else              0     0     ref(3) 
713label(2):
714	move_chain               y(1)     a(1)     c / 1 
715label(3):
716	trust_me_inline          0     Y[1] 
717label(4):
718	put_global_variable_callf     a(1)     y(2)     p / 1     Y[1,2] 
719	move_callf               y(2)     a(1)     p / 1     Y[1] 
720	move_chain               y(1)     a(1)     c / 1 
721
722------ Test 44 -------
723p :-
724	s(A),
725	(
726	    c(A)
727	;
728	    p(B),
729	    p(A),
730	    c(B)
731	).
732
733p / 0:
734label(1):
735	allocate                 2 
736	put_global_variable_callf     a(1)     y(1)     s / 1     Y[1] 
737	try_me_else              0     0     ref(3) 
738label(2):
739	move_chain               y(1)     a(1)     c / 1 
740label(3):
741	trust_me_inline          0     Y[1] 
742label(4):
743	put_global_variable_callf     a(1)     y(2)     p / 1     Y[1,2] 
744	move_callf               y(1)     a(1)     p / 1     Y[2] 
745	move_chain               y(2)     a(1)     c / 1 
746
747------ Test 45 -------
748p :-
749	s(A),
750	(
751	    p(A),
752	    q,
753	    r
754	;
755	    (
756		p,
757		q(A),
758		r
759	    ;
760		p,
761		q,
762		r(A)
763	    )
764	).
765
766p / 0:
767label(1):
768	allocate                 1 
769	put_global_variable_callf     a(1)     y(1)     s / 1     Y[1] 
770	try_me_else              0     0     ref(3) 
771label(2):
772	move_callf               y(1)     a(1)     p / 1     Y[] 
773	callf                    q / 0     Y[] 
774	chain                    r / 0 
775label(3):
776	retry_me_inline          0     ref(5)     Y[1] 
777label(4):
778	callf                    ref(1)     Y[1] 
779	move_callf               y(1)     a(1)     q / 1     Y[] 
780	chain                    r / 0 
781label(5):
782	trust_me_inline          0     Y[1] 
783label(6):
784	callf                    ref(1)     Y[1] 
785	callf                    q / 0     Y[1] 
786	move_chain               y(1)     a(1)     r / 1 
787
788------ Test 46 -------
789p :-
790	s(A),
791	(
792	    p,
793	    q,
794	    r(A)
795	;
796	    (
797		p,
798		q(A),
799		r
800	    ;
801		p(A),
802		q,
803		r
804	    )
805	).
806
807p / 0:
808label(1):
809	allocate                 1 
810	put_global_variable_callf     a(1)     y(1)     s / 1     Y[1] 
811	try_me_else              0     0     ref(3) 
812label(2):
813	callf                    ref(1)     Y[1] 
814	callf                    q / 0     Y[1] 
815	move_chain               y(1)     a(1)     r / 1 
816label(3):
817	retry_me_inline          0     ref(5)     Y[1] 
818label(4):
819	callf                    ref(1)     Y[1] 
820	move_callf               y(1)     a(1)     q / 1     Y[] 
821	chain                    r / 0 
822label(5):
823	trust_me_inline          0     Y[1] 
824label(6):
825	move_callf               y(1)     a(1)     p / 1     Y[] 
826	callf                    q / 0     Y[] 
827	chain                    r / 0 
828
829------ Test 47 -------
830p :-
831	s(A),
832	(
833	    p,
834	    q(A),
835	    r
836	;
837	    (
838		p,
839		q,
840		r(A)
841	    ;
842		p,
843		q,
844		r(A)
845	    )
846	).
847
848p / 0:
849label(1):
850	allocate                 1 
851	put_global_variable_callf     a(1)     y(1)     s / 1     Y[1] 
852	try_me_else              0     0     ref(3) 
853label(2):
854	callf                    ref(1)     Y[1] 
855	move_callf               y(1)     a(1)     q / 1     Y[] 
856	chain                    r / 0 
857label(3):
858	retry_me_inline          0     ref(5)     Y[1] 
859label(4):
860	callf                    ref(1)     Y[1] 
861	callf                    q / 0     Y[1] 
862	move_chain               y(1)     a(1)     r / 1 
863label(5):
864	trust_me_inline          0     Y[1] 
865label(6):
866	callf                    ref(1)     Y[1] 
867	callf                    q / 0     Y[1] 
868	move_chain               y(1)     a(1)     r / 1 
869
870------ Test 50 -------
871p :-
872	s(A),
873	(
874	    p(A),
875	    q(B),
876	    r(B)
877	;
878	    p(B),
879	    q(B, C),
880	    r(C)
881	).
882
883p / 0:
884label(1):
885	allocate                 3 
886	put_global_variable_callf     a(1)     y(1)     s / 1     Y[1] 
887	try_me_else              0     0     ref(3) 
888label(2):
889	move_callf               y(1)     a(1)     p / 1     Y[] 
890	put_global_variable_callf     a(1)     y(2)     q / 1     Y[2] 
891	move_chain               y(2)     a(1)     r / 1 
892label(3):
893	trust_me_inline          0     Y[] 
894label(4):
895	put_global_variable_callf     a(1)     y(3)     p / 1     Y[3] 
896	put_global_variable      a(2)     y(2) 
897	move_callf               y(3)     a(1)     q / 2     Y[2] 
898	move_chain               y(2)     a(1)     r / 1 
899
900------ Test 51 -------
901p :-
902	s(A),
903	(
904	    p(A),
905	    q(B),
906	    r(B)
907	;
908	    (
909		p1(A),
910		q1(C),
911		q1(C)
912	    ;
913		p(B),
914		q(B, D),
915		r(D)
916	    )
917	).
918
919p / 0:
920label(1):
921	allocate                 3 
922	put_global_variable_callf     a(1)     y(1)     s / 1     Y[1] 
923	try_me_else              0     0     ref(3) 
924label(2):
925	move_callf               y(1)     a(1)     p / 1     Y[] 
926	put_global_variable_callf     a(1)     y(2)     q / 1     Y[2] 
927	move_chain               y(2)     a(1)     r / 1 
928label(3):
929	retry_me_inline          0     ref(5)     Y[1] 
930label(4):
931	move_callf               y(1)     a(1)     p1 / 1     Y[] 
932	put_global_variable_callf     a(1)     y(2)     q1 / 1     Y[2] 
933	move_chain               y(2)     a(1)     q1 / 1 
934label(5):
935	trust_me_inline          0     Y[] 
936label(6):
937	put_global_variable_callf     a(1)     y(3)     p / 1     Y[3] 
938	put_global_variable      a(2)     y(2) 
939	move_callf               y(3)     a(1)     q / 2     Y[2] 
940	move_chain               y(2)     a(1)     r / 1 
941
942------ Test 52 -------
943p :-
944	(
945	    p(A)
946	;
947	    q
948	),
949	(
950	    p(A)
951	;
952	    q
953	).
954
955p / 0:
956label(1):
957	try_me_else              0     0     ref(3) 
958label(2):
959	allocate                 1 
960	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
961label(5):
962	try_me_else              0     0     ref(7) 
963label(6):
964	move_chain               y(1)     a(1)     p / 1 
965label(3):
966	trust_me                 0 
967label(4):
968	allocate                 1 
969	callf                    q / 0     Y[] 
970	gc_test                  1 
971	put_global_variable      y(1) 
972	branch                   ref(5) 
973label(7):
974	trust_me_inline          0     Y[] 
975label(8):
976	chain                    q / 0 
977
978------ Test 53 -------
979p :-
980	(
981	    p(A)
982	;
983	    q(A)
984	),
985	(
986	    p(A)
987	;
988	    q
989	).
990
991p / 0:
992label(1):
993	try_me_else              0     0     ref(3) 
994label(2):
995	allocate                 1 
996	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
997label(5):
998	try_me_else              0     0     ref(7) 
999label(6):
1000	move_chain               y(1)     a(1)     p / 1 
1001label(3):
1002	trust_me                 0 
1003label(4):
1004	allocate                 1 
1005	put_global_variable_callf     a(1)     y(1)     q / 1     Y[1] 
1006	branch                   ref(5) 
1007label(7):
1008	trust_me_inline          0     Y[] 
1009label(8):
1010	chain                    q / 0 
1011
1012------ Test 54 -------
1013p(A) :-
1014	A = a,
1015	p,
1016	p(A).
1017
1018p / 1:
1019label(1):
1020	get_atom                 a(1)     a 
1021	get_variable             1     a(1)     y(1) 
1022	callf                    p / 0     Y[1] 
1023	move_chain               y(1)     a(1)     ref(1) 
1024
1025------ Test 55 -------
1026p(A) :-
1027	A = B,
1028	p(B),
1029	p(A).
1030
1031p / 1:
1032label(1):
1033	move                     a(1)     a(2) 
1034	get_variable             1     a(1)     y(1) 
1035	move                     a(2)     a(1) 
1036	callf                    ref(1)     Y[1] 
1037	move_chain               y(1)     a(1)     ref(1) 
1038
1039------ Test 56 -------
1040p(A, B) :-
1041	A = B,
1042	p(B),
1043	p(A).
1044
1045p / 2:
1046label(1):
1047	get_value                a(1)     a(2) 
1048	get_variable             1     a(1)     y(1) 
1049	move                     a(2)     a(1) 
1050	callf                    p / 1     Y[1] 
1051	move_chain               y(1)     a(1)     p / 1 
1052
1053------ Test 57 -------
1054p(A, B) :-
1055	A = B,
1056	p,
1057	p(A, B).
1058
1059p / 2:
1060label(1):
1061	get_value                a(1)     a(2) 
1062	get_variable             2     a(1)     y(1) 
1063	move                     a(2)     y(2) 
1064	callf                    p / 0     Y[1,2] 
1065	move                     2     y(1)     a(1) 
1066	chain                    ref(1) 
1067
1068------ Test 58 -------
1069p(A) :-
1070	A = B,
1071	p,
1072	p(A, B).
1073
1074p / 1:
1075label(1):
1076	get_variable             2     a(1)     y(2) 
1077	move                     a(1)     y(1) 
1078	callf                    p / 0     Y[1,2] 
1079	move                     2     y(1)     a(1) 
1080	chain                    p / 2 
1081
1082------ Test 59 -------
1083p(A) :-
1084	A = B,
1085	p,
1086	p(A).
1087
1088p / 1:
1089label(1):
1090	get_variable             1     a(1)     y(1) 
1091	callf                    p / 0     Y[1] 
1092	move_chain               y(1)     a(1)     ref(1) 
1093
1094------ Test 60 -------
1095p :-
1096	A = B,
1097	p,
1098	p(A, B).
1099
1100p / 0:
1101label(1):
1102	allocate                 2 
1103	put_global_variable      y(1) 
1104	move                     y(1)     y(2) 
1105	callf                    ref(1)     Y[1,2] 
1106	move                     2     y(1)     a(1) 
1107	chain                    p / 2 
1108
1109------ Test 61 -------
1110p :-
1111	(
1112	    !,
1113	    A = B,
1114	    !,
1115	    p
1116	;
1117	    p
1118	).
1119
1120p / 0:
1121label(1):
1122	savecut                  a(1) 
1123	try_me_else              0     1     ref(3) 
1124label(2):
1125	cut                      a(1) 
1126	jmp                      ref(1) 
1127label(3):
1128	trust_me                 0 
1129label(4):
1130	jmp                      ref(1) 
1131
1132------ Test 70 -------
1133p :-
1134	A = B,
1135	p(A).
1136
1137p / 0:
1138label(1):
1139	put_variable             a(1) 
1140	jmp                      p / 1 
1141
1142------ Test 71 -------
1143p(A) :-
1144	B = A,
1145	p(B),
1146	q(A).
1147
1148p / 1:
1149label(1):
1150	move                     a(1)     a(2) 
1151	get_variable             1     a(1)     y(1) 
1152	move                     a(2)     a(1) 
1153	callf                    ref(1)     Y[1] 
1154	move_chain               y(1)     a(1)     q / 1 
1155
1156------ Test 72 -------
1157p(A) :-
1158	r,
1159	B = A,
1160	p(B),
1161	q(A).
1162
1163p / 1:
1164label(1):
1165	get_variable             1     a(1)     y(1) 
1166	callf                    r / 0     Y[1] 
1167	move_callf               y(1)     a(1)     ref(1)     Y[1] 
1168	move_chain               y(1)     a(1)     q / 1 
1169
1170------ Test 73 -------
1171p(A) :-
1172	r,
1173	var(A),
1174	B = A,
1175	p(B),
1176	q(A).
1177
1178p / 1:
1179label(1):
1180	get_variable             1     a(1)     y(1) 
1181	callf                    r / 0     Y[1] 
1182	move                     y(1)     a(2) 
1183	bi_var                   a(2) 
1184	move_callf               y(1)     a(1)     ref(1)     Y[1] 
1185	move_chain               y(1)     a(1)     q / 1 
1186
1187------ Test 74 -------
1188p :-
1189	A = B,
1190	p(A),
1191	q(B).
1192
1193p / 0:
1194label(1):
1195	allocate                 1 
1196	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
1197	move_chain               y(1)     a(1)     q / 1 
1198
1199------ Test 75 -------
1200p :-
1201	p(A),
1202	var(A),
1203	B = A.
1204
1205p / 0:
1206label(1):
1207	allocate                 1 
1208	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
1209	move                     y(1)     a(1) 
1210	bi_var                   a(1) 
1211	exit                 
1212
1213------ Test 76 -------
1214p :-
1215	p(A, B),
1216	var(A),
1217	var(B),
1218	A = B.
1219
1220p / 0:
1221label(1):
1222	allocate                 2 
1223	put_global_variable2     a(1)     y(1)     a(2)     y(2) 
1224	callf                    p / 2     Y[1,2] 
1225	move                     y(1)     a(1) 
1226	bi_var                   a(1) 
1227	move                     y(2)     a(2) 
1228	bi_var                   a(2) 
1229	get_value                a(1)     a(2) 
1230	exit                 
1231
1232------ Test 77 -------
1233p :-
1234	p(A, B),
1235	var(A),
1236	A = B.
1237
1238p / 0:
1239label(1):
1240	allocate                 2 
1241	put_global_variable2     a(1)     y(1)     a(2)     y(2) 
1242	callf                    p / 2     Y[1,2] 
1243	move                     y(1)     a(1) 
1244	bi_var                   a(1) 
1245	get_value                a(1)     y(2) 
1246	exit                 
1247
1248------ Test 80 -------
1249p(A, B, C, D, E) :-
1250	t,
1251	F = G,
1252	H = I,
1253	J = I,
1254	K = L,
1255	M = L,
1256	N = A,
1257	O = P,
1258	Q = R,
1259	S = R,
1260	T = U,
1261	V = L,
1262	W = B,
1263	O = X,
1264	Q = Y,
1265	S = Y,
1266	T = Z,
1267	V = L,
1268	W = C,
1269	A1 = B1,
1270	C1 = D1,
1271	E1 = D1,
1272	F1 = G1,
1273	H1 = L,
1274	I1 = D,
1275	A1 = J1,
1276	C1 = K1,
1277	E1 = K1,
1278	F1 = L1,
1279	H1 = L,
1280	I1 = E,
1281	q,
1282	A1 = M1,
1283	C1 = N1,
1284	E1 = N1,
1285	F1 = O1,
1286	H1 = A1,
1287	G1 = A,
1288	r(L, I1, U, Z, A1, C1, E1, F1, H1, G1, L1),
1289	var(O1).
1290
1291p / 5:
1292label(1):
1293	get_variable             17     a(1)     y(13) 
1294	move                     4     a(2)     y(14) 
1295	callf                    t / 0     Y[13,14,15,16,17] 
1296	put_variable             a(1) 
1297	put_global_variable      y(2) 
1298	put_variable2            a(1)     a(1) 
1299	move                     a(1)     a(2) 
1300	put_global_variable      a(3)     y(3) 
1301	get_value                a(2)     a(1) 
1302	move                     a(3)     y(4) 
1303	get_value                y(2)     y(2) 
1304	get_value                y(14)     y(15) 
1305	put_global_variable      y(5) 
1306	put_global_variable      a(1)     y(6) 
1307	move                     a(1)     y(7) 
1308	put_global_variable      y(8) 
1309	move                     y(8)     y(9)     y(2)     y(10)     y(16)     y(11) 
1310	get_value                y(6)     y(7) 
1311	move                     y(8)     y(12) 
1312	get_value                y(2)     y(10) 
1313	get_value                y(11)     y(17) 
1314	callf                    q / 0     Y[2,3,4,5,6,7,8,9,10,11,12,13] 
1315	get_value                y(6)     y(7) 
1316	move                     y(8)     y(1) 
1317	get_value                y(5)     y(10) 
1318	get_value                y(9)     y(13) 
1319	move                     y(2)     a(1)     y(11)     a(2) 
1320	move                     6     y(3)     a(3) 
1321	move                     y(10)     a(9)     y(9)     a(10)     y(12)     a(11) 
1322	callf                    r / 11     Y[1] 
1323	move                     y(1)     a(1) 
1324	bi_var                   a(1) 
1325	exit                 
1326
1327------ Test 101 -------
1328p :-
1329	p(A),
1330	q(B, A),
1331	r(B),
1332	t(B).
1333
1334p / 0:
1335label(1):
1336	allocate                 2 
1337	put_global_variable_callf     a(1)     y(2)     p / 1     Y[2] 
1338	put_global_variable      a(1)     y(1) 
1339	move_callf               y(2)     a(2)     q / 2     Y[1] 
1340	move_callf               y(1)     a(1)     r / 1     Y[1] 
1341	move_chain               y(1)     a(1)     t / 1 
1342
1343------ Test 102 -------
1344p :-
1345	p(A),
1346	q(A, B, C),
1347	r(B, D),
1348	t(D).
1349
1350p / 0:
1351label(1):
1352	allocate                 3 
1353	put_global_variable_callf     a(1)     y(3)     p / 1     Y[3] 
1354	put_variable             a(3) 
1355	put_global_variable      a(2)     y(2) 
1356	move_callf               y(3)     a(1)     q / 3     Y[2] 
1357	put_global_variable      a(2)     y(1) 
1358	move_callf               y(2)     a(1)     r / 2     Y[1] 
1359	move_chain               y(1)     a(1)     t / 1 
1360
1361------ Test 103 -------
1362p :-
1363	(
1364	    f(A),
1365	    g(A),
1366	    a(B)
1367	;
1368	    b(C),
1369	    c(C),
1370	    d(B)
1371	),
1372	e(B).
1373
1374p / 0:
1375label(1):
1376	try_me_else              0     0     ref(3) 
1377label(2):
1378	allocate                 2 
1379	put_global_variable_callf     a(1)     y(2)     f / 1     Y[2] 
1380	move_callf               y(2)     a(1)     g / 1     Y[] 
1381	put_global_variable_callf     a(1)     y(1)     a / 1     Y[1] 
1382	move_chain               y(1)     a(1)     e / 1 
1383label(3):
1384	trust_me                 0 
1385label(4):
1386	allocate                 2 
1387	put_global_variable_callf     a(1)     y(2)     b / 1     Y[2] 
1388	move_callf               y(2)     a(1)     c / 1     Y[] 
1389	put_global_variable_callf     a(1)     y(1)     d / 1     Y[1] 
1390	move_chain               y(1)     a(1)     e / 1 
1391
1392------ Test 104 -------
1393p :-
1394	(
1395	    f(A),
1396	    g(A),
1397	    a(B)
1398	;
1399	    b(C),
1400	    c(C)
1401	),
1402	e(B).
1403
1404p / 0:
1405label(1):
1406	try_me_else              0     0     ref(3) 
1407label(2):
1408	allocate                 2 
1409	put_global_variable_callf     a(1)     y(2)     f / 1     Y[2] 
1410	move_callf               y(2)     a(1)     g / 1     Y[] 
1411	put_global_variable_callf     a(1)     y(1)     a / 1     Y[1] 
1412	move_chain               y(1)     a(1)     e / 1 
1413label(3):
1414	trust_me                 0 
1415label(4):
1416	allocate                 2 
1417	put_global_variable_callf     a(1)     y(2)     b / 1     Y[2] 
1418	move_callf               y(2)     a(1)     c / 1     Y[] 
1419	gc_test                  1 
1420	put_global_variable      y(1) 
1421	move_chain               y(1)     a(1)     e / 1 
1422
1423------ Test 105 -------
1424p :-
1425	(
1426	    f(A),
1427	    g(A),
1428	    a(B)
1429	;
1430	    b(C),
1431	    c(C)
1432	),
1433	e(B),
1434	f(B).
1435
1436p / 0:
1437label(1):
1438	try_me_else              0     0     ref(3) 
1439label(2):
1440	allocate                 2 
1441	put_global_variable_callf     a(1)     y(2)     f / 1     Y[2] 
1442	move_callf               y(2)     a(1)     g / 1     Y[] 
1443	put_global_variable_callf     a(1)     y(1)     a / 1     Y[1] 
1444label(5):
1445	move_callf               y(1)     a(1)     e / 1     Y[1] 
1446	move_chain               y(1)     a(1)     f / 1 
1447label(3):
1448	trust_me                 0 
1449label(4):
1450	allocate                 2 
1451	put_global_variable_callf     a(1)     y(2)     b / 1     Y[2] 
1452	move_callf               y(2)     a(1)     c / 1     Y[] 
1453	gc_test                  1 
1454	put_global_variable      y(1) 
1455	branch                   ref(5) 
1456
1457------ Test 106 -------
1458p :-
1459	a(A),
1460	(
1461	    b(A),
1462	    c(B)
1463	;
1464	    d(A),
1465	    e(B)
1466	),
1467	f(B).
1468
1469p / 0:
1470label(1):
1471	allocate                 2 
1472	put_global_variable_callf     a(1)     y(2)     a / 1     Y[2] 
1473	try_me_else              0     0     ref(3) 
1474label(2):
1475	move_callf               y(2)     a(1)     b / 1     Y[] 
1476	put_global_variable_callf     a(1)     y(1)     c / 1     Y[1] 
1477	move_chain               y(1)     a(1)     f / 1 
1478label(3):
1479	trust_me_inline          0     Y[2] 
1480label(4):
1481	move_callf               y(2)     a(1)     d / 1     Y[] 
1482	put_global_variable_callf     a(1)     y(1)     e / 1     Y[1] 
1483	move_chain               y(1)     a(1)     f / 1 
1484
1485------ Test 107 -------
1486p :-
1487	a(A),
1488	(
1489	    b(A),
1490	    c(B)
1491	;
1492	    d(A),
1493	    e(B)
1494	),
1495	f(C).
1496
1497p / 0:
1498label(1):
1499	allocate                 1 
1500	put_global_variable_callf     a(1)     y(1)     a / 1     Y[1] 
1501	try_me_else              0     0     ref(3) 
1502label(2):
1503	move_callf               y(1)     a(1)     b / 1     Y[] 
1504	put_variable             a(1) 
1505	callf                    c / 1     Y[] 
1506label(5):
1507	put_variable             a(1) 
1508	chain                    f / 1 
1509label(3):
1510	trust_me_inline          0     Y[1] 
1511label(4):
1512	move_callf               y(1)     a(1)     d / 1     Y[] 
1513	put_variable             a(1) 
1514	callf                    e / 1     Y[] 
1515	branch                   ref(5) 
1516
1517------ Test 108 -------
1518p :-
1519	a(A),
1520	(
1521	    b(A)
1522	;
1523	    c
1524	),
1525	d.
1526
1527p / 0:
1528label(1):
1529	allocate                 1 
1530	put_global_variable_callf     a(1)     y(1)     a / 1     Y[1] 
1531	try_me_else              0     0     ref(3) 
1532label(2):
1533	move_callf               y(1)     a(1)     b / 1     Y[] 
1534	chain                    d / 0 
1535label(3):
1536	trust_me_inline          0     Y[] 
1537label(4):
1538	callf                    c / 0     Y[] 
1539	chain                    d / 0 
1540
1541------ Test 109 -------
1542p :-
1543	a,
1544	b(A),
1545	c(B),
1546	d(A),
1547	e(B),
1548	f.
1549
1550p / 0:
1551label(1):
1552	allocate                 2 
1553	callf                    a / 0     Y[] 
1554	put_global_variable_callf     a(1)     y(2)     b / 1     Y[2] 
1555	put_global_variable_callf     a(1)     y(1)     c / 1     Y[1,2] 
1556	move_callf               y(2)     a(1)     d / 1     Y[1] 
1557	move_callf               y(1)     a(1)     e / 1     Y[] 
1558	chain                    f / 0 
1559
1560------ Test 110 -------
1561p :-
1562	a(A),
1563	a(A, B, C),
1564	(
1565	    a
1566	;
1567	    (
1568		b(B),
1569		c(B)
1570	    ;
1571		(
1572		    d(D),
1573		    e(D)
1574		;
1575		    f(E),
1576		    g(E)
1577		)
1578	    )
1579	),
1580	f(D, C, F),
1581	g(F).
1582
1583p / 0:
1584label(1):
1585	allocate                 6 
1586	put_global_variable_callf     a(1)     y(6)     a / 1     Y[6] 
1587	put_global_variable2     a(2)     y(4)     a(3)     y(3) 
1588	move_callf               y(6)     a(1)     a / 3     Y[3,4] 
1589	try_me_else              0     0     ref(3) 
1590label(2):
1591	callf                    a / 0     Y[3] 
1592	gc_test                  1 
1593	put_global_variable      y(2) 
1594label(9):
1595	put_global_variable      a(3)     y(1) 
1596	move                     2     y(2)     a(1) 
1597	callf                    f / 3     Y[1] 
1598	move_chain               y(1)     a(1)     g / 1 
1599label(3):
1600	retry_me_inline          0     ref(5)     Y[3,4] 
1601label(4):
1602	move_callf               y(4)     a(1)     b / 1     Y[3,4] 
1603	move_callf               y(4)     a(1)     c / 1     Y[3] 
1604	gc_test                  1 
1605	put_global_variable      y(2) 
1606	branch                   ref(9) 
1607label(5):
1608	retry_me_inline          0     ref(7)     Y[3] 
1609label(6):
1610	put_global_variable_callf     a(1)     y(2)     d / 1     Y[2,3] 
1611	move_callf               y(2)     a(1)     e / 1     Y[2,3] 
1612	branch                   ref(9) 
1613label(7):
1614	trust_me_inline          0     Y[3] 
1615label(8):
1616	put_global_variable_callf     a(1)     y(5)     f / 1     Y[3,5] 
1617	move_callf               y(5)     a(1)     g / 1     Y[3] 
1618	gc_test                  1 
1619	put_global_variable      y(2) 
1620	branch                   ref(9) 
1621
1622------ Test 120 -------
1623sentence(A, B, C, D, E) :-
1624	declarative(A, B, F, D, G),
1625	terminator(., F, C, G, E).
1626
1627sentence / 5:
1628label(1):
1629	get_variable             4     a(3)     y(1) 
1630	move                     a(5)     y(2) 
1631	put_global_variable2     a(3)     y(3)     a(5)     y(4) 
1632	callf                    declarative / 5     Y[1,2,3,4] 
1633	put_atom                 a(1)     . 
1634	move                     y(3)     a(2)     y(1)     a(3)     y(4)     a(4) 
1635	move_chain               y(2)     a(5)     terminator / 5 
1636
1637------ Test 130 -------
1638p(A, B) :-
1639	+(1, A, C),
1640	+(2, C, D),
1641	+(3, D, B).
1642
1643p / 2:
1644label(1):
1645	bi_addi                  a(1)     1     a(1)     24 
1646	bi_addi                  a(1)     2     a(1)     24 
1647	bi_addi                  a(1)     3     a(1)     24 
1648	get_value                a(1)     a(2) 
1649	ret                  
1650
1651------ Test 200 -------
1652p :-
1653	a(A, A).
1654
1655p / 0:
1656label(1):
1657	put_variable             a(1) 
1658	move                     a(1)     a(2) 
1659	jmp                      a / 2 
1660
1661------ Test 201 -------
1662p :-
1663	a(f(A), A).
1664
1665p / 0:
1666label(1):
1667	put_structure            a(1)     f / 1 
1668	push_variable            a(2) 
1669	jmp                      a / 2 
1670
1671------ Test 202 -------
1672p :-
1673	a(f(A), A),
1674	b(f(A), A),
1675	c(A, f(A)).
1676
1677p / 0:
1678label(1):
1679	put_structure            a(1)     f / 1 
1680	allocate                 1 
1681	push_variable            y(1) 
1682	move_callf               y(1)     a(2)     a / 2     Y[1] 
1683	put_structure            a(1)     f / 1 
1684	push_value               y(1) 
1685	move_callf               y(1)     a(2)     b / 2     Y[1] 
1686	put_structure            a(2)     f / 1 
1687	push_value               y(1) 
1688	move_chain               y(1)     a(1)     c / 2 
1689
1690------ Test 203 -------
1691p :-
1692	a(f(A), g(A)),
1693	b(f(g(A), A)),
1694	c(f(A, g(A))).
1695
1696p / 0:
1697label(1):
1698	put_structure            a(1)     f / 1 
1699	allocate                 1 
1700	push_variable            y(1) 
1701	put_structure            a(2)     g / 1 
1702	push_value               y(1) 
1703	callf                    a / 2     Y[1] 
1704	put_structure            a(1)     f / 2 
1705	push_structure           2 
1706	push_value               y(1) 
1707	write_did                g / 1 
1708	push_value               y(1) 
1709	callf                    b / 1     Y[1] 
1710	put_structure            a(1)     f / 2 
1711	push_value               y(1) 
1712	push_structure           2 
1713	write_did                g / 1 
1714	push_value               y(1) 
1715	chain                    c / 1 
1716
1717------ Test 204 -------
1718p(A) :-
1719	a(A).
1720
1721p / 1:
1722label(1):
1723	jmp                      a / 1 
1724
1725------ Test 205 -------
1726p(A) :-
1727	a(a, A).
1728
1729p / 1:
1730label(1):
1731	move                     a(1)     a(2) 
1732	put_atom                 a(1)     a 
1733	jmp                      a / 2 
1734
1735------ Test 206 -------
1736p(a).
1737
1738p / 1:
1739label(1):
1740	get_atom                 a(1)     a 
1741	ret                  
1742
1743------ Test 207 -------
1744p(A) :-
1745	a(A, A).
1746
1747p / 1:
1748label(1):
1749	move                     a(1)     a(2) 
1750	jmp                      a / 2 
1751
1752------ Test 208 -------
1753p(A, B) :-
1754	a(A, B).
1755
1756p / 2:
1757label(1):
1758	jmp                      a / 2 
1759
1760------ Test 209 -------
1761p(A, B) :-
1762	a(B, A).
1763
1764p / 2:
1765label(1):
1766	swap                     a(1)     a(2) 
1767	jmp                      a / 2 
1768
1769------ Test 210 -------
1770p :-
1771	A = B,
1772	a(B, A).
1773
1774p / 0:
1775label(1):
1776	put_variable             a(2) 
1777	move                     a(2)     a(1) 
1778	jmp                      a / 2 
1779
1780------ Test 211 -------
1781p :-
1782	a(A, f(A)).
1783
1784p / 0:
1785label(1):
1786	put_structure            a(2)     f / 1 
1787	push_variable            a(1) 
1788	jmp                      a / 2 
1789
1790------ Test 212 -------
1791p(A) :-
1792	a(f(A)).
1793
1794p / 1:
1795label(1):
1796	move                     a(1)     a(2) 
1797	put_structure            a(1)     f / 1 
1798	push_value               a(2) 
1799	jmp                      a / 1 
1800
1801------ Test 213 -------
1802p(A, B, C) :-
1803	a(C, A, B).
1804
1805p / 3:
1806label(1):
1807	rot                      a(2)     a(1)     a(3) 
1808	jmp                      a / 3 
1809
1810------ Test 214 -------
1811p(A, B, C) :-
1812	a(f(C), f(A), f(B)).
1813
1814p / 3:
1815label(1):
1816	move                     a(1)     a(4) 
1817	put_structure            a(1)     f / 1 
1818	push_value               a(3) 
1819	move                     a(2)     a(5) 
1820	put_structure            a(2)     f / 1 
1821	push_value               a(4) 
1822	put_structure            a(3)     f / 1 
1823	push_value               a(5) 
1824	jmp                      a / 3 
1825
1826------ Test 215 -------
1827p(A, B, C, A) :-
1828	a(C, A, B).
1829
1830p / 4:
1831label(1):
1832	get_value                a(4)     a(1) 
1833	rot                      a(2)     a(1)     a(3) 
1834	jmp                      a / 3 
1835
1836------ Test 216 -------
1837p(A, B, C, A) :-
1838	a(f(C), f(A), f(B)).
1839
1840p / 4:
1841label(1):
1842	get_value                a(4)     a(1) 
1843	move                     a(1)     a(4) 
1844	put_structure            a(1)     f / 1 
1845	push_value               a(3) 
1846	move                     a(2)     a(5) 
1847	put_structure            a(2)     f / 1 
1848	push_value               a(4) 
1849	put_structure            a(3)     f / 1 
1850	push_value               a(5) 
1851	jmp                      a / 3 
1852
1853------ Test 217 -------
1854p(f(A)) :-
1855	q(A).
1856
1857p / 1:
1858label(1):
1859	get_structure            a(1)     f / 1     ref(2) 
1860	write_variable           a(1) 
1861	jmp                      q / 1 
1862label(2):
1863	read_variable            a(1) 
1864	jmp                      q / 1 
1865
1866------ Test 218 -------
1867p(A, B, C) :-
1868	a(B, C, A).
1869
1870p / 3:
1871label(1):
1872	rot                      a(3)     a(1)     a(2) 
1873	jmp                      a / 3 
1874
1875------ Test 219 -------
1876p(A, B, C) :-
1877	D = A,
1878	a(C, D, B).
1879
1880p / 3:
1881label(1):
1882	rot                      a(3)     a(2)     a(1) 
1883	jmp                      a / 3 
1884
1885------ Test 220 -------
1886p(A, B, C) :-
1887	D = A,
1888	a(B, C, D).
1889
1890p / 3:
1891label(1):
1892	rot                      a(2)     a(3)     a(1) 
1893	jmp                      a / 3 
1894
1895------ Test 221 -------
1896p :-
1897	a(A, f(A)).
1898
1899p / 0:
1900label(1):
1901	put_structure            a(2)     f / 1 
1902	push_variable            a(1) 
1903	jmp                      a / 2 
1904
1905------ Test 222 -------
1906p :-
1907	q(a, A, B, A).
1908
1909p / 0:
1910label(1):
1911	put_variable2            a(2)     a(3) 
1912	put_atom                 a(1)     a 
1913	move                     a(2)     a(4) 
1914	jmp                      q / 4 
1915
1916------ Test 223 -------
1917p :-
1918	q(A, A),
1919	r(A).
1920
1921p / 0:
1922label(1):
1923	allocate                 1 
1924	put_global_variable      a(1)     y(1) 
1925	move                     a(1)     a(2) 
1926	callf                    q / 2     Y[1] 
1927	move_chain               y(1)     a(1)     r / 1 
1928
1929------ Test 224 -------
1930p :-
1931	q(f(A), A),
1932	r(A).
1933
1934p / 0:
1935label(1):
1936	put_structure            a(1)     f / 1 
1937	allocate                 1 
1938	push_variable            y(1) 
1939	move_callf               y(1)     a(2)     q / 2     Y[1] 
1940	move_chain               y(1)     a(1)     r / 1 
1941
1942------ Test 225 -------
1943p :-
1944	q([a]),
1945	r(A).
1946
1947p / 0:
1948label(1):
1949	put_list                 a(1) 
1950	write_atom               a 
1951	push_nil             
1952	allocate                 0 
1953	callf                    q / 1     Y[] 
1954	put_variable             a(1) 
1955	chain                    r / 1 
1956
1957------ Test 226 -------
1958p :-
1959	q([a, b]),
1960	r(A).
1961
1962p / 0:
1963label(1):
1964	put_list                 a(1) 
1965	write_atom               a 
1966	push_list            
1967	write_atom               b 
1968	push_nil             
1969	allocate                 0 
1970	callf                    q / 1     Y[] 
1971	put_variable             a(1) 
1972	chain                    r / 1 
1973
1974------ Test 227 -------
1975p :-
1976	q([a, A, b]),
1977	r(A).
1978
1979p / 0:
1980label(1):
1981	put_list                 a(1) 
1982	write_atom               a 
1983	push_list            
1984	allocate                 1 
1985	push_variable            y(1) 
1986	push_list            
1987	write_atom               b 
1988	push_nil             
1989	callf                    q / 1     Y[1] 
1990	move_chain               y(1)     a(1)     r / 1 
1991
1992------ Test 228 -------
1993p :-
1994	q([a, b|A]),
1995	r(A).
1996
1997p / 0:
1998label(1):
1999	put_list                 a(1) 
2000	write_atom               a 
2001	push_list            
2002	write_atom               b 
2003	allocate                 1 
2004	push_variable            y(1) 
2005	callf                    q / 1     Y[1] 
2006	move_chain               y(1)     a(1)     r / 1 
2007
2008------ Test 229 -------
2009p :-
2010	q([A], A),
2011	r(A).
2012
2013p / 0:
2014label(1):
2015	put_list                 a(1) 
2016	allocate                 1 
2017	push_variable            y(1) 
2018	push_nil             
2019	move_callf               y(1)     a(2)     q / 2     Y[1] 
2020	move_chain               y(1)     a(1)     r / 1 
2021
2022------ Test 230 -------
2023p :-
2024	q(A, [A]),
2025	r(A).
2026
2027p / 0:
2028label(1):
2029	put_list                 a(2) 
2030	allocate                 1 
2031	push_variable            y(1) 
2032	push_nil             
2033	move_callf               y(1)     a(1)     q / 2     Y[1] 
2034	move_chain               y(1)     a(1)     r / 1 
2035
2036------ Test 231 -------
2037p :-
2038	q([A], A).
2039
2040p / 0:
2041label(1):
2042	put_list                 a(1) 
2043	push_variable            a(2) 
2044	push_nil             
2045	jmp                      q / 2 
2046
2047------ Test 232 -------
2048p :-
2049	q(A, [A]).
2050
2051p / 0:
2052label(1):
2053	put_list                 a(2) 
2054	push_variable            a(1) 
2055	push_nil             
2056	jmp                      q / 2 
2057
2058------ Test 233 -------
2059p(A) :-
2060	q([A], A).
2061
2062p / 1:
2063label(1):
2064	move                     a(1)     a(2) 
2065	put_list                 a(1) 
2066	push_value               a(2) 
2067	push_nil             
2068	jmp                      q / 2 
2069
2070------ Test 234 -------
2071p(A) :-
2072	q(A, [A]).
2073
2074p / 1:
2075label(1):
2076	put_list                 a(2) 
2077	push_value               a(1) 
2078	push_nil             
2079	jmp                      q / 2 
2080
2081------ Test 235 -------
2082p(A) :-
2083	q("hello", 3.4, 5_2).
2084
2085p / 1:
2086label(1):
2087	put_string               a(1)     "hello" 
2088	put_constant             a(2)     3.4 
2089	put_constant             a(3)     5_2 
2090	jmp                      q / 3 
2091
2092------ Test 236 -------
2093p(A) :-
2094	q(f("hello", 3.4, 5_2)).
2095
2096p / 1:
2097label(1):
2098	put_structure            a(1)     f / 3 
2099	push_string              "hello" 
2100	push_constant            3.4 
2101	push_constant            5_2 
2102	jmp                      q / 1 
2103
2104------ Test 240 -------
2105p :-
2106	p(A, B),
2107	(
2108	    p(A),
2109	    r,
2110	    p(B),
2111	    s
2112	;
2113	    p(B),
2114	    r,
2115	    p(A),
2116	    s
2117	).
2118
2119p / 0:
2120label(1):
2121	allocate                 2 
2122	put_global_variable2     a(1)     y(1)     a(2)     y(2) 
2123	callf                    p / 2     Y[1,2] 
2124	try_me_else              0     0     ref(3) 
2125label(2):
2126	move_callf               y(1)     a(1)     p / 1     Y[2] 
2127	callf                    r / 0     Y[2] 
2128	move_callf               y(2)     a(1)     p / 1     Y[] 
2129	chain                    s / 0 
2130label(3):
2131	trust_me_inline          0     Y[1,2] 
2132label(4):
2133	move_callf               y(2)     a(1)     p / 1     Y[1] 
2134	callf                    r / 0     Y[1] 
2135	move_callf               y(1)     a(1)     p / 1     Y[] 
2136	chain                    s / 0 
2137
2138------ Test jdm(1) -------
2139p(A, B, a) :-
2140	q(A, b, f(B)).
2141
2142p / 3:
2143label(1):
2144	get_atom                 a(3)     a 
2145	put_structure            a(3)     f / 1 
2146	push_value               a(2) 
2147	put_atom                 a(2)     b 
2148	jmp                      q / 3 
2149
2150------ Test jdm(2) -------
2151del(t(nil, A, B), A, B).
2152del(t(A, B, nil), B, A).
2153del(t(A, B, C), B, r(A, D, E)) :-
2154	delmin(C, D, E).
2155
2156INDEXES for (nondet) disjunction [2]
21571. Quality 2.5
2158    [] - [1, 2]
2159    [structure] - [1, 2]
2160    [structure, r / 3] - [1, 2, 3]
2161    [var] - [1, 2, 3]
21622. Quality 3.0
2163    [] - []
2164    [structure] - []
2165    [structure, t / 3] - [1, 2, 3]
2166    [var] - [1, 2, 3]
2167Branch determinisms for disjunction [2]
2168    Branch 1: try
2169    Branch 2: retry
2170    Branch 3: trust
2171del / 3:
2172label(1):
2173	functor_switch           a(3) 
2174		r / 3: 	ref(3)
2175		default: 	ref(16)
2176
2177label(3):
2178	try_me_else              0     3     ref(6) 
2179label(4):
2180	get_structure            a(1)     t / 3     ref(5) 
2181	write_atom               nil 
2182	write_value              a(2) 
2183	write_value              a(3) 
2184	ret                  
2185label(5):
2186	read_atom                nil 
2187	read_value               a(2) 
2188	read_value               a(3) 
2189	ret                  
2190label(6):
2191	retry_me_else            0     ref(9) 
2192label(7):
2193	get_structure            a(1)     t / 3     ref(8) 
2194	write_value              a(3) 
2195	write_value              a(2) 
2196	write_atom               nil 
2197	ret                  
2198label(8):
2199	read_value               a(3) 
2200	read_value               a(2) 
2201	read_atom                nil 
2202	ret                  
2203label(9):
2204	trust_me                 0 
2205label(10):
2206	get_structure            a(1)     t / 3     ref(11) 
2207	write_variable           a(4) 
2208	write_value              a(2) 
2209	write_variable           a(1) 
2210	branch                   ref(12) 
2211label(11):
2212	read_variable            a(4) 
2213	read_value               a(2) 
2214	read_variable            a(1) 
2215label(12):
2216	get_structure            a(3)     r / 3     ref(13) 
2217	write_value              a(4) 
2218	write_variable2          a(2)     a(3) 
2219	jmp                      delmin / 3 
2220label(13):
2221	read_value               a(4) 
2222	read_variable2           a(2)     a(3) 
2223	jmp                      delmin / 3 
2224label(16):
2225	try                      0     3     ref(4) 
2226	trust                    0     ref(7) 
2227
2228------ Test jdm(3) -------
2229dob(person(A, B, C, D), C).
2230
2231dob / 2:
2232label(1):
2233	get_structure            a(1)     person / 4     ref(2) 
2234	write_void               2 
2235	write_value              a(2) 
2236	write_void           
2237	ret                  
2238label(2):
2239	read_void                2 
2240	read_value               a(2) 
2241	ret                  
2242
2243------ Test jdm(4) -------
2244qsort([A|B], C) :-
2245	split(A, B, D, E),
2246	qsort(D, F),
2247	qsort(E, G),
2248	append(F, G, C).
2249
2250qsort / 2:
2251label(1):
2252	get_list                 a(1)     ref(2) 
2253	write_variable           a(1) 
2254	move                     a(2)     a(5) 
2255	write_variable           a(2) 
2256	branch                   ref(3) 
2257label(2):
2258	read_variable            a(1) 
2259	move                     a(2)     a(5) 
2260	read_variable            a(2) 
2261label(3):
2262	get_variable             5     a(5)     y(3) 
2263	put_global_variable2     a(3)     y(5)     a(4)     y(4) 
2264	callf                    split / 4     Y[3,4,5] 
2265	put_global_variable      a(2)     y(2) 
2266	move_callf               y(5)     a(1)     ref(1)     Y[2,3,4] 
2267	put_global_variable      a(2)     y(1) 
2268	move_callf               y(4)     a(1)     ref(1)     Y[1,2,3] 
2269	move                     y(2)     a(1)     y(1)     a(2)     y(3)     a(3) 
2270	chain                    append / 3 
2271
2272------ Test jdm(r4) -------
2273qsort(A, [B|C]) :-
2274	split(B, C, D, E),
2275	qsort(D, F),
2276	qsort(E, G),
2277	append(F, G, A).
2278
2279qsort / 2:
2280label(1):
2281	get_list                 a(2)     ref(2) 
2282	move                     a(1)     a(5) 
2283	write_variable2          a(1)     a(2) 
2284	branch                   ref(3) 
2285label(2):
2286	move                     a(1)     a(5) 
2287	read_variable2           a(1)     a(2) 
2288label(3):
2289	get_variable             5     a(5)     y(3) 
2290	put_global_variable2     a(3)     y(5)     a(4)     y(4) 
2291	callf                    split / 4     Y[3,4,5] 
2292	put_global_variable      a(2)     y(2) 
2293	move_callf               y(5)     a(1)     ref(1)     Y[2,3,4] 
2294	put_global_variable      a(2)     y(1) 
2295	move_callf               y(4)     a(1)     ref(1)     Y[1,2,3] 
2296	move                     y(2)     a(1)     y(1)     a(2)     y(3)     a(3) 
2297	chain                    append / 3 
2298
2299------ Test jdm(5) -------
2300rev(A, B) :-
2301	revacc([], A, B).
2302
2303rev / 2:
2304label(1):
2305	shift                    a(3)     a(2)     a(1) 
2306	put_nil                  a(1) 
2307	jmp                      revacc / 3 
2308
2309------ Test jdm(6) -------
2310p(A, B, C, D) :-
2311	q(a, A, B, C, D).
2312
2313p / 4:
2314label(1):
2315	shift                    a(5)     a(4)     a(3)     a(2)     a(1) 
2316	put_atom                 a(1)     a 
2317	jmp                      q / 5 
2318
2319------ Test mjt(1) -------
2320p(f(A), g(A)) :-
2321	q(a, A).
2322
2323p / 2:
2324label(1):
2325	get_structure            a(1)     f / 1     ref(2) 
2326	move                     a(2)     a(3) 
2327	write_variable           a(2) 
2328	get_structure            a(3)     g / 1     ref(4) 
2329	write_value              a(2) 
2330	put_atom                 a(1)     a 
2331	jmp                      q / 2 
2332label(2):
2333	move                     a(2)     a(3) 
2334	read_variable            a(2) 
2335	get_structure            a(3)     g / 1     ref(4) 
2336	write_value              a(2) 
2337	put_atom                 a(1)     a 
2338	jmp                      q / 2 
2339label(4):
2340	read_value               a(2) 
2341	put_atom                 a(1)     a 
2342	jmp                      q / 2 
2343
2344------ Test mjt(2) -------
2345p(b(A, B), B, C, a(A)) :-
2346	q(c, C, A, B).
2347
2348p / 4:
2349label(1):
2350	get_structure            a(1)     b / 2     ref(2) 
2351	shift                    a(5)     a(4)     a(2)     a(3) 
2352	write_variable           a(3) 
2353	write_value              a(4) 
2354	get_structure            a(5)     a / 1     ref(4) 
2355	write_value              a(3) 
2356	put_atom                 a(1)     c 
2357	jmp                      q / 4 
2358label(2):
2359	shift                    a(5)     a(4)     a(2)     a(3) 
2360	read_variable            a(3) 
2361	read_value               a(4) 
2362	get_structure            a(5)     a / 1     ref(4) 
2363	write_value              a(3) 
2364	put_atom                 a(1)     c 
2365	jmp                      q / 4 
2366label(4):
2367	read_value               a(3) 
2368	put_atom                 a(1)     c 
2369	jmp                      q / 4 
2370
2371------ Test mjt(3) -------
2372p(g(A), s(B, h(A)), f(B)) :-
2373	var(B),
2374	var(A),
2375	q(a, A, B).
2376
2377p / 3:
2378label(1):
2379	get_structure            a(1)     g / 1     ref(2) 
2380	move                     a(2)     a(4) 
2381	write_variable           a(2) 
2382	branch                   ref(3) 
2383label(2):
2384	move                     a(2)     a(4) 
2385	read_variable            a(2) 
2386label(3):
2387	get_structure            a(4)     s / 2     ref(5) 
2388	move                     a(3)     a(4) 
2389	write_variable           a(3) 
2390	write_structure          h / 1 
2391label(4):
2392	write_value              a(2) 
2393	get_structure            a(4)     f / 1     ref(7) 
2394	write_value              a(3) 
2395	branch                   ref(8) 
2396label(5):
2397	move                     a(3)     a(4) 
2398	read_variable            a(3) 
2399	read_last_structure      h / 1     ref(4) 
2400	read_value               a(2) 
2401	get_structure            a(4)     f / 1     ref(7) 
2402	write_value              a(3) 
2403	branch                   ref(8) 
2404label(7):
2405	read_value               a(3) 
2406label(8):
2407	bi_var                   a(3) 
2408	bi_var                   a(2) 
2409	put_atom                 a(1)     a 
2410	jmp                      q / 3 
2411
2412------ Test 300 -------
2413p(A, B) :-
2414	p(A),
2415	+(A, B, C),
2416	-(A, D, C),
2417	q(C).
2418
2419p / 2:
2420label(1):
2421	get_variable             2     a(1)     y(1) 
2422	move                     a(2)     y(2) 
2423	callf                    p / 1     Y[1,2] 
2424	move                     2     y(1)     a(2) 
2425	bi_add                   a(2)     a(3)     a(1)     16 
2426	put_variable             a(3) 
2427	bi_sub                   a(2)     a(3)     a(2)     16 
2428	get_value                a(2)     a(1) 
2429	chain                    q / 1 
2430
2431------ Test 301 -------
2432p(A, B) :-
2433	p(A),
2434	r(A, B, C),
2435	q(C).
2436
2437p / 2:
2438label(1):
2439	get_variable             3     a(1)     y(2) 
2440	move                     a(2)     y(3) 
2441	callf                    p / 1     Y[2,3] 
2442	put_global_variable      a(3)     y(1) 
2443	move                     2     y(2)     a(1) 
2444	callf                    r / 3     Y[1] 
2445	move_chain               y(1)     a(1)     q / 1 
2446
2447------ Test 302 -------
2448p(A, B) :-
2449	p(B),
2450	r(A, B, C),
2451	q(C).
2452
2453p / 2:
2454label(1):
2455	get_variable             3     a(1)     y(2) 
2456	move                     a(2)     y(3) 
2457	move                     a(2)     a(1) 
2458	callf                    p / 1     Y[2,3] 
2459	put_global_variable      a(3)     y(1) 
2460	move                     2     y(2)     a(1) 
2461	callf                    r / 3     Y[1] 
2462	move_chain               y(1)     a(1)     q / 1 
2463
2464------ Test 303 -------
2465p :-
2466	q,
2467	A = 1,
2468	B = 3,
2469	p(C),
2470	r(A, C, B).
2471
2472p / 0:
2473label(1):
2474	allocate                 3 
2475	callf                    q / 0     Y[] 
2476	put_integer              a(2)     1 
2477	move                     a(2)     y(1) 
2478	put_integer              a(3)     3 
2479	move                     a(3)     y(2) 
2480	put_global_variable_callf     a(1)     y(3)     p / 1     Y[1,2,3] 
2481	move                     y(1)     a(1)     y(3)     a(2)     y(2)     a(3) 
2482	chain                    r / 3 
2483
2484------ Test 304 -------
2485p :-
2486	q,
2487	A = f(B),
2488	a(A, B).
2489
2490p / 0:
2491label(1):
2492	allocate                 0 
2493	callf                    q / 0     Y[] 
2494	put_structure            a(1)     f / 1 
2495	push_variable            a(2) 
2496	chain                    a / 2 
2497
2498------ Test 305 -------
2499p(A, B) :-
2500	C = 1,
2501	A = B,
2502	q(B, C).
2503
2504p / 2:
2505label(1):
2506	shift                    a(3)     a(1)     a(2) 
2507	put_integer              a(2)     1 
2508	get_value                a(3)     a(1) 
2509	jmp                      q / 2 
2510
2511------ Test 306 -------
2512p1(A) :-
2513	A = 1.
2514
2515p1 / 1:
2516label(1):
2517	get_integer              a(1)     1 
2518	ret                  
2519
2520------ Test 307 -------
2521p2(A) :-
2522	1 = A.
2523
2524p2 / 1:
2525label(1):
2526	get_integer              a(1)     1 
2527	ret                  
2528
2529------ Test 308 -------
2530p3(A) :-
2531	A = 1,
2532	p1(A),
2533	p1(A).
2534
2535p3 / 1:
2536label(1):
2537	get_integer              a(1)     1 
2538	get_variable             1     a(1)     y(1) 
2539	callf                    p1 / 1     Y[1] 
2540	move_chain               y(1)     a(1)     p1 / 1 
2541
2542------ Test 309 -------
2543p4(A) :-
2544	1 = A,
2545	p1(A),
2546	p1(A).
2547
2548p4 / 1:
2549label(1):
2550	get_integer              a(1)     1 
2551	get_variable             1     a(1)     y(1) 
2552	callf                    p1 / 1     Y[1] 
2553	move_chain               y(1)     a(1)     p1 / 1 
2554
2555------ Test 310 -------
2556p5(f(A)) :-
2557	A = 1,
2558	p1(A),
2559	p1(A).
2560
2561p5 / 1:
2562label(1):
2563	allocate                 1 
2564	get_structure            a(1)     f / 1     ref(2) 
2565	write_variable           y(1) 
2566	branch                   ref(3) 
2567label(2):
2568	read_variable            y(1) 
2569label(3):
2570	move                     y(1)     a(1) 
2571	get_integer              a(1)     1 
2572	callf                    p1 / 1     Y[1] 
2573	move_chain               y(1)     a(1)     p1 / 1 
2574
2575------ Test 311 -------
2576p5a(f(A)) :-
2577	p1(A),
2578	A = 1,
2579	p1(A).
2580
2581p5a / 1:
2582label(1):
2583	allocate                 1 
2584	get_structure            a(1)     f / 1     ref(2) 
2585	write_variable           y(1) 
2586	branch                   ref(3) 
2587label(2):
2588	read_variable            y(1) 
2589label(3):
2590	move_callf               y(1)     a(1)     p1 / 1     Y[1] 
2591	move                     y(1)     a(1) 
2592	get_integer              a(1)     1 
2593	chain                    p1 / 1 
2594
2595------ Test 312 -------
2596p6(f(A)) :-
2597	1 = A,
2598	p1(A),
2599	p1(A).
2600
2601p6 / 1:
2602label(1):
2603	allocate                 1 
2604	get_structure            a(1)     f / 1     ref(2) 
2605	write_variable           y(1) 
2606	branch                   ref(3) 
2607label(2):
2608	read_variable            y(1) 
2609label(3):
2610	move                     y(1)     a(1) 
2611	get_integer              a(1)     1 
2612	callf                    p1 / 1     Y[1] 
2613	move_chain               y(1)     a(1)     p1 / 1 
2614
2615------ Test 313 -------
2616p6a(f(A)) :-
2617	p1(A),
2618	1 = A,
2619	p1(A).
2620
2621p6a / 1:
2622label(1):
2623	allocate                 1 
2624	get_structure            a(1)     f / 1     ref(2) 
2625	write_variable           y(1) 
2626	branch                   ref(3) 
2627label(2):
2628	read_variable            y(1) 
2629label(3):
2630	move_callf               y(1)     a(1)     p1 / 1     Y[1] 
2631	move                     y(1)     a(1) 
2632	get_integer              a(1)     1 
2633	chain                    p1 / 1 
2634
2635------ Test 314 -------
2636p7(f(A)) :-
2637	A = 1,
2638	p1(A).
2639
2640p7 / 1:
2641label(1):
2642	get_structure            a(1)     f / 1     ref(2) 
2643	write_variable           a(1) 
2644	get_integer              a(1)     1 
2645	jmp                      p1 / 1 
2646label(2):
2647	read_variable            a(1) 
2648	get_integer              a(1)     1 
2649	jmp                      p1 / 1 
2650
2651------ Test 315 -------
2652p8(f(A)) :-
2653	1 = A,
2654	p1(A).
2655
2656p8 / 1:
2657label(1):
2658	get_structure            a(1)     f / 1     ref(2) 
2659	write_variable           a(1) 
2660	get_integer              a(1)     1 
2661	jmp                      p1 / 1 
2662label(2):
2663	read_variable            a(1) 
2664	get_integer              a(1)     1 
2665	jmp                      p1 / 1 
2666
2667------ Test 316 -------
2668p9(A) :-
2669	B = 1,
2670	p1(B),
2671	p1(B),
2672	B = A.
2673
2674p9 / 1:
2675label(1):
2676	allocate                 2 
2677	move                     a(1)     a(2) 
2678	put_integer              a(1)     1 
2679	move                     a(1)     y(2)     a(2)     y(1) 
2680	callf                    p1 / 1     Y[1,2] 
2681	move_callf               y(2)     a(1)     p1 / 1     Y[1,2] 
2682	get_value                y(1)     y(2) 
2683	exit                 
2684
2685------ Test 317 -------
2686p9a(A) :-
2687	p1(B),
2688	C = 1,
2689	p1(C),
2690	p1(C),
2691	C = A.
2692
2693p9a / 1:
2694label(1):
2695	get_variable             2     a(1)     y(2) 
2696	put_variable             a(1) 
2697	callf                    p1 / 1     Y[2] 
2698	put_integer              a(1)     1 
2699	move                     a(1)     y(1) 
2700	callf                    p1 / 1     Y[1,2] 
2701	move_callf               y(1)     a(1)     p1 / 1     Y[1,2] 
2702	get_value                y(1)     y(2) 
2703	exit                 
2704
2705------ Test 318 -------
2706p10(A) :-
2707	1 = B,
2708	p1(B),
2709	p1(B),
2710	B = A.
2711
2712p10 / 1:
2713label(1):
2714	allocate                 2 
2715	move                     a(1)     a(2) 
2716	put_integer              a(1)     1 
2717	move                     a(1)     y(2)     a(2)     y(1) 
2718	callf                    p1 / 1     Y[1,2] 
2719	move_callf               y(2)     a(1)     p1 / 1     Y[1,2] 
2720	get_value                y(1)     y(2) 
2721	exit                 
2722
2723------ Test 319 -------
2724p10a(A) :-
2725	p1(B),
2726	1 = C,
2727	p1(C),
2728	C = A.
2729
2730p10a / 1:
2731label(1):
2732	get_variable             2     a(1)     y(2) 
2733	put_variable             a(1) 
2734	callf                    p1 / 1     Y[2] 
2735	put_integer              a(1)     1 
2736	move                     a(1)     y(1) 
2737	callf                    p1 / 1     Y[1,2] 
2738	get_value                y(1)     y(2) 
2739	exit                 
2740
2741------ Test 320 -------
2742p11(A) :-
2743	B = 1,
2744	call(true),
2745	B = A.
2746
2747p11 / 1:
2748label(1):
2749	allocate                 2 
2750	put_integer              a(3)     1 
2751	move                     a(3)     y(2)     a(1)     y(1) 
2752	put_atom                 a(1)     true 
2753	put_module               a(2)     eclipse 
2754	callf                    sepia_kernel : call_ / 2     Y[1,2] 
2755	get_value                y(1)     y(2) 
2756	exit                 
2757
2758------ Test 321 -------
2759p12(A, B, C) :-
2760	D = 1,
2761	E = 2,
2762	F = 3,
2763	call(true),
2764	A = D,
2765	B = E,
2766	C = F.
2767
2768p12 / 3:
2769label(1):
2770	allocate                 6 
2771	put_integer              a(4)     1 
2772	move                     a(4)     y(4) 
2773	put_integer              a(5)     2 
2774	move                     a(5)     y(5) 
2775	put_integer              a(6)     3 
2776	move                     a(6)     y(6) 
2777	move                     3     a(1)     y(1) 
2778	put_atom                 a(1)     true 
2779	put_module               a(2)     eclipse 
2780	callf                    sepia_kernel : call_ / 2     Y[1,2,3,4,5,6] 
2781	get_value                y(1)     y(4) 
2782	get_value                y(2)     y(5) 
2783	get_value                y(3)     y(6) 
2784	exit                 
2785
2786------ Test 322 -------
2787p13(A, B) :-
2788	C = 1,
2789	D = 2,
2790	E = 3,
2791	current_op(F, G, H),
2792	A = C,
2793	B = D.
2794
2795p13 / 2:
2796label(1):
2797	allocate                 4 
2798	put_integer              a(5)     1 
2799	move                     a(5)     y(3) 
2800	put_integer              a(6)     2 
2801	move                     a(6)     y(4) 
2802	move                     2     a(1)     y(1) 
2803	put_variable2            a(1)     a(2) 
2804	put_variable             a(3) 
2805	put_module               a(4)     eclipse 
2806	callf                    sepia_kernel : current_op_body / 4     Y[1,2,3,4] 
2807	get_value                y(1)     y(3) 
2808	get_value                y(2)     y(4) 
2809	exit                 
2810
2811------ Test 323 -------
2812b1 :-
2813	A = s(B),
2814	eq(B, C),
2815	A = s(1),
2816	C = 1.
2817
2818b1 / 0:
2819label(1):
2820	allocate                 2 
2821	put_structure            a(3)     s / 1 
2822	push_variable            a(1) 
2823	move                     a(3)     y(1) 
2824	put_global_variable_callf     a(2)     y(2)     eq / 2     Y[1,2] 
2825	move                     y(1)     a(1) 
2826	get_structure            a(1)     s / 1     ref(2) 
2827	write_integer            1 
2828	branch                   ref(3) 
2829label(2):
2830	read_integer             1 
2831label(3):
2832	move                     y(2)     a(1) 
2833	get_integer              a(1)     1 
2834	exit                 
2835
2836------ Test 324 -------
2837do_x(A) :-
2838	(
2839	    A = B
2840	;
2841	    A = [1|B]
2842	),
2843	do_x(B).
2844
2845INDEXES for (nondet) disjunction [2]
28461. Quality 1.5
2847    [] - [1]
2848    [list] - [1, 2]
2849    [var] - [1, 2]
2850Branch determinisms for disjunction [2]
2851    Branch 1: try
2852    Branch 2: trust
2853do_x / 1:
2854label(1):
2855	list_switch              a(1)     ref(2)     ref(3)     ref(3) 
2856label(2):
2857	try_me_else              0     1     ref(4) 
2858label(3):
2859	get_variable             1     a(1)     y(1) 
2860	move_chain               y(1)     a(1)     ref(1) 
2861label(4):
2862	trust_me                 0 
2863label(5):
2864	allocate                 1 
2865	get_list                 a(1)     ref(6) 
2866	write_integer            1 
2867	write_variable           y(1) 
2868	move_chain               y(1)     a(1)     ref(1) 
2869label(6):
2870	read_integer             1 
2871	read_variable            y(1) 
2872	move_chain               y(1)     a(1)     ref(1) 
2873
2874------ Test u(1) -------
2875p(foo(A, B, C)) :-
2876	q(B),
2877	r(C).
2878
2879p / 1:
2880label(1):
2881	allocate                 1 
2882	get_structure            a(1)     foo / 3     ref(2) 
2883	write_void           
2884	write_variable2          a(1)     y(1) 
2885	branch                   ref(3) 
2886label(2):
2887	read_void            
2888	read_variable2           a(1)     y(1) 
2889label(3):
2890	callf                    q / 1     Y[1] 
2891	move_chain               y(1)     a(1)     r / 1 
2892
2893------ Test ana(1) -------
2894p :-
2895	q,
2896	A = 1,
2897	B = 3,
2898	p(A).
2899
2900p / 0:
2901label(1):
2902	allocate                 0 
2903	callf                    q / 0     Y[] 
2904	put_integer              a(1)     1 
2905	chain                    p / 1 
2906
2907------ Test ana(2) -------
2908p :-
2909	A = 1,
2910	A = B.
2911
2912p / 0:
2913label(1):
2914	put_integer              a(1)     1 
2915	ret                  
2916
2917------ Test ana(3) -------
2918p :-
2919	A = B.
2920
2921p / 0:
2922label(1):
2923	ret                  
2924
2925------ Test ana(4) -------
2926p :-
2927	A = 3,
2928	B = A.
2929
2930p / 0:
2931label(1):
2932	put_integer              a(1)     3 
2933	ret                  
2934
2935------ Test ana(5) -------
2936p :-
2937	A = 3,
2938	q,
2939	A = 4,
2940	r.
2941
2942WARNING: calling =/2 will always fail
2943p / 0:
2944label(1):
2945	allocate                 1 
2946	put_integer              a(1)     3 
2947	move                     a(1)     y(1) 
2948	callf                    q / 0     Y[1] 
2949	move                     y(1)     a(1) 
2950	get_integer              a(1)     4 
2951	chain                    r / 0 
2952
2953------ Test ana(6) -------
2954p :-
2955	A = 3,
2956	q,
2957	B = A,
2958	r,
2959	B = 4.
2960
2961WARNING: calling =/2 will always fail
2962p / 0:
2963label(1):
2964	allocate                 2 
2965	put_integer              a(1)     3 
2966	move                     a(1)     y(2) 
2967	callf                    q / 0     Y[2] 
2968	move                     y(2)     y(1) 
2969	callf                    r / 0     Y[1] 
2970	move                     y(1)     a(1) 
2971	get_integer              a(1)     4 
2972	exit                 
2973
2974------ Test ana(7) -------
2975p :-
2976	A = f(B, C),
2977	q,
2978	A = f(D, E),
2979	r.
2980
2981p / 0:
2982label(1):
2983	allocate                 1 
2984	put_structure            a(1)     f / 2 
2985	push_void                2 
2986	move                     a(1)     y(1) 
2987	callf                    q / 0     Y[1] 
2988	move                     y(1)     a(1) 
2989	get_structure            a(1)     f / 2     ref(2) 
2990	write_void               2 
2991label(2):
2992	chain                    r / 0 
2993
2994------ Test ana(8) -------
2995p :-
2996	integer(A),
2997	(
2998	    A = 1
2999	;
3000	    A = 2
3001	),
3002	q.
3003
3004INDEXES for (nondet) disjunction [2]
30051. Quality 1.3
3006    [] - []
3007    [var] - [1, 2]
3008    [integer] - []
3009    [integer, 1] - [1]
3010    [integer, 2] - [2]
3011Branch determinisms for disjunction [2]
3012    Branch 1: try
3013    Branch 2: trust
3014p / 0:
3015label(1):
3016	put_variable             a(1) 
3017	bi_integer               a(1) 
3018	integer_switch           a(1) 
3019		1: 	ref(8)
3020		2: 	ref(9)
3021		default: 	ref(fail)
3022
3023label(3):
3024	try_me_else              0     1     ref(5) 
3025label(4):
3026	get_integer              a(1)     1 
3027label(8):
3028	jmp                      q / 0 
3029label(5):
3030	trust_me                 0 
3031label(6):
3032	get_integer              a(1)     2 
3033label(9):
3034	jmp                      q / 0 
3035
3036------ Test ana(9) -------
3037p(A, B) :-
3038	f(a, B) = f(A, b),
3039	q.
3040
3041p / 2:
3042label(1):
3043	get_atom                 a(1)     a 
3044	get_atom                 a(2)     b 
3045	jmp                      q / 0 
3046
3047------ Test idx(1) -------
3048p :-
3049	p(A),
3050	(
3051	    A = 1,
3052	    p1
3053	;
3054	    A = 2,
3055	    p2
3056	).
3057
3058INDEXES for (nondet) disjunction [3]
30591. Quality 1.3
3060    [] - []
3061    [var] - [1, 2]
3062    [integer] - []
3063    [integer, 1] - [1]
3064    [integer, 2] - [2]
3065Branch determinisms for disjunction [3]
3066    Branch 1: try
3067    Branch 2: trust
3068p / 0:
3069label(1):
3070	allocate                 1 
3071	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
3072	integer_switch           y(1) 
3073		1: 	ref(4)
3074		2: 	ref(6)
3075		default: 	ref(fail)
3076
3077label(3):
3078	try_me_else              0     0     ref(5) 
3079label(4):
3080	move                     y(1)     a(1) 
3081	get_integer              a(1)     1 
3082	chain                    p1 / 0 
3083label(5):
3084	trust_me_inline          0     Y[1] 
3085label(6):
3086	move                     y(1)     a(1) 
3087	get_integer              a(1)     2 
3088	chain                    p2 / 0 
3089
3090------ Test idx(2) -------
3091p :-
3092	p(A, B),
3093	(
3094	    B = a,
3095	    A = 1,
3096	    p1
3097	;
3098	    A = 2,
3099	    B = b,
3100	    p2
3101	).
3102
3103INDEXES for (nondet) disjunction [3]
31041. Quality 1.3
3105    [] - []
3106    [var] - [1, 2]
3107    [integer] - []
3108    [integer, 1] - [1]
3109    [integer, 2] - [2]
31102. Quality 1.3
3111    [] - []
3112    [atom] - []
3113    [atom, a] - [1]
3114    [atom, b] - [2]
3115    [var] - [1, 2]
3116Branch determinisms for disjunction [3]
3117    Branch 1: try
3118    Branch 2: trust
3119p / 0:
3120label(1):
3121	allocate                 2 
3122	put_global_variable2     a(1)     y(1)     a(2)     y(2) 
3123	callf                    p / 2     Y[1,2] 
3124	integer_switch           y(1) 
3125		1: 	ref(5)
3126		2: 	ref(7)
3127		default: 	ref(fail)
3128
3129	atom_switch              y(2) 
3130		a: 	ref(5)
3131		b: 	ref(7)
3132		default: 	ref(fail)
3133
3134label(4):
3135	try_me_else              0     0     ref(6) 
3136label(5):
3137	move                     y(2)     a(1) 
3138	get_atom                 a(1)     a 
3139	move                     y(1)     a(1) 
3140	get_integer              a(1)     1 
3141	chain                    p1 / 0 
3142label(6):
3143	trust_me_inline          0     Y[1,2] 
3144label(7):
3145	move                     y(1)     a(1) 
3146	get_integer              a(1)     2 
3147	move                     y(2)     a(1) 
3148	get_atom                 a(1)     b 
3149	chain                    p2 / 0 
3150
3151------ Test idx(3) -------
3152p(A, B) :-
3153	(
3154	    B = a,
3155	    A = 1,
3156	    p1
3157	;
3158	    (
3159		A = 2,
3160		B = b,
3161		p2
3162	    ;
3163		B = c,
3164		p3
3165	    )
3166	).
3167
3168INDEXES for (nondet) disjunction [2]
31691. Quality 1.5
3170    [] - []
3171    [atom] - []
3172    [atom, a] - [1]
3173    [atom, b] - [2]
3174    [atom, c] - [3]
3175    [var] - [1, 2, 3]
31762. Quality 2.0
3177    [] - [3]
3178    [var] - [1, 2, 3]
3179    [integer] - [3]
3180    [integer, 1] - [1, 3]
3181    [integer, 2] - [2, 3]
3182Branch determinisms for disjunction [2]
3183    Branch 1: try
3184    Branch 2: retry
3185    Branch 3: trust
3186p / 2:
3187label(1):
3188	atom_switch              a(2) 
3189		a: 	ref(12)
3190		b: 	ref(6)
3191		c: 	ref(13)
3192		default: 	ref(fail)
3193
3194	integer_switch           a(1) 
3195		1: 	ref(10)
3196		2: 	ref(11)
3197		default: 	ref(8)
3198
3199label(3):
3200	try_me_else              0     2     ref(5) 
3201label(4):
3202	get_atom                 a(2)     a 
3203label(12):
3204	get_integer              a(1)     1 
3205	jmp                      p1 / 0 
3206label(5):
3207	retry_me_else            0     ref(7) 
3208label(6):
3209	get_integer              a(1)     2 
3210	get_atom                 a(2)     b 
3211	jmp                      p2 / 0 
3212label(7):
3213	trust_me                 0 
3214label(8):
3215	get_atom                 a(2)     c 
3216label(13):
3217	jmp                      p3 / 0 
3218label(10):
3219	try                      0     2     ref(4) 
3220	trust                    0     ref(8) 
3221label(11):
3222	try                      0     2     ref(6) 
3223	trust                    0     ref(8) 
3224
3225------ Test idx(4) -------
3226p(A, B) :-
3227	(
3228	    B = a,
3229	    A = 1,
3230	    p1
3231	;
3232	    (
3233		integer(A),
3234		B = b,
3235		p2
3236	    ;
3237		number(A),
3238		p3
3239	    )
3240	).
3241
3242INDEXES for (nondet) disjunction [2]
32431. Quality 1.8
3244    [] - []
3245    [var] - [1]
3246    [rational] - [3]
3247    [breal] - [3]
3248    [bignum] - [2, 3]
3249    [integer] - [2, 3]
3250    [integer, 1] - [1, 2, 3]
3251    [double] - [3]
32522. Quality 2.0
3253    [] - [3]
3254    [atom] - [3]
3255    [atom, a] - [1, 3]
3256    [atom, b] - [2, 3]
3257    [var] - [1, 2, 3]
3258Branch determinisms for disjunction [2]
3259    Branch 1: try
3260    Branch 2: retry
3261    Branch 3: trust
3262p / 2:
3263label(1):
3264	switch_on_type           a(1) 
3265		meta: 	ref(4)
3266		[]: 	ref(fail)
3267		atom: 	ref(fail)
3268		bignum: 	ref(10)
3269		breal: 	ref(13)
3270		double: 	ref(13)
3271		goal: 	ref(fail)
3272		handle: 	ref(fail)
3273		integer: 	ref(11)
3274		list: 	ref(fail)
3275		rational: 	ref(13)
3276		string: 	ref(fail)
3277		structure: 	ref(fail)
3278
3279	branch                   ref(4) 
3280label(2):
3281	atom_switch              a(2) 
3282		a: 	ref(12)
3283		b: 	ref(10)
3284		default: 	ref(8)
3285
3286label(3):
3287	try_me_else              0     2     ref(5) 
3288label(4):
3289	get_atom                 a(2)     a 
3290	get_integer              a(1)     1 
3291	jmp                      p1 / 0 
3292label(5):
3293	retry_me_else            0     ref(7) 
3294label(6):
3295	bi_integer               a(1) 
3296	get_atom                 a(2)     b 
3297	jmp                      p2 / 0 
3298label(7):
3299	trust_me                 0 
3300label(8):
3301	bi_number                a(1) 
3302label(13):
3303	jmp                      p3 / 0 
3304label(10):
3305	try                      0     2     ref(6) 
3306	trust                    0     ref(8) 
3307label(11):
3308	integer_switch           a(1) 
3309		1: 	ref(2)
3310		default: 	ref(10)
3311
3312label(12):
3313	try                      0     2     ref(4) 
3314	trust                    0     ref(8) 
3315
3316------ Test idx(5) -------
3317p(A) :-
3318	(
3319	    A = 1,
3320	    p1
3321	;
3322	    (
3323		A = 2,
3324		p2
3325	    ;
3326		(
3327		    integer(A),
3328		    p3
3329		;
3330		    number(A),
3331		    p4
3332		)
3333	    )
3334	).
3335
3336INDEXES for (nondet) disjunction [2]
33371. Quality 2.2
3338    [] - []
3339    [var] - [1, 2]
3340    [rational] - [4]
3341    [breal] - [4]
3342    [bignum] - [3, 4]
3343    [integer] - [3, 4]
3344    [integer, 1] - [1, 3, 4]
3345    [integer, 2] - [2, 3, 4]
3346    [double] - [4]
3347Branch determinisms for disjunction [2]
3348    Branch 1: try
3349    Branch 2: retry
3350    Branch 3: retry
3351    Branch 4: trust
3352p / 1:
3353label(1):
3354	switch_on_type           a(1) 
3355		meta: 	ref(14)
3356		[]: 	ref(fail)
3357		atom: 	ref(fail)
3358		bignum: 	ref(11)
3359		breal: 	ref(16)
3360		double: 	ref(16)
3361		goal: 	ref(fail)
3362		handle: 	ref(fail)
3363		integer: 	ref(15)
3364		list: 	ref(fail)
3365		rational: 	ref(16)
3366		string: 	ref(fail)
3367		structure: 	ref(fail)
3368
3369label(14):
3370	try                      0     1     ref(3) 
3371	trust                    0     ref(5) 
3372label(3):
3373	get_integer              a(1)     1 
3374	jmp                      p1 / 0 
3375label(5):
3376	get_integer              a(1)     2 
3377	jmp                      p2 / 0 
3378label(7):
3379	bi_integer               a(1) 
3380	jmp                      p3 / 0 
3381label(9):
3382	bi_number                a(1) 
3383label(16):
3384	jmp                      p4 / 0 
3385label(11):
3386	try                      0     1     ref(7) 
3387	trust                    0     ref(9) 
3388label(12):
3389	try                      0     1     ref(3) 
3390	retry                    0     ref(7) 
3391	trust                    0     ref(9) 
3392label(13):
3393	try                      0     1     ref(5) 
3394	retry                    0     ref(7) 
3395	trust                    0     ref(9) 
3396label(15):
3397	integer_switch           a(1) 
3398		1: 	ref(12)
3399		2: 	ref(13)
3400		default: 	ref(11)
3401
3402
3403------ Test idx(6) -------
3404p :-
3405	p(A, B),
3406	(
3407	    B == a,
3408	    A = 1,
3409	    p1
3410	;
3411	    A = 2,
3412	    B == b,
3413	    p2
3414	).
3415
3416INDEXES for (semidet) disjunction [3]
34171. Quality 1.0
3418    [] - []
3419    [var] - [2]
3420    [atom] - []
3421    [atom, a] - [1]
3422    [atom, b] - [2]
34232. Quality 1.3
3424    [] - []
3425    [var] - [1, 2]
3426    [integer] - []
3427    [integer, 1] - [1]
3428    [integer, 2] - [2]
3429Branch determinisms for disjunction [3]
3430    Branch 1: det
3431    Branch 2: det
3432p / 0:
3433label(1):
3434	allocate                 2 
3435	put_global_variable2     a(1)     y(1)     a(2)     y(2) 
3436	callf                    p / 2     Y[1,2] 
3437	atom_switch              y(2) 
3438		a: 	ref(5)
3439		b: 	ref(7)
3440		default: 	ref(fail)
3441
3442label(7):
3443	move                     y(1)     a(1) 
3444	get_integer              a(1)     2 
3445	move                     y(2)     a(1) 
3446	in_get_atom              a(1)     b 
3447	chain                    p2 / 0 
3448label(5):
3449	move                     y(2)     a(1) 
3450	in_get_atom              a(1)     a 
3451	move                     y(1)     a(1) 
3452	get_integer              a(1)     1 
3453	chain                    p1 / 0 
3454
3455------ Test idx(7) -------
3456p(A) :-
3457	(
3458	    A = [],
3459	    p1
3460	;
3461	    A = [B|C],
3462	    p2
3463	).
3464
3465INDEXES for (nondet) disjunction [2]
34661. Quality 1.3
3467    [] - []
3468    [list] - [2]
3469    [[]] - [1]
3470    [var] - [1, 2]
3471Branch determinisms for disjunction [2]
3472    Branch 1: try
3473    Branch 2: trust
3474p / 1:
3475label(1):
3476	list_switch              a(1)     ref(6)     ref(8)     ref(fail) 
3477label(2):
3478	try_me_else              0     1     ref(4) 
3479label(3):
3480	get_nil                  a(1) 
3481label(8):
3482	jmp                      p1 / 0 
3483label(4):
3484	trust_me                 0 
3485label(5):
3486	get_list                 a(1)     ref(6) 
3487	write_void               2 
3488label(6):
3489	jmp                      p2 / 0 
3490
3491------ Test idx(8) -------
3492p(A) :-
3493	(
3494	    var(A),
3495	    !,
3496	    p
3497	;
3498	    q
3499	).
3500
3501INDEXES for (semidet) disjunction [2]
35021. Quality 1.0
3503    [] - [2]
3504    [var] - [1]
3505Branch determinisms for disjunction [2]
3506    Branch 1: det
3507    Branch 2: det
3508p / 1:
3509label(1):
3510	switch_on_type           a(1) 
3511		meta: 	ref(7)
3512		[]: 	ref(5)
3513		atom: 	ref(5)
3514		bignum: 	ref(5)
3515		breal: 	ref(5)
3516		double: 	ref(5)
3517		goal: 	ref(5)
3518		handle: 	ref(5)
3519		integer: 	ref(5)
3520		list: 	ref(5)
3521		rational: 	ref(5)
3522		string: 	ref(5)
3523		structure: 	ref(5)
3524
3525	branch                   ref(7) 
3526label(3):
3527	bi_var                   a(1) 
3528label(7):
3529	jmp                      p / 0 
3530label(5):
3531	jmp                      q / 0 
3532
3533------ Test idx(9) -------
3534p(A) :-
3535	(
3536	    A = 3.1,
3537	    p
3538	;
3539	    A = 9.9,
3540	    q
3541	).
3542
3543INDEXES for (nondet) disjunction [2]
35441. Quality 2.0
3545    [] - []
3546    [var] - [1, 2]
3547    [double] - [1, 2]
3548Branch determinisms for disjunction [2]
3549    Branch 1: try
3550    Branch 2: trust
3551p / 1:
3552label(1):
3553	try_me_else              0     1     ref(3) 
3554label(2):
3555	get_constant             a(1)     3.1 
3556	jmp                      p / 0 
3557label(3):
3558	trust_me                 0 
3559label(4):
3560	get_constant             a(1)     9.9 
3561	jmp                      q / 0 
3562
3563------ Test idx(10) -------
3564p(A) :-
3565	(
3566	    A = "foo",
3567	    p
3568	;
3569	    (
3570		A = "bar",
3571		q
3572	    ;
3573		r
3574	    )
3575	).
3576
3577INDEXES for (nondet) disjunction [2]
35781. Quality 2.0
3579    [] - [3]
3580    [var] - [1, 2, 3]
3581    [string] - [1, 2, 3]
3582Branch determinisms for disjunction [2]
3583    Branch 1: try
3584    Branch 2: retry
3585    Branch 3: trust
3586p / 1:
3587label(1):
3588	switch_on_type           a(1) 
3589		meta: 	ref(2)
3590		[]: 	ref(7)
3591		atom: 	ref(7)
3592		bignum: 	ref(7)
3593		breal: 	ref(7)
3594		double: 	ref(7)
3595		goal: 	ref(7)
3596		handle: 	ref(7)
3597		integer: 	ref(7)
3598		list: 	ref(7)
3599		rational: 	ref(7)
3600		string: 	ref(2)
3601		structure: 	ref(7)
3602
3603label(2):
3604	try_me_else              0     1     ref(4) 
3605label(3):
3606	get_string               a(1)     "foo" 
3607	jmp                      p / 0 
3608label(4):
3609	retry_me_else            0     ref(6) 
3610label(5):
3611	get_string               a(1)     "bar" 
3612	jmp                      q / 0 
3613label(6):
3614	trust_me                 0 
3615label(7):
3616	jmp                      r / 0 
3617
3618------ Test idx(11) -------
3619p(A) :-
3620	(
3621	    A = f(1),
3622	    p
3623	;
3624	    (
3625		A = g(1, 2),
3626		q
3627	    ;
3628		r
3629	    )
3630	).
3631
3632INDEXES for (nondet) disjunction [2]
36331. Quality 2.0
3634    [] - [3]
3635    [structure] - [3]
3636    [structure, g / 2] - [2, 3]
3637    [structure, f / 1] - [1, 3]
3638    [var] - [1, 2, 3]
3639Branch determinisms for disjunction [2]
3640    Branch 1: try
3641    Branch 2: retry
3642    Branch 3: trust
3643p / 1:
3644label(1):
3645	functor_switch           a(1) 
3646		g / 2: 	ref(14)
3647		f / 1: 	ref(15)
3648		default: 	ref(12)
3649
3650label(3):
3651	try_me_else              0     1     ref(7) 
3652label(4):
3653	get_structure            a(1)     f / 1     ref(5) 
3654	write_integer            1 
3655	jmp                      p / 0 
3656label(5):
3657	read_integer             1 
3658	jmp                      p / 0 
3659label(7):
3660	retry_me_else            0     ref(11) 
3661label(8):
3662	get_structure            a(1)     g / 2     ref(9) 
3663	write_integer2           1     2 
3664	jmp                      q / 0 
3665label(9):
3666	read_integer             1 
3667	read_integer             2 
3668	jmp                      q / 0 
3669label(11):
3670	trust_me                 0 
3671label(12):
3672	jmp                      r / 0 
3673label(14):
3674	try                      0     1     ref(8) 
3675	trust                    0     ref(12) 
3676label(15):
3677	try                      0     1     ref(4) 
3678	trust                    0     ref(12) 
3679
3680------ Test idx(12) -------
3681p(A) :-
3682	(
3683	    A = [],
3684	    p
3685	;
3686	    r
3687	).
3688
3689INDEXES for (nondet) disjunction [2]
36901. Quality 1.5
3691    [] - [2]
3692    [[]] - [1, 2]
3693    [var] - [1, 2]
3694Branch determinisms for disjunction [2]
3695    Branch 1: try
3696    Branch 2: trust
3697p / 1:
3698label(1):
3699	list_switch              a(1)     ref(5)     ref(2)     ref(5) 
3700label(2):
3701	try_me_else              0     1     ref(4) 
3702label(3):
3703	get_nil                  a(1) 
3704	jmp                      p / 0 
3705label(4):
3706	trust_me                 0 
3707label(5):
3708	jmp                      r / 0 
3709
3710------ Test idx(13) -------
3711p(A) :-
3712	(
3713	    A = []
3714	->
3715	    p
3716	;
3717	    r
3718	).
3719
3720INDEXES for (semidet) disjunction [2]
37211. Quality 1.0
3722    [] - [2]
3723    [[]] - [1]
3724    [var] - [1]
3725Branch determinisms for disjunction [2]
3726    Branch 1: det
3727    Branch 2: det
3728p / 1:
3729label(1):
3730	list_switch              a(1)     ref(5)     ref(7)     ref(5) 
3731label(3):
3732	get_nil                  a(1) 
3733label(7):
3734	jmp                      p / 0 
3735label(5):
3736	jmp                      r / 0 
3737
3738------ Test idx(14) -------
3739p :-
3740	p(A, B),
3741	(
3742	    a == B,
3743	    1 = A,
3744	    p1
3745	;
3746	    2 = A,
3747	    b == B,
3748	    p2
3749	).
3750
3751INDEXES for (semidet) disjunction [3]
37521. Quality 1.0
3753    [] - []
3754    [var] - [2]
3755    [atom] - []
3756    [atom, a] - [1]
3757    [atom, b] - [2]
37582. Quality 1.3
3759    [] - []
3760    [var] - [1, 2]
3761    [integer] - []
3762    [integer, 1] - [1]
3763    [integer, 2] - [2]
3764Branch determinisms for disjunction [3]
3765    Branch 1: det
3766    Branch 2: det
3767p / 0:
3768label(1):
3769	allocate                 2 
3770	put_global_variable2     a(1)     y(1)     a(2)     y(2) 
3771	callf                    p / 2     Y[1,2] 
3772	atom_switch              y(2) 
3773		a: 	ref(5)
3774		b: 	ref(7)
3775		default: 	ref(fail)
3776
3777label(7):
3778	move                     y(1)     a(1) 
3779	get_integer              a(1)     2 
3780	move                     y(2)     a(1) 
3781	in_get_atom              a(1)     b 
3782	chain                    p2 / 0 
3783label(5):
3784	move                     y(2)     a(1) 
3785	in_get_atom              a(1)     a 
3786	move                     y(1)     a(1) 
3787	get_integer              a(1)     1 
3788	chain                    p1 / 0 
3789
3790------ Test idx(15) -------
3791p :-
3792	p(A, B),
3793	(
3794	    a == B,
3795	    1 = A,
3796	    p1
3797	;
3798	    (
3799		2 = A,
3800		b == B,
3801		p2
3802	    ;
3803		A == B,
3804		p3
3805	    )
3806	).
3807
3808INDEXES for (nondet) disjunction [3]
38091. Quality 1.7
3810    [] - [3]
3811    [var] - [2, 3]
3812    [atom] - [3]
3813    [atom, a] - [1, 3]
3814    [atom, b] - [2, 3]
38152. Quality 2.0
3816    [] - [3]
3817    [var] - [1, 2, 3]
3818    [integer] - [3]
3819    [integer, 1] - [1, 3]
3820    [integer, 2] - [2, 3]
3821Branch determinisms for disjunction [3]
3822    Branch 1: try
3823    Branch 2: try
3824    Branch 3: trust
3825p / 0:
3826label(1):
3827	allocate                 2 
3828	put_global_variable2     a(1)     y(1)     a(2)     y(2) 
3829	callf                    p / 2     Y[1,2] 
3830	atom_switch              y(2) 
3831		a: 	ref(11)
3832		b: 	ref(12)
3833		default: 	ref(9)
3834
3835label(12):
3836	try                      0     0     ref(7) 
3837	trust_inline             0     ref(9)     Y[1,2] 
3838label(5):
3839	move                     y(2)     a(1) 
3840	in_get_atom              a(1)     a 
3841	move                     y(1)     a(1) 
3842	get_integer              a(1)     1 
3843	chain                    p1 / 0 
3844label(7):
3845	move                     y(1)     a(1) 
3846	get_integer              a(1)     2 
3847	move                     y(2)     a(1) 
3848	in_get_atom              a(1)     b 
3849	chain                    p2 / 0 
3850label(9):
3851	move                     2     y(1)     a(1) 
3852	get_matched_value        a(1)     a(2) 
3853	chain                    p3 / 0 
3854label(11):
3855	try                      0     0     ref(5) 
3856	trust_inline             0     ref(9)     Y[1,2] 
3857
3858------ Test idx(16) -------
3859p(A) :-
3860	(
3861	    var(B),
3862	    !,
3863	    p
3864	;
3865	    q
3866	).
3867
3868p / 1:
3869label(1):
3870	savecut                  a(1) 
3871	try_me_else              0     1     ref(3) 
3872label(2):
3873	put_variable             a(2) 
3874	bi_var                   a(2) 
3875	cut                      a(1) 
3876	jmp                      p / 0 
3877label(3):
3878	trust_me                 0 
3879label(4):
3880	jmp                      q / 0 
3881
3882------ Test idx(20) -------
3883p(A) :-
3884	(
3885	    A == [],
3886	    p
3887	;
3888	    A == [a],
3889	    q
3890	).
3891
3892INDEXES for (semidet) disjunction [2]
38931. Quality 0.7
3894    [] - []
3895    [list] - [2]
3896    [[]] - [1]
3897Branch determinisms for disjunction [2]
3898    Branch 1: det
3899    Branch 2: det
3900p / 1:
3901label(1):
3902	list_switch              a(1)     ref(5)     ref(7)     ref(fail) 
3903	branch                   ref(fail) 
3904label(3):
3905	in_get_nil               a(1) 
3906label(7):
3907	jmp                      p / 0 
3908label(5):
3909	put_list                 a(2) 
3910	write_atom               a 
3911	push_nil             
3912	get_matched_value        a(1)     a(2) 
3913	jmp                      q / 0 
3914
3915------ Test idx(21) -------
3916p(A) :-
3917	(
3918	    A == f(a),
3919	    r
3920	;
3921	    A == "hello",
3922	    s
3923	).
3924
3925INDEXES for (semidet) disjunction [2]
39261. Quality 0.7
3927    [] - []
3928    [structure] - []
3929    [structure, f / 1] - [1]
3930    [string] - [2]
3931Branch determinisms for disjunction [2]
3932    Branch 1: det
3933    Branch 2: det
3934p / 1:
3935label(1):
3936	switch_on_type           a(1) 
3937		meta: 	ref(fail)
3938		[]: 	ref(fail)
3939		atom: 	ref(fail)
3940		bignum: 	ref(fail)
3941		breal: 	ref(fail)
3942		double: 	ref(fail)
3943		goal: 	ref(fail)
3944		handle: 	ref(fail)
3945		integer: 	ref(fail)
3946		list: 	ref(fail)
3947		rational: 	ref(fail)
3948		string: 	ref(5)
3949		structure: 	ref(3)
3950
3951	branch                   ref(fail) 
3952label(3):
3953	put_structure            a(2)     f / 1 
3954	write_atom               a 
3955	get_matched_value        a(1)     a(2) 
3956	jmp                      r / 0 
3957label(5):
3958	in_get_string            a(1)     "hello" 
3959	jmp                      s / 0 
3960
3961------ Test idx(22) -------
3962p(A) :-
3963	(
3964	    A == [],
3965	    p
3966	;
3967	    (
3968		A == [a],
3969		q
3970	    ;
3971		A == f(a),
3972		r
3973	    )
3974	).
3975
3976INDEXES for (semidet) disjunction [2]
39771. Quality 0.8
3978    [] - []
3979    [list] - [2]
3980    [[]] - [1]
3981    [structure] - []
3982    [structure, f / 1] - [3]
3983Branch determinisms for disjunction [2]
3984    Branch 1: det
3985    Branch 2: det
3986    Branch 3: det
3987p / 1:
3988label(1):
3989	switch_on_type           a(1) 
3990		meta: 	ref(fail)
3991		[]: 	ref(9)
3992		atom: 	ref(fail)
3993		bignum: 	ref(fail)
3994		breal: 	ref(fail)
3995		double: 	ref(fail)
3996		goal: 	ref(fail)
3997		handle: 	ref(fail)
3998		integer: 	ref(fail)
3999		list: 	ref(5)
4000		rational: 	ref(fail)
4001		string: 	ref(fail)
4002		structure: 	ref(7)
4003
4004	branch                   ref(fail) 
4005label(3):
4006	in_get_nil               a(1) 
4007label(9):
4008	jmp                      p / 0 
4009label(5):
4010	put_list                 a(2) 
4011	write_atom               a 
4012	push_nil             
4013	get_matched_value        a(1)     a(2) 
4014	jmp                      q / 0 
4015label(7):
4016	put_structure            a(2)     f / 1 
4017	write_atom               a 
4018	get_matched_value        a(1)     a(2) 
4019	jmp                      r / 0 
4020
4021------ Test idx(23) -------
4022p :-
4023	(
4024	    A == [],
4025	    p
4026	;
4027	    q
4028	).
4029
4030p / 0:
4031label(1):
4032	try_me_else              0     0     ref(3) 
4033label(2):
4034	put_variable             a(1) 
4035	in_get_nil               a(1) 
4036	jmp                      ref(1) 
4037label(3):
4038	trust_me                 0 
4039label(4):
4040	jmp                      q / 0 
4041
4042------ Test idx(24) -------
4043p(A) :-
4044	(
4045	    A = f(B),
4046	    !,
4047	    p1
4048	;
4049	    (
4050		A = [C|D],
4051		!,
4052		p2
4053	    ;
4054		compound(A),
4055		p2
4056	    )
4057	).
4058
4059INDEXES for (semidet) disjunction [2]
40601. Quality 1.0
4061    [] - []
4062    [list] - [2]
4063    [structure] - [3]
4064    [structure, f / 1] - [1]
4065    [var] - [1]
4066Branch determinisms for disjunction [2]
4067    Branch 1: det
4068    Branch 2: det
4069    Branch 3: det
4070p / 1:
4071label(1):
4072	switch_on_type           a(1) 
4073		meta: 	ref(3)
4074		[]: 	ref(fail)
4075		atom: 	ref(fail)
4076		bignum: 	ref(fail)
4077		breal: 	ref(fail)
4078		double: 	ref(fail)
4079		goal: 	ref(fail)
4080		handle: 	ref(fail)
4081		integer: 	ref(fail)
4082		list: 	ref(6)
4083		rational: 	ref(fail)
4084		string: 	ref(fail)
4085		structure: 	ref(11)
4086
4087label(3):
4088	get_structure            a(1)     f / 1     ref(4) 
4089	write_void           
4090label(4):
4091	jmp                      p1 / 0 
4092label(6):
4093	get_list                 a(1)     ref(7) 
4094	write_void               2 
4095label(7):
4096	jmp                      p2 / 0 
4097label(9):
4098	bi_compound              a(1) 
4099	jmp                      p2 / 0 
4100label(11):
4101	functor_switch           a(1) 
4102		f / 1: 	ref(4)
4103		default: 	ref(9)
4104
4105
4106------ Test idx(25) -------
4107p(A) :-
4108	(
4109	    A = 1,
4110	    p_integer
4111	;
4112	    (
4113		A = 10000000000000000000,
4114		p_big
4115	    ;
4116		(
4117		    A = 1.1,
4118		    p_float
4119		;
4120		    (
4121			A = 5_2,
4122			p_rational
4123		    ;
4124			(
4125			    A = 0.9__1.1,
4126			    p_breal
4127			;
4128			    (
4129				A = "hello",
4130				p_string
4131			    ;
4132				(
4133				    A = hello,
4134				    p_atom
4135				;
4136				    (
4137					A = [],
4138					p_nil
4139				    ;
4140					(
4141					    A = [B|C],
4142					    p_list
4143					;
4144					    A = foo(bar),
4145					    p_struct
4146					)
4147				    )
4148				)
4149			    )
4150			)
4151		    )
4152		)
4153	    )
4154	).
4155
4156INDEXES for (nondet) disjunction [2]
41571. Quality 1.8
4158    [] - []
4159    [list] - [9]
4160    [[]] - [8]
4161    [structure] - []
4162    [structure, foo / 1] - [10]
4163    [atom] - []
4164    [atom, hello] - [7]
4165    [var] - [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4166    [breal] - [5]
4167    [rational] - [4]
4168    [bignum] - [2]
4169    [integer] - []
4170    [integer, 1] - [1]
4171    [string] - [6]
4172    [double] - [3]
4173Branch determinisms for disjunction [2]
4174    Branch 1: try
4175    Branch 2: retry
4176    Branch 3: retry
4177    Branch 4: retry
4178    Branch 5: retry
4179    Branch 6: retry
4180    Branch 7: retry
4181    Branch 8: retry
4182    Branch 9: retry
4183    Branch 10: trust
4184p / 1:
4185label(1):
4186	switch_on_type           a(1) 
4187		meta: 	ref(2)
4188		[]: 	ref(26)
4189		atom: 	ref(15)
4190		bignum: 	ref(5)
4191		breal: 	ref(11)
4192		double: 	ref(7)
4193		goal: 	ref(fail)
4194		handle: 	ref(fail)
4195		integer: 	ref(3)
4196		list: 	ref(19)
4197		rational: 	ref(9)
4198		string: 	ref(13)
4199		structure: 	ref(22)
4200
4201label(2):
4202	try_me_else              0     1     ref(4) 
4203label(3):
4204	get_integer              a(1)     1 
4205	jmp                      p_integer / 0 
4206label(4):
4207	retry_me_else            0     ref(6) 
4208label(5):
4209	get_constant             a(1)     10000000000000000000 
4210	jmp                      p_big / 0 
4211label(6):
4212	retry_me_else            0     ref(8) 
4213label(7):
4214	get_constant             a(1)     1.1 
4215	jmp                      p_float / 0 
4216label(8):
4217	retry_me_else            0     ref(10) 
4218label(9):
4219	get_constant             a(1)     5_2 
4220	jmp                      p_rational / 0 
4221label(10):
4222	retry_me_else            0     ref(12) 
4223label(11):
4224	get_constant             a(1)     0.9__1.1 
4225	jmp                      p_breal / 0 
4226label(12):
4227	retry_me_else            0     ref(14) 
4228label(13):
4229	get_string               a(1)     "hello" 
4230	jmp                      p_string / 0 
4231label(14):
4232	retry_me_else            0     ref(16) 
4233label(15):
4234	get_atom                 a(1)     hello 
4235	jmp                      p_atom / 0 
4236label(16):
4237	retry_me_else            0     ref(18) 
4238label(17):
4239	get_nil                  a(1) 
4240label(26):
4241	jmp                      p_nil / 0 
4242label(18):
4243	retry_me_else            0     ref(21) 
4244label(19):
4245	get_list                 a(1)     ref(20) 
4246	write_void               2 
4247label(20):
4248	jmp                      p_list / 0 
4249label(21):
4250	trust_me                 0 
4251label(22):
4252	get_structure            a(1)     foo / 1     ref(23) 
4253	write_atom               bar 
4254	jmp                      p_struct / 0 
4255label(23):
4256	read_atom                bar 
4257	jmp                      p_struct / 0 
4258
4259------ Test idx(26) -------
4260p(A) :-
4261	(
4262	    var(A),
4263	    p_var
4264	;
4265	    (
4266		integer(A),
4267		p_integer
4268	    ;
4269		(
4270		    float(A),
4271		    p_float
4272		;
4273		    (
4274			rational(A),
4275			p_rational
4276		    ;
4277			(
4278			    breal(A),
4279			    p_breal
4280			;
4281			    (
4282				string(A),
4283				p_string
4284			    ;
4285				(
4286				    nonvar(A),
4287				    A = [],
4288				    !,
4289				    p_nil
4290				;
4291				    (
4292					atom(A),
4293					p_atom
4294				    ;
4295					(
4296					    nonvar(A),
4297					    A = [B|C],
4298					    !,
4299					    p_list
4300					;
4301					    (
4302						compound(A),
4303						p_struct
4304					    ;
4305						is_handle(A),
4306						p_handle
4307					    )
4308					)
4309				    )
4310				)
4311			    )
4312			)
4313		    )
4314		)
4315	    )
4316	).
4317
4318INDEXES for (semidet) disjunction [2]
43191. Quality 1.0
4320    [] - []
4321    [handle] - [11]
4322    [list] - [9]
4323    [[]] - [7]
4324    [structure] - [10]
4325    [atom] - [8]
4326    [var] - [1]
4327    [breal] - [5]
4328    [rational] - [4]
4329    [integer] - [2]
4330    [bignum] - [2]
4331    [string] - [6]
4332    [double] - [3]
4333Branch determinisms for disjunction [2]
4334    Branch 1: det
4335    Branch 2: det
4336    Branch 3: det
4337    Branch 4: det
4338    Branch 5: det
4339    Branch 6: det
4340    Branch 7: det
4341    Branch 8: det
4342    Branch 9: det
4343    Branch 10: det
4344    Branch 11: det
4345p / 1:
4346label(1):
4347	switch_on_type           a(1) 
4348		meta: 	ref(26)
4349		[]: 	ref(27)
4350		atom: 	ref(28)
4351		bignum: 	ref(29)
4352		breal: 	ref(30)
4353		double: 	ref(31)
4354		goal: 	ref(fail)
4355		handle: 	ref(32)
4356		integer: 	ref(29)
4357		list: 	ref(33)
4358		rational: 	ref(34)
4359		string: 	ref(35)
4360		structure: 	ref(36)
4361
4362	branch                   ref(26) 
4363label(3):
4364	bi_var                   a(1) 
4365label(26):
4366	jmp                      p_var / 0 
4367label(5):
4368	bi_integer               a(1) 
4369label(29):
4370	jmp                      p_integer / 0 
4371label(7):
4372	bi_float                 a(1) 
4373label(31):
4374	jmp                      p_float / 0 
4375label(9):
4376	bi_rational              a(1) 
4377label(34):
4378	jmp                      p_rational / 0 
4379label(11):
4380	bi_breal                 a(1) 
4381label(30):
4382	jmp                      p_breal / 0 
4383label(13):
4384	bi_string                a(1) 
4385label(35):
4386	jmp                      p_string / 0 
4387label(15):
4388	bi_nonvar                a(1) 
4389label(27):
4390	get_nil                  a(1) 
4391	jmp                      p_nil / 0 
4392label(17):
4393	bi_atom                  a(1) 
4394label(28):
4395	jmp                      p_atom / 0 
4396label(19):
4397	bi_nonvar                a(1) 
4398label(33):
4399	get_list                 a(1)     ref(20) 
4400	write_void               2 
4401label(20):
4402	jmp                      p_list / 0 
4403label(22):
4404	bi_compound              a(1) 
4405label(36):
4406	jmp                      p_struct / 0 
4407label(24):
4408	bi_is_handle             a(1) 
4409label(32):
4410	jmp                      p_handle / 0 
4411
4412------ Test idx(27) -------
4413p(A) :-
4414	(
4415	    atom(A),
4416	    p_string
4417	;
4418	    A = hello,
4419	    p_hello
4420	).
4421
4422INDEXES for (nondet) disjunction [2]
44231. Quality 1.3
4424    [] - []
4425    [[]] - [1]
4426    [var] - [2]
4427    [atom] - [1]
4428    [atom, hello] - [1, 2]
4429Branch determinisms for disjunction [2]
4430    Branch 1: try
4431    Branch 2: trust
4432p / 1:
4433label(1):
4434	switch_on_type           a(1) 
4435		meta: 	ref(5)
4436		[]: 	ref(8)
4437		atom: 	ref(7)
4438		bignum: 	ref(fail)
4439		breal: 	ref(fail)
4440		double: 	ref(fail)
4441		goal: 	ref(fail)
4442		handle: 	ref(fail)
4443		integer: 	ref(fail)
4444		list: 	ref(fail)
4445		rational: 	ref(fail)
4446		string: 	ref(fail)
4447		structure: 	ref(fail)
4448
4449	branch                   ref(5) 
4450label(2):
4451	try_me_else              0     1     ref(4) 
4452label(3):
4453	bi_atom                  a(1) 
4454label(8):
4455	jmp                      p_string / 0 
4456label(4):
4457	trust_me                 0 
4458label(5):
4459	get_atom                 a(1)     hello 
4460	jmp                      p_hello / 0 
4461label(7):
4462	atom_switch              a(1) 
4463		hello: 	ref(2)
4464		default: 	ref(3)
4465
4466
4467------ Test idx(28) -------
4468p(A) :-
4469	(
4470	    A = "abc",
4471	    p1
4472	;
4473	    (
4474		A = "def",
4475		p2
4476	    ;
4477		A = ghi,
4478		p3
4479	    )
4480	).
4481
4482INDEXES for (nondet) disjunction [2]
44831. Quality 2.0
4484    [] - []
4485    [atom] - []
4486    [atom, ghi] - [3]
4487    [var] - [1, 2, 3]
4488    [string] - [1, 2]
4489Branch determinisms for disjunction [2]
4490    Branch 1: try
4491    Branch 2: retry
4492    Branch 3: trust
4493p / 1:
4494label(1):
4495	switch_on_type           a(1) 
4496		meta: 	ref(2)
4497		[]: 	ref(fail)
4498		atom: 	ref(7)
4499		bignum: 	ref(fail)
4500		breal: 	ref(fail)
4501		double: 	ref(fail)
4502		goal: 	ref(fail)
4503		handle: 	ref(fail)
4504		integer: 	ref(fail)
4505		list: 	ref(fail)
4506		rational: 	ref(fail)
4507		string: 	ref(9)
4508		structure: 	ref(fail)
4509
4510label(2):
4511	try_me_else              0     1     ref(4) 
4512label(3):
4513	get_string               a(1)     "abc" 
4514	jmp                      p1 / 0 
4515label(4):
4516	retry_me_else            0     ref(6) 
4517label(5):
4518	get_string               a(1)     "def" 
4519	jmp                      p2 / 0 
4520label(6):
4521	trust_me                 0 
4522label(7):
4523	get_atom                 a(1)     ghi 
4524	jmp                      p3 / 0 
4525label(9):
4526	try                      0     1     ref(3) 
4527	trust                    0     ref(5) 
4528
4529------ Test idx(29) -------
4530p(A) :-
4531	A = 1,
4532	p,
4533	q(A).
4534p(A) :-
4535	A = 2,
4536	q,
4537	r(A).
4538
4539INDEXES for (nondet) disjunction [2]
45401. Quality 1.3
4541    [] - []
4542    [var] - [1, 2]
4543    [integer] - []
4544    [integer, 1] - [1]
4545    [integer, 2] - [2]
4546Branch determinisms for disjunction [2]
4547    Branch 1: try
4548    Branch 2: trust
4549p / 1:
4550label(1):
4551	integer_switch           a(1) 
4552		1: 	ref(7)
4553		2: 	ref(8)
4554		default: 	ref(fail)
4555
4556label(2):
4557	try_me_else              0     1     ref(4) 
4558label(3):
4559	get_integer              a(1)     1 
4560label(7):
4561	get_variable             1     a(1)     y(1) 
4562	callf                    p / 0     Y[1] 
4563	move_chain               y(1)     a(1)     q / 1 
4564label(4):
4565	trust_me                 0 
4566label(5):
4567	get_integer              a(1)     2 
4568label(8):
4569	get_variable             1     a(1)     y(1) 
4570	callf                    q / 0     Y[1] 
4571	move_chain               y(1)     a(1)     r / 1 
4572
4573------ Test idx(30) -------
4574p(A) :-
4575	(
4576	    A = 1,
4577	    !,
4578	    p1
4579	;
4580	    (
4581		A = 2,
4582		!,
4583		p2
4584	    ;
4585		p4
4586	    )
4587	).
4588
4589INDEXES for (semidet) disjunction [2]
45901. Quality 1.0
4591    [] - [3]
4592    [var] - [1]
4593    [integer] - [3]
4594    [integer, 1] - [1]
4595    [integer, 2] - [2]
4596Branch determinisms for disjunction [2]
4597    Branch 1: det
4598    Branch 2: det
4599    Branch 3: det
4600p / 1:
4601label(1):
4602	integer_switch           a(1) 
4603		1: 	ref(9)
4604		2: 	ref(10)
4605		default: 	ref(7)
4606
4607label(3):
4608	get_integer              a(1)     1 
4609label(9):
4610	jmp                      p1 / 0 
4611label(5):
4612	get_integer              a(1)     2 
4613label(10):
4614	jmp                      p2 / 0 
4615label(7):
4616	jmp                      p4 / 0 
4617
4618------ Test idx(31) -------
4619p(A) :-
4620	(
4621	    A = 1,
4622	    !,
4623	    p1
4624	;
4625	    (
4626		A = 2,
4627		!,
4628		p2
4629	    ;
4630		integer(A),
4631		p4
4632	    )
4633	).
4634
4635INDEXES for (semidet) disjunction [2]
46361. Quality 1.0
4637    [] - []
4638    [var] - [1]
4639    [bignum] - [3]
4640    [integer] - [3]
4641    [integer, 1] - [1]
4642    [integer, 2] - [2]
4643Branch determinisms for disjunction [2]
4644    Branch 1: det
4645    Branch 2: det
4646    Branch 3: det
4647p / 1:
4648label(1):
4649	switch_on_type           a(1) 
4650		meta: 	ref(3)
4651		[]: 	ref(fail)
4652		atom: 	ref(fail)
4653		bignum: 	ref(10)
4654		breal: 	ref(fail)
4655		double: 	ref(fail)
4656		goal: 	ref(fail)
4657		handle: 	ref(fail)
4658		integer: 	ref(9)
4659		list: 	ref(fail)
4660		rational: 	ref(fail)
4661		string: 	ref(fail)
4662		structure: 	ref(fail)
4663
4664label(3):
4665	get_integer              a(1)     1 
4666label(11):
4667	jmp                      p1 / 0 
4668label(5):
4669	get_integer              a(1)     2 
4670label(12):
4671	jmp                      p2 / 0 
4672label(7):
4673	bi_integer               a(1) 
4674label(10):
4675	jmp                      p4 / 0 
4676label(9):
4677	integer_switch           a(1) 
4678		1: 	ref(11)
4679		2: 	ref(12)
4680		default: 	ref(7)
4681
4682
4683------ Test idx(32) -------
4684p(A) :-
4685	(
4686	    A = f(B),
4687	    !,
4688	    p1
4689	;
4690	    (
4691		A = g(C),
4692		!,
4693		p2
4694	    ;
4695		(
4696		    A = [D|E],
4697		    !,
4698		    p3
4699		;
4700		    compound(A),
4701		    p4
4702		)
4703	    )
4704	).
4705
4706INDEXES for (semidet) disjunction [2]
47071. Quality 1.0
4708    [] - []
4709    [list] - [3]
4710    [structure] - [4]
4711    [structure, f / 1] - [1]
4712    [structure, g / 1] - [2]
4713    [var] - [1]
4714Branch determinisms for disjunction [2]
4715    Branch 1: det
4716    Branch 2: det
4717    Branch 3: det
4718    Branch 4: det
4719p / 1:
4720label(1):
4721	switch_on_type           a(1) 
4722		meta: 	ref(3)
4723		[]: 	ref(fail)
4724		atom: 	ref(fail)
4725		bignum: 	ref(fail)
4726		breal: 	ref(fail)
4727		double: 	ref(fail)
4728		goal: 	ref(fail)
4729		handle: 	ref(fail)
4730		integer: 	ref(fail)
4731		list: 	ref(9)
4732		rational: 	ref(fail)
4733		string: 	ref(fail)
4734		structure: 	ref(14)
4735
4736label(3):
4737	get_structure            a(1)     f / 1     ref(4) 
4738	write_void           
4739label(4):
4740	jmp                      p1 / 0 
4741label(7):
4742	jmp                      p2 / 0 
4743label(9):
4744	get_list                 a(1)     ref(10) 
4745	write_void               2 
4746label(10):
4747	jmp                      p3 / 0 
4748label(12):
4749	bi_compound              a(1) 
4750	jmp                      p4 / 0 
4751label(14):
4752	functor_switch           a(1) 
4753		f / 1: 	ref(4)
4754		g / 1: 	ref(7)
4755		default: 	ref(12)
4756
4757
4758------ Test idx(33) -------
4759p(f(A, B, C)) :-
4760	!,
4761	p1(A, B, C).
4762p([A|B]) :-
4763	!,
4764	p2(A, B).
4765p(A) :-
4766	compound(A),
4767	p3.
4768
4769INDEXES for (semidet) disjunction [2]
47701. Quality 1.0
4771    [] - []
4772    [list] - [2]
4773    [structure] - [3]
4774    [structure, f / 3] - [1]
4775    [var] - [1]
4776Branch determinisms for disjunction [2]
4777    Branch 1: det
4778    Branch 2: det
4779    Branch 3: det
4780p / 1:
4781label(1):
4782	switch_on_type           a(1) 
4783		meta: 	ref(3)
4784		[]: 	ref(fail)
4785		atom: 	ref(fail)
4786		bignum: 	ref(fail)
4787		breal: 	ref(fail)
4788		double: 	ref(fail)
4789		goal: 	ref(fail)
4790		handle: 	ref(fail)
4791		integer: 	ref(fail)
4792		list: 	ref(7)
4793		rational: 	ref(fail)
4794		string: 	ref(fail)
4795		structure: 	ref(13)
4796
4797label(3):
4798	get_structure            a(1)     f / 3     ref(4) 
4799	write_variable2          a(1)     a(2) 
4800	write_variable           a(3) 
4801	jmp                      p1 / 3 
4802label(4):
4803	read_variable2           a(1)     a(2) 
4804	read_variable            a(3) 
4805	jmp                      p1 / 3 
4806label(7):
4807	get_list                 a(1)     ref(8) 
4808	write_variable2          a(1)     a(2) 
4809	jmp                      p2 / 2 
4810label(8):
4811	read_variable2           a(1)     a(2) 
4812	jmp                      p2 / 2 
4813label(11):
4814	bi_compound              a(1) 
4815	jmp                      p3 / 0 
4816label(13):
4817	functor_switch           a(1) 
4818		f / 3: 	ref(4)
4819		default: 	ref(11)
4820
4821
4822------ Test idx(34) -------
4823p(f(A, B, A), C) :-
4824	!,
4825	p1(A, B, C).
4826p([A|B], B) :-
4827	!,
4828	p2(A, B).
4829p(A, B) :-
4830	compound(A),
4831	p3.
4832
4833INDEXES for (nondet) disjunction [2]
48341. Quality 1.5
4835    [] - []
4836    [list] - [2, 3]
4837    [structure] - [3]
4838    [structure, f / 3] - [1, 3]
4839    [var] - [1]
4840Branch determinisms for disjunction [2]
4841    Branch 1: try
4842    Branch 2: try
4843    Branch 3: trust
4844p / 2:
4845label(1):
4846	savecut                  a(3) 
4847	switch_on_type           a(1) 
4848		meta: 	ref(3)
4849		[]: 	ref(fail)
4850		atom: 	ref(fail)
4851		bignum: 	ref(fail)
4852		breal: 	ref(fail)
4853		double: 	ref(fail)
4854		goal: 	ref(fail)
4855		handle: 	ref(fail)
4856		integer: 	ref(fail)
4857		list: 	ref(13)
4858		rational: 	ref(fail)
4859		string: 	ref(fail)
4860		structure: 	ref(15)
4861
4862label(3):
4863	get_structure            a(1)     f / 3     ref(4) 
4864	write_variable           a(1) 
4865	shift                    a(4)     a(3)     a(2) 
4866	write_variable           a(2) 
4867	write_value              a(1) 
4868	cut                      a(4) 
4869	jmp                      p1 / 3 
4870label(4):
4871	read_variable            a(1) 
4872	shift                    a(4)     a(3)     a(2) 
4873	read_variable            a(2) 
4874	read_value               a(1) 
4875	cut                      a(4) 
4876	jmp                      p1 / 3 
4877label(7):
4878	get_list                 a(1)     ref(8) 
4879	write_variable           a(1) 
4880	write_value              a(2) 
4881	cut                      a(3) 
4882	jmp                      p2 / 2 
4883label(8):
4884	read_variable            a(1) 
4885	read_value               a(2) 
4886	cut                      a(3) 
4887	jmp                      p2 / 2 
4888label(11):
4889	bi_compound              a(1) 
4890	jmp                      p3 / 0 
4891label(13):
4892	try                      0     3     ref(7) 
4893	trust                    0     ref(11) 
4894label(14):
4895	try                      0     3     ref(3) 
4896	trust                    0     ref(11) 
4897label(15):
4898	functor_switch           a(1) 
4899		f / 3: 	ref(14)
4900		default: 	ref(11)
4901
4902
4903------ Test idx(35) -------
4904p(f(A, B, C)) :-
4905	-?->
4906	!,
4907	p1(A, B, C).
4908p([A|B]) :-
4909	-?->
4910	!,
4911	p2(A, B).
4912p(A) :-
4913	compound(A),
4914	p3.
4915
4916INDEXES for (semidet) disjunction [2]
49171. Quality 0.8
4918    [] - []
4919    [list] - [2]
4920    [structure] - [3]
4921    [structure, f / 3] - [1]
4922Branch determinisms for disjunction [2]
4923    Branch 1: det
4924    Branch 2: det
4925    Branch 3: det
4926p / 1:
4927label(1):
4928	switch_on_type           a(1) 
4929		meta: 	ref(fail)
4930		[]: 	ref(fail)
4931		atom: 	ref(fail)
4932		bignum: 	ref(fail)
4933		breal: 	ref(fail)
4934		double: 	ref(fail)
4935		goal: 	ref(fail)
4936		handle: 	ref(fail)
4937		integer: 	ref(fail)
4938		list: 	ref(6)
4939		rational: 	ref(fail)
4940		string: 	ref(fail)
4941		structure: 	ref(11)
4942
4943	branch                   ref(fail) 
4944label(4):
4945	read_variable2           a(1)     a(2) 
4946	read_variable            a(3) 
4947	jmp                      p1 / 3 
4948label(6):
4949	in_get_list              a(1)     ref(7) 
4950label(7):
4951	read_variable2           a(1)     a(2) 
4952	jmp                      p2 / 2 
4953label(9):
4954	bi_compound              a(1) 
4955	jmp                      p3 / 0 
4956label(11):
4957	functor_switch           a(1) 
4958		f / 3: 	ref(4)
4959		default: 	ref(9)
4960
4961
4962------ Test idx(36) -------
4963p(f(A, B, C), C) :-
4964	-?->
4965	!,
4966	p1(A, B, C).
4967p([A|B], B) :-
4968	-?->
4969	!,
4970	p2(A, B).
4971p(A, B) :-
4972	compound(A),
4973	p3.
4974
4975INDEXES for (nondet) disjunction [2]
49761. Quality 1.2
4977    [] - []
4978    [list] - [2, 3]
4979    [structure] - [3]
4980    [structure, f / 3] - [1, 3]
4981Branch determinisms for disjunction [2]
4982    Branch 1: try
4983    Branch 2: try
4984    Branch 3: trust
4985p / 2:
4986label(1):
4987	savecut                  a(3) 
4988	switch_on_type           a(1) 
4989		meta: 	ref(fail)
4990		[]: 	ref(fail)
4991		atom: 	ref(fail)
4992		bignum: 	ref(fail)
4993		breal: 	ref(fail)
4994		double: 	ref(fail)
4995		goal: 	ref(fail)
4996		handle: 	ref(fail)
4997		integer: 	ref(fail)
4998		list: 	ref(11)
4999		rational: 	ref(fail)
5000		string: 	ref(fail)
5001		structure: 	ref(13)
5002
5003	branch                   ref(fail) 
5004label(3):
5005	in_get_structure         a(1)     f / 3     ref(4) 
5006label(4):
5007	read_variable            a(1) 
5008	shift                    a(4)     a(3)     a(2) 
5009	read_variable            a(2) 
5010	read_matched_value       a(3) 
5011	cut                      a(4) 
5012	jmp                      p1 / 3 
5013label(6):
5014	in_get_list              a(1)     ref(7) 
5015label(7):
5016	read_variable            a(1) 
5017	read_matched_value       a(2) 
5018	cut                      a(3) 
5019	jmp                      p2 / 2 
5020label(9):
5021	bi_compound              a(1) 
5022	jmp                      p3 / 0 
5023label(11):
5024	try                      0     3     ref(6) 
5025	trust                    0     ref(9) 
5026label(12):
5027	try                      0     3     ref(3) 
5028	trust                    0     ref(9) 
5029label(13):
5030	functor_switch           a(1) 
5031		f / 3: 	ref(12)
5032		default: 	ref(9)
5033
5034
5035------ Test idx(40) -------
5036p(A) :-
5037	(
5038	    free(A),
5039	    p1
5040	;
5041	    (
5042		meta(A),
5043		p2
5044	    ;
5045		p3
5046	    )
5047	).
5048
5049INDEXES for (nondet) disjunction [2]
50501. Quality 1.7
5051    [] - [3]
5052    [var] - [3]
5053    [var, free] - [1, 3]
5054    [var, meta] - [2, 3]
5055Branch determinisms for disjunction [2]
5056    Branch 1: try
5057    Branch 2: try
5058    Branch 3: trust
5059p / 1:
5060label(1):
5061	switch_on_type           a(1) 
5062		meta: 	ref(10)
5063		[]: 	ref(7)
5064		atom: 	ref(7)
5065		bignum: 	ref(7)
5066		breal: 	ref(7)
5067		double: 	ref(7)
5068		goal: 	ref(7)
5069		handle: 	ref(7)
5070		integer: 	ref(7)
5071		list: 	ref(7)
5072		rational: 	ref(7)
5073		string: 	ref(7)
5074		structure: 	ref(7)
5075
5076label(9):
5077	try                      0     1     ref(3) 
5078	trust                    0     ref(7) 
5079label(3):
5080	bi_free                  a(1) 
5081	jmp                      p1 / 0 
5082label(5):
5083	bi_meta                  a(1) 
5084	jmp                      p2 / 0 
5085label(7):
5086	jmp                      p3 / 0 
5087label(10):
5088	try                      0     1     ref(5) 
5089	trust                    0     ref(7) 
5090
5091------ Test idx(41) -------
5092p(A) :-
5093	(
5094	    free(A),
5095	    !,
5096	    p1
5097	;
5098	    (
5099		meta(A),
5100		!,
5101		p2
5102	    ;
5103		p3
5104	    )
5105	).
5106
5107INDEXES for (semidet) disjunction [2]
51081. Quality 1.0
5109    [] - [3]
5110    [var] - [3]
5111    [var, free] - [1]
5112    [var, meta] - [2]
5113Branch determinisms for disjunction [2]
5114    Branch 1: det
5115    Branch 2: det
5116    Branch 3: det
5117p / 1:
5118label(1):
5119	switch_on_type           a(1) 
5120		meta: 	ref(10)
5121		[]: 	ref(7)
5122		atom: 	ref(7)
5123		bignum: 	ref(7)
5124		breal: 	ref(7)
5125		double: 	ref(7)
5126		goal: 	ref(7)
5127		handle: 	ref(7)
5128		integer: 	ref(7)
5129		list: 	ref(7)
5130		rational: 	ref(7)
5131		string: 	ref(7)
5132		structure: 	ref(7)
5133
5134	branch                   ref(9) 
5135label(3):
5136	bi_free                  a(1) 
5137label(9):
5138	jmp                      p1 / 0 
5139label(5):
5140	bi_meta                  a(1) 
5141label(10):
5142	jmp                      p2 / 0 
5143label(7):
5144	jmp                      p3 / 0 
5145
5146------ Test idx(42) -------
5147p(A) :-
5148	(
5149	    free(A),
5150	    p1
5151	;
5152	    (
5153		meta(A),
5154		p2
5155	    ;
5156		atom(A),
5157		p3
5158	    )
5159	).
5160
5161INDEXES for (semidet) disjunction [2]
51621. Quality 1.0
5163    [] - []
5164    [[]] - [3]
5165    [atom] - [3]
5166    [var] - []
5167    [var, free] - [1]
5168    [var, meta] - [2]
5169Branch determinisms for disjunction [2]
5170    Branch 1: det
5171    Branch 2: det
5172    Branch 3: det
5173p / 1:
5174label(1):
5175	switch_on_type           a(1) 
5176		meta: 	ref(10)
5177		[]: 	ref(11)
5178		atom: 	ref(11)
5179		bignum: 	ref(fail)
5180		breal: 	ref(fail)
5181		double: 	ref(fail)
5182		goal: 	ref(fail)
5183		handle: 	ref(fail)
5184		integer: 	ref(fail)
5185		list: 	ref(fail)
5186		rational: 	ref(fail)
5187		string: 	ref(fail)
5188		structure: 	ref(fail)
5189
5190	branch                   ref(9) 
5191label(3):
5192	bi_free                  a(1) 
5193label(9):
5194	jmp                      p1 / 0 
5195label(5):
5196	bi_meta                  a(1) 
5197label(10):
5198	jmp                      p2 / 0 
5199label(7):
5200	bi_atom                  a(1) 
5201label(11):
5202	jmp                      p3 / 0 
5203
5204------ Test idx(43) -------
5205p(A) :-
5206	(
5207	    free(A),
5208	    p1
5209	;
5210	    p2
5211	).
5212
5213INDEXES for (nondet) disjunction [2]
52141. Quality 1.5
5215    [] - [2]
5216    [var] - [2]
5217    [var, free] - [1, 2]
5218Branch determinisms for disjunction [2]
5219    Branch 1: try
5220    Branch 2: trust
5221p / 1:
5222label(1):
5223	switch_on_type           a(1) 
5224		meta: 	ref(5)
5225		[]: 	ref(5)
5226		atom: 	ref(5)
5227		bignum: 	ref(5)
5228		breal: 	ref(5)
5229		double: 	ref(5)
5230		goal: 	ref(5)
5231		handle: 	ref(5)
5232		integer: 	ref(5)
5233		list: 	ref(5)
5234		rational: 	ref(5)
5235		string: 	ref(5)
5236		structure: 	ref(5)
5237
5238label(2):
5239	try_me_else              0     1     ref(4) 
5240label(3):
5241	bi_free                  a(1) 
5242	jmp                      p1 / 0 
5243label(4):
5244	trust_me                 0 
5245label(5):
5246	jmp                      p2 / 0 
5247
5248------ Test idx(44) -------
5249p(A) :-
5250	(
5251	    free(A),
5252	    !,
5253	    p1
5254	;
5255	    p2
5256	).
5257
5258INDEXES for (semidet) disjunction [2]
52591. Quality 1.0
5260    [] - [2]
5261    [var] - [2]
5262    [var, free] - [1]
5263Branch determinisms for disjunction [2]
5264    Branch 1: det
5265    Branch 2: det
5266p / 1:
5267label(1):
5268	switch_on_type           a(1) 
5269		meta: 	ref(5)
5270		[]: 	ref(5)
5271		atom: 	ref(5)
5272		bignum: 	ref(5)
5273		breal: 	ref(5)
5274		double: 	ref(5)
5275		goal: 	ref(5)
5276		handle: 	ref(5)
5277		integer: 	ref(5)
5278		list: 	ref(5)
5279		rational: 	ref(5)
5280		string: 	ref(5)
5281		structure: 	ref(5)
5282
5283	branch                   ref(7) 
5284label(3):
5285	bi_free                  a(1) 
5286label(7):
5287	jmp                      p1 / 0 
5288label(5):
5289	jmp                      p2 / 0 
5290
5291------ Test idx(45) -------
5292p(A) :-
5293	(
5294	    free(A),
5295	    p1
5296	;
5297	    p2
5298	).
5299
5300INDEXES for (nondet) disjunction [2]
53011. Quality 1.5
5302    [] - [2]
5303    [var] - [2]
5304    [var, free] - [1, 2]
5305Branch determinisms for disjunction [2]
5306    Branch 1: try
5307    Branch 2: trust
5308p / 1:
5309label(1):
5310	switch_on_type           a(1) 
5311		meta: 	ref(5)
5312		[]: 	ref(5)
5313		atom: 	ref(5)
5314		bignum: 	ref(5)
5315		breal: 	ref(5)
5316		double: 	ref(5)
5317		goal: 	ref(5)
5318		handle: 	ref(5)
5319		integer: 	ref(5)
5320		list: 	ref(5)
5321		rational: 	ref(5)
5322		string: 	ref(5)
5323		structure: 	ref(5)
5324
5325label(2):
5326	try_me_else              0     1     ref(4) 
5327label(3):
5328	bi_free                  a(1) 
5329	jmp                      p1 / 0 
5330label(4):
5331	trust_me                 0 
5332label(5):
5333	jmp                      p2 / 0 
5334
5335------ Test idx(46) -------
5336p(A) :-
5337	(
5338	    meta(A),
5339	    p1
5340	;
5341	    p2
5342	).
5343
5344INDEXES for (nondet) disjunction [2]
53451. Quality 1.5
5346    [] - [2]
5347    [var] - [2]
5348    [var, meta] - [1, 2]
5349Branch determinisms for disjunction [2]
5350    Branch 1: try
5351    Branch 2: trust
5352p / 1:
5353label(1):
5354	switch_on_type           a(1) 
5355		meta: 	ref(2)
5356		[]: 	ref(5)
5357		atom: 	ref(5)
5358		bignum: 	ref(5)
5359		breal: 	ref(5)
5360		double: 	ref(5)
5361		goal: 	ref(5)
5362		handle: 	ref(5)
5363		integer: 	ref(5)
5364		list: 	ref(5)
5365		rational: 	ref(5)
5366		string: 	ref(5)
5367		structure: 	ref(5)
5368
5369	branch                   ref(5) 
5370label(2):
5371	try_me_else              0     1     ref(4) 
5372label(3):
5373	bi_meta                  a(1) 
5374	jmp                      p1 / 0 
5375label(4):
5376	trust_me                 0 
5377label(5):
5378	jmp                      p2 / 0 
5379
5380------ Test idx(47) -------
5381p(A) :-
5382	(
5383	    meta(A),
5384	    !,
5385	    p1
5386	;
5387	    p2
5388	).
5389
5390INDEXES for (semidet) disjunction [2]
53911. Quality 1.0
5392    [] - [2]
5393    [var] - [2]
5394    [var, meta] - [1]
5395Branch determinisms for disjunction [2]
5396    Branch 1: det
5397    Branch 2: det
5398p / 1:
5399label(1):
5400	switch_on_type           a(1) 
5401		meta: 	ref(7)
5402		[]: 	ref(5)
5403		atom: 	ref(5)
5404		bignum: 	ref(5)
5405		breal: 	ref(5)
5406		double: 	ref(5)
5407		goal: 	ref(5)
5408		handle: 	ref(5)
5409		integer: 	ref(5)
5410		list: 	ref(5)
5411		rational: 	ref(5)
5412		string: 	ref(5)
5413		structure: 	ref(5)
5414
5415label(5):
5416	jmp                      p2 / 0 
5417label(3):
5418	bi_meta                  a(1) 
5419label(7):
5420	jmp                      p1 / 0 
5421
5422------ Test idx(48) -------
5423p(A) :-
5424	(
5425	    meta(A),
5426	    p1
5427	;
5428	    p2
5429	).
5430
5431INDEXES for (nondet) disjunction [2]
54321. Quality 1.5
5433    [] - [2]
5434    [var] - [2]
5435    [var, meta] - [1, 2]
5436Branch determinisms for disjunction [2]
5437    Branch 1: try
5438    Branch 2: trust
5439p / 1:
5440label(1):
5441	switch_on_type           a(1) 
5442		meta: 	ref(2)
5443		[]: 	ref(5)
5444		atom: 	ref(5)
5445		bignum: 	ref(5)
5446		breal: 	ref(5)
5447		double: 	ref(5)
5448		goal: 	ref(5)
5449		handle: 	ref(5)
5450		integer: 	ref(5)
5451		list: 	ref(5)
5452		rational: 	ref(5)
5453		string: 	ref(5)
5454		structure: 	ref(5)
5455
5456	branch                   ref(5) 
5457label(2):
5458	try_me_else              0     1     ref(4) 
5459label(3):
5460	bi_meta                  a(1) 
5461	jmp                      p1 / 0 
5462label(4):
5463	trust_me                 0 
5464label(5):
5465	jmp                      p2 / 0 
5466
5467------ Test idx(49) -------
5468p(A) :-
5469	(
5470	    free(A),
5471	    p1
5472	;
5473	    (
5474		var(A),
5475		p2
5476	    ;
5477		p3
5478	    )
5479	).
5480
5481INDEXES for (nondet) disjunction [2]
54821. Quality 2.0
5483    [] - [3]
5484    [var] - [2, 3]
5485    [var, free] - [1, 2, 3]
5486Branch determinisms for disjunction [2]
5487    Branch 1: try
5488    Branch 2: retry
5489    Branch 3: trust
5490p / 1:
5491label(1):
5492	switch_on_type           a(1) 
5493		meta: 	ref(9)
5494		[]: 	ref(7)
5495		atom: 	ref(7)
5496		bignum: 	ref(7)
5497		breal: 	ref(7)
5498		double: 	ref(7)
5499		goal: 	ref(7)
5500		handle: 	ref(7)
5501		integer: 	ref(7)
5502		list: 	ref(7)
5503		rational: 	ref(7)
5504		string: 	ref(7)
5505		structure: 	ref(7)
5506
5507label(2):
5508	try_me_else              0     1     ref(4) 
5509label(3):
5510	bi_free                  a(1) 
5511	jmp                      p1 / 0 
5512label(4):
5513	retry_me_else            0     ref(6) 
5514label(5):
5515	bi_var                   a(1) 
5516	jmp                      p2 / 0 
5517label(6):
5518	trust_me                 0 
5519label(7):
5520	jmp                      p3 / 0 
5521label(9):
5522	try                      0     1     ref(5) 
5523	trust                    0     ref(7) 
5524
5525------ Test idx(50) -------
5526p(A) :-
5527	(
5528	    free(A),
5529	    !,
5530	    p1
5531	;
5532	    (
5533		var(A),
5534		!,
5535		p2
5536	    ;
5537		p3
5538	    )
5539	).
5540
5541INDEXES for (semidet) disjunction [2]
55421. Quality 1.0
5543    [] - [3]
5544    [var] - [2]
5545    [var, free] - [1]
5546Branch determinisms for disjunction [2]
5547    Branch 1: det
5548    Branch 2: det
5549    Branch 3: det
5550p / 1:
5551label(1):
5552	switch_on_type           a(1) 
5553		meta: 	ref(10)
5554		[]: 	ref(7)
5555		atom: 	ref(7)
5556		bignum: 	ref(7)
5557		breal: 	ref(7)
5558		double: 	ref(7)
5559		goal: 	ref(7)
5560		handle: 	ref(7)
5561		integer: 	ref(7)
5562		list: 	ref(7)
5563		rational: 	ref(7)
5564		string: 	ref(7)
5565		structure: 	ref(7)
5566
5567	branch                   ref(9) 
5568label(3):
5569	bi_free                  a(1) 
5570label(9):
5571	jmp                      p1 / 0 
5572label(5):
5573	bi_var                   a(1) 
5574label(10):
5575	jmp                      p2 / 0 
5576label(7):
5577	jmp                      p3 / 0 
5578
5579------ Test idx(51) -------
5580p(A) :-
5581	(
5582	    free(A),
5583	    p1
5584	;
5585	    (
5586		var(A),
5587		p2
5588	    ;
5589		atom(A),
5590		p3
5591	    )
5592	).
5593
5594INDEXES for (nondet) disjunction [2]
55951. Quality 1.3
5596    [] - []
5597    [[]] - [3]
5598    [atom] - [3]
5599    [var] - [2]
5600    [var, free] - [1, 2]
5601Branch determinisms for disjunction [2]
5602    Branch 1: try
5603    Branch 2: trust
5604    Branch 3: det
5605p / 1:
5606label(1):
5607	switch_on_type           a(1) 
5608		meta: 	ref(10)
5609		[]: 	ref(11)
5610		atom: 	ref(11)
5611		bignum: 	ref(fail)
5612		breal: 	ref(fail)
5613		double: 	ref(fail)
5614		goal: 	ref(fail)
5615		handle: 	ref(fail)
5616		integer: 	ref(fail)
5617		list: 	ref(fail)
5618		rational: 	ref(fail)
5619		string: 	ref(fail)
5620		structure: 	ref(fail)
5621
5622label(9):
5623	try                      0     1     ref(3) 
5624	trust                    0     ref(5) 
5625label(3):
5626	bi_free                  a(1) 
5627	jmp                      p1 / 0 
5628label(5):
5629	bi_var                   a(1) 
5630label(10):
5631	jmp                      p2 / 0 
5632label(7):
5633	bi_atom                  a(1) 
5634label(11):
5635	jmp                      p3 / 0 
5636
5637------ Test idx(52) -------
5638p(A) :-
5639	(
5640	    var(A),
5641	    !,
5642	    p1
5643	;
5644	    p2
5645	).
5646
5647INDEXES for (semidet) disjunction [2]
56481. Quality 1.0
5649    [] - [2]
5650    [var] - [1]
5651Branch determinisms for disjunction [2]
5652    Branch 1: det
5653    Branch 2: det
5654p / 1:
5655label(1):
5656	switch_on_type           a(1) 
5657		meta: 	ref(7)
5658		[]: 	ref(5)
5659		atom: 	ref(5)
5660		bignum: 	ref(5)
5661		breal: 	ref(5)
5662		double: 	ref(5)
5663		goal: 	ref(5)
5664		handle: 	ref(5)
5665		integer: 	ref(5)
5666		list: 	ref(5)
5667		rational: 	ref(5)
5668		string: 	ref(5)
5669		structure: 	ref(5)
5670
5671	branch                   ref(7) 
5672label(3):
5673	bi_var                   a(1) 
5674label(7):
5675	jmp                      p1 / 0 
5676label(5):
5677	jmp                      p2 / 0 
5678
5679------ Test idx(53) -------
5680p(A) :-
5681	(
5682	    var(A),
5683	    !,
5684	    p1
5685	;
5686	    (
5687		A = 1,
5688		p2
5689	    ;
5690		A = 2,
5691		p3
5692	    )
5693	).
5694
5695INDEXES for (semidet) disjunction [2]
56961. Quality 1.0
5697    [] - []
5698    [var] - [1]
5699    [integer] - []
5700    [integer, 1] - [2]
5701    [integer, 2] - [3]
5702Branch determinisms for disjunction [2]
5703    Branch 1: det
5704    Branch 2: det
5705    Branch 3: det
5706p / 1:
5707label(1):
5708	integer_switch           a(1) 
5709		1: 	ref(9)
5710		2: 	ref(10)
5711		default: 	ref(fail)
5712
5713label(3):
5714	bi_var                   a(1) 
5715	jmp                      p1 / 0 
5716label(5):
5717	get_integer              a(1)     1 
5718label(9):
5719	jmp                      p2 / 0 
5720label(7):
5721	get_integer              a(1)     2 
5722label(10):
5723	jmp                      p3 / 0 
5724
5725------ Test idx(54) -------
5726p(A) :-
5727	(
5728	    var(A),
5729	    !,
5730	    p1
5731	;
5732	    (
5733		integer(A),
5734		A = 1,
5735		p2
5736	    ;
5737		integer(A),
5738		A = 2,
5739		p3
5740	    )
5741	).
5742
5743INDEXES for (semidet) disjunction [2]
57441. Quality 1.0
5745    [] - []
5746    [var] - [1]
5747    [integer] - []
5748    [integer, 1] - [2]
5749    [integer, 2] - [3]
5750Branch determinisms for disjunction [2]
5751    Branch 1: det
5752    Branch 2: det
5753    Branch 3: det
5754p / 1:
5755label(1):
5756	integer_switch           a(1) 
5757		1: 	ref(5)
5758		2: 	ref(7)
5759		default: 	ref(fail)
5760
5761label(3):
5762	bi_var                   a(1) 
5763	jmp                      p1 / 0 
5764label(5):
5765	bi_integer               a(1) 
5766	get_integer              a(1)     1 
5767	jmp                      p2 / 0 
5768label(7):
5769	bi_integer               a(1) 
5770	get_integer              a(1)     2 
5771	jmp                      p3 / 0 
5772
5773------ Test idx(55) -------
5774p(A) :-
5775	(
5776	    var(A),
5777	    !,
5778	    p1
5779	;
5780	    (
5781		A = 1,
5782		!,
5783		p2
5784	    ;
5785		integer(A),
5786		p3
5787	    )
5788	).
5789
5790INDEXES for (semidet) disjunction [2]
57911. Quality 1.0
5792    [] - []
5793    [var] - [1]
5794    [bignum] - [3]
5795    [integer] - [3]
5796    [integer, 1] - [2]
5797Branch determinisms for disjunction [2]
5798    Branch 1: det
5799    Branch 2: det
5800    Branch 3: det
5801p / 1:
5802label(1):
5803	switch_on_type           a(1) 
5804		meta: 	ref(10)
5805		[]: 	ref(fail)
5806		atom: 	ref(fail)
5807		bignum: 	ref(11)
5808		breal: 	ref(fail)
5809		double: 	ref(fail)
5810		goal: 	ref(fail)
5811		handle: 	ref(fail)
5812		integer: 	ref(9)
5813		list: 	ref(fail)
5814		rational: 	ref(fail)
5815		string: 	ref(fail)
5816		structure: 	ref(fail)
5817
5818	branch                   ref(10) 
5819label(3):
5820	bi_var                   a(1) 
5821label(10):
5822	jmp                      p1 / 0 
5823label(5):
5824	get_integer              a(1)     1 
5825label(12):
5826	jmp                      p2 / 0 
5827label(7):
5828	bi_integer               a(1) 
5829label(11):
5830	jmp                      p3 / 0 
5831label(9):
5832	integer_switch           a(1) 
5833		1: 	ref(12)
5834		default: 	ref(7)
5835
5836
5837------ Test idx(56) -------
5838p(A, B) :-
5839	(
5840	    integer(A),
5841	    B = a,
5842	    p1
5843	;
5844	    (
5845		integer(A),
5846		B = b,
5847		p2
5848	    ;
5849		(
5850		    integer(A),
5851		    B = c,
5852		    p3
5853		;
5854		    atom(A),
5855		    p4
5856		)
5857	    )
5858	).
5859
5860INDEXES for (nondet) disjunction [2]
58611. Quality 1.3
5862    [] - []
5863    [[]] - [4]
5864    [atom] - [4]
5865    [integer] - [1, 2, 3]
5866    [bignum] - [1, 2, 3]
58672. Quality 2.2
5868    [] - [4]
5869    [atom] - [4]
5870    [atom, a] - [1, 4]
5871    [atom, b] - [2, 4]
5872    [atom, c] - [3, 4]
5873    [var] - [1, 2, 3, 4]
5874Branch determinisms for disjunction [2]
5875    Branch 1: try
5876    Branch 2: retry
5877    Branch 3: trust
5878    Branch 4: det
5879p / 2:
5880label(1):
5881	switch_on_type           a(1) 
5882		meta: 	ref(fail)
5883		[]: 	ref(16)
5884		atom: 	ref(16)
5885		bignum: 	ref(12)
5886		breal: 	ref(fail)
5887		double: 	ref(fail)
5888		goal: 	ref(fail)
5889		handle: 	ref(fail)
5890		integer: 	ref(12)
5891		list: 	ref(fail)
5892		rational: 	ref(fail)
5893		string: 	ref(fail)
5894		structure: 	ref(fail)
5895
5896	branch                   ref(fail) 
5897label(4):
5898	bi_integer               a(1) 
5899	get_atom                 a(2)     a 
5900	jmp                      p1 / 0 
5901label(6):
5902	bi_integer               a(1) 
5903	get_atom                 a(2)     b 
5904	jmp                      p2 / 0 
5905label(8):
5906	bi_integer               a(1) 
5907	get_atom                 a(2)     c 
5908	jmp                      p3 / 0 
5909label(10):
5910	bi_atom                  a(1) 
5911label(16):
5912	jmp                      p4 / 0 
5913label(12):
5914	try                      0     2     ref(4) 
5915	retry                    0     ref(6) 
5916	trust                    0     ref(8) 
5917
5918------ Test idx(60) -------
5919p(A) :-
5920	(
5921	    var(A),
5922	    p_var
5923	;
5924	    (
5925		(
5926		    integer(A)
5927		;
5928		    (
5929			float(A)
5930		    ;
5931			rational(A)
5932		    )
5933		),
5934		p_intfloatrat
5935	    ;
5936		(
5937		    breal(A),
5938		    p_breal
5939		;
5940		    (
5941			nonvar(A),
5942			A = [],
5943			!,
5944			p_nil
5945		    ;
5946			(
5947			    (
5948				string(A)
5949			    ->
5950				true
5951			    ;
5952				atom(A)
5953			    ),
5954			    p_atomstring
5955			;
5956			    (
5957				nonvar(A),
5958				A = [B|C],
5959				!,
5960				p_list
5961			    ;
5962				(
5963				    compound(A),
5964				    p_struct
5965				;
5966				    is_handle(A),
5967				    p_handle
5968				)
5969			    )
5970			)
5971		    )
5972		)
5973	    )
5974	).
5975
5976INDEXES for (semidet) disjunction [2]
59771. Quality 1.0
5978    [] - []
5979    [handle] - [8]
5980    [list] - [6]
5981    [[]] - [4]
5982    [structure] - [7]
5983    [atom] - [5]
5984    [var] - [1]
5985    [breal] - [3]
5986    [rational] - [2]
5987    [integer] - [2]
5988    [bignum] - [2]
5989    [string] - [5]
5990    [double] - [2]
5991Branch determinisms for disjunction [2]
5992    Branch 1: det
5993    Branch 2: det
5994    Branch 3: det
5995    Branch 4: det
5996    Branch 5: det
5997    Branch 6: det
5998    Branch 7: det
5999    Branch 8: det
6000INDEXES for (semidet) disjunction [2, 2, 2]
60011. Quality 0.8
6002    [] - []
6003    [rational] - [3]
6004    [integer] - [1]
6005    [bignum] - [1]
6006    [double] - [2]
6007Branch determinisms for disjunction [2, 2, 2]
6008    Branch 1: det
6009    Branch 2: det
6010    Branch 3: det
6011INDEXES for (semidet) disjunction [2, 5, 2]
60121. Quality 0.7
6013    [] - []
6014    [[]] - [2]
6015    [atom] - [2]
6016    [string] - [1]
6017Branch determinisms for disjunction [2, 5, 2]
6018    Branch 1: det
6019    Branch 2: det
6020p / 1:
6021label(1):
6022	switch_on_type           a(1) 
6023		meta: 	ref(32)
6024		[]: 	ref(33)
6025		atom: 	ref(18)
6026		bignum: 	ref(5)
6027		breal: 	ref(34)
6028		double: 	ref(5)
6029		goal: 	ref(fail)
6030		handle: 	ref(35)
6031		integer: 	ref(5)
6032		list: 	ref(36)
6033		rational: 	ref(5)
6034		string: 	ref(18)
6035		structure: 	ref(37)
6036
6037	branch                   ref(32) 
6038label(3):
6039	bi_var                   a(1) 
6040label(32):
6041	jmp                      p_var / 0 
6042label(5):
6043	switch_on_type           a(1) 
6044		meta: 	ref(fail)
6045		[]: 	ref(fail)
6046		atom: 	ref(fail)
6047		bignum: 	ref(40)
6048		breal: 	ref(fail)
6049		double: 	ref(41)
6050		goal: 	ref(fail)
6051		handle: 	ref(fail)
6052		integer: 	ref(40)
6053		list: 	ref(fail)
6054		rational: 	ref(42)
6055		string: 	ref(fail)
6056		structure: 	ref(fail)
6057
6058	branch                   ref(fail) 
6059label(7):
6060	bi_integer               a(1) 
6061label(40):
6062	jmp                      p_intfloatrat / 0 
6063label(9):
6064	bi_float                 a(1) 
6065label(41):
6066	jmp                      p_intfloatrat / 0 
6067label(11):
6068	bi_rational              a(1) 
6069label(42):
6070	jmp                      p_intfloatrat / 0 
6071label(14):
6072	bi_breal                 a(1) 
6073label(34):
6074	jmp                      p_breal / 0 
6075label(16):
6076	bi_nonvar                a(1) 
6077label(33):
6078	get_nil                  a(1) 
6079	jmp                      p_nil / 0 
6080label(18):
6081	switch_on_type           a(1) 
6082		meta: 	ref(fail)
6083		[]: 	ref(38)
6084		atom: 	ref(38)
6085		bignum: 	ref(fail)
6086		breal: 	ref(fail)
6087		double: 	ref(fail)
6088		goal: 	ref(fail)
6089		handle: 	ref(fail)
6090		integer: 	ref(fail)
6091		list: 	ref(fail)
6092		rational: 	ref(fail)
6093		string: 	ref(39)
6094		structure: 	ref(fail)
6095
6096	branch                   ref(fail) 
6097label(20):
6098	bi_string                a(1) 
6099label(39):
6100	jmp                      p_atomstring / 0 
6101label(22):
6102	bi_atom                  a(1) 
6103label(38):
6104	jmp                      p_atomstring / 0 
6105label(25):
6106	bi_nonvar                a(1) 
6107label(36):
6108	get_list                 a(1)     ref(26) 
6109	write_void               2 
6110label(26):
6111	jmp                      p_list / 0 
6112label(28):
6113	bi_compound              a(1) 
6114label(37):
6115	jmp                      p_struct / 0 
6116label(30):
6117	bi_is_handle             a(1) 
6118label(35):
6119	jmp                      p_handle / 0 
6120
6121------ Test idx(70) -------
6122p(f(A), A) :-
6123	atom(A).
6124p(g(A), A) :-
6125	atom(A).
6126
6127INDEXES for (nondet) disjunction [2]
61281. Quality 1.3
6129    [] - []
6130    [structure] - []
6131    [structure, f / 1] - [1]
6132    [structure, g / 1] - [2]
6133    [var] - [1, 2]
61342. Quality 2.0
6135    [] - []
6136    [[]] - [1, 2]
6137    [var] - [1, 2]
6138    [atom] - [1, 2]
6139Branch determinisms for disjunction [2]
6140    Branch 1: try
6141    Branch 2: trust
6142p / 2:
6143label(1):
6144	functor_switch           a(1) 
6145		f / 1: 	ref(5)
6146		g / 1: 	ref(9)
6147		default: 	ref(fail)
6148
6149label(3):
6150	try_me_else              0     2     ref(7) 
6151label(4):
6152	get_structure            a(1)     f / 1     ref(5) 
6153	write_value              a(2) 
6154	bi_atom                  a(2) 
6155	ret                  
6156label(5):
6157	read_value               a(2) 
6158	bi_atom                  a(2) 
6159	ret                  
6160label(7):
6161	trust_me                 0 
6162label(8):
6163	get_structure            a(1)     g / 1     ref(9) 
6164	write_value              a(2) 
6165	bi_atom                  a(2) 
6166	ret                  
6167label(9):
6168	read_value               a(2) 
6169	bi_atom                  a(2) 
6170	ret                  
6171
6172------ Test idx(71) -------
6173p(A, B) :-
6174	A = B,
6175	atom(B).
6176p(A, B) :-
6177	A = B,
6178	integer(B).
6179
6180INDEXES for (nondet) disjunction [2]
61811. Quality 1.3
6182    [] - []
6183    [[]] - [1]
6184    [var] - [1, 2]
6185    [atom] - [1]
6186    [integer] - [2]
6187    [bignum] - [2]
6188Branch determinisms for disjunction [2]
6189    Branch 1: try
6190    Branch 2: trust
6191p / 2:
6192label(1):
6193	switch_on_type           a(2) 
6194		meta: 	ref(2)
6195		[]: 	ref(3)
6196		atom: 	ref(3)
6197		bignum: 	ref(5)
6198		breal: 	ref(fail)
6199		double: 	ref(fail)
6200		goal: 	ref(fail)
6201		handle: 	ref(fail)
6202		integer: 	ref(5)
6203		list: 	ref(fail)
6204		rational: 	ref(fail)
6205		string: 	ref(fail)
6206		structure: 	ref(fail)
6207
6208label(2):
6209	try_me_else              0     2     ref(4) 
6210label(3):
6211	get_value                a(1)     a(2) 
6212	bi_atom                  a(2) 
6213	ret                  
6214label(4):
6215	trust_me                 0 
6216label(5):
6217	get_value                a(1)     a(2) 
6218	bi_integer               a(2) 
6219	ret                  
6220
6221------ Test idx(72) -------
6222p(A / B, A, B) :-
6223	atom(A),
6224	integer(B),
6225	B >= 0.
6226p(A // B, A, B) :-
6227	atom(A),
6228	integer(B),
6229	B >= 0.
6230
6231INDEXES for (nondet) disjunction [2]
62321. Quality 1.3
6233    [] - []
6234    [structure] - []
6235    [structure, / / 2] - [1]
6236    [structure, // / 2] - [2]
6237    [var] - [1, 2]
62382. Quality 2.0
6239    [] - []
6240    [[]] - [1, 2]
6241    [var] - [1, 2]
6242    [atom] - [1, 2]
62433. Quality 2.0
6244    [] - []
6245    [var] - [1, 2]
6246    [integer] - [1, 2]
6247    [bignum] - [1, 2]
6248Branch determinisms for disjunction [2]
6249    Branch 1: try
6250    Branch 2: trust
6251p / 3:
6252label(1):
6253	functor_switch           a(1) 
6254		(/) / 2: 	ref(5)
6255		(//) / 2: 	ref(9)
6256		default: 	ref(fail)
6257
6258label(3):
6259	try_me_else              0     3     ref(7) 
6260label(4):
6261	get_structure            a(1)     (/) / 2     ref(5) 
6262	write_value              a(2) 
6263	write_value              a(3) 
6264	branch                   ref(6) 
6265label(5):
6266	read_value               a(2) 
6267	read_value               a(3) 
6268label(6):
6269	bi_atom                  a(2) 
6270	bi_integer               a(3) 
6271	put_integer              a(1)     0 
6272	bi_ge                    a(3)     a(1)     eclipse     48 
6273	ret                  
6274label(7):
6275	trust_me                 0 
6276label(8):
6277	get_structure            a(1)     (//) / 2     ref(9) 
6278	write_value              a(2) 
6279	write_value              a(3) 
6280	branch                   ref(10) 
6281label(9):
6282	read_value               a(2) 
6283	read_value               a(3) 
6284label(10):
6285	bi_atom                  a(2) 
6286	bi_integer               a(3) 
6287	put_integer              a(1)     0 
6288	bi_ge                    a(3)     a(1)     eclipse     48 
6289	ret                  
6290
6291------ Test idx(100) -------
6292p(1) :-
6293	-?->
6294	p_1.
6295p(2) :-
6296	-?->
6297	p_2.
6298
6299INDEXES for (semidet) disjunction [2]
63001. Quality 0.7
6301    [] - []
6302    [integer] - []
6303    [integer, 1] - [1]
6304    [integer, 2] - [2]
6305Branch determinisms for disjunction [2]
6306    Branch 1: det
6307    Branch 2: det
6308p / 1:
6309label(1):
6310	integer_switch           a(1) 
6311		1: 	ref(7)
6312		2: 	ref(8)
6313		default: 	ref(fail)
6314
6315	branch                   ref(fail) 
6316label(3):
6317	in_get_integer           a(1)     1 
6318label(7):
6319	jmp                      p_1 / 0 
6320label(5):
6321	in_get_integer           a(1)     2 
6322label(8):
6323	jmp                      p_2 / 0 
6324
6325------ Test idx(101) -------
6326p(1) :-
6327	-?->
6328	p_integer.
6329p(10000000000000000000) :-
6330	-?->
6331	p_big.
6332p(1.1) :-
6333	-?->
6334	p_float.
6335p(5_2) :-
6336	-?->
6337	p_rational.
6338p(0.9__1.1) :-
6339	-?->
6340	p_breal.
6341p("hello") :-
6342	-?->
6343	p_string.
6344p(hello) :-
6345	-?->
6346	p_atom.
6347p([]) :-
6348	-?->
6349	p_nil.
6350p([A|B]) :-
6351	-?->
6352	p_list.
6353p(foo(bar)) :-
6354	-?->
6355	p_struct.
6356
6357INDEXES for (semidet) disjunction [2]
63581. Quality 0.9
6359    [] - []
6360    [list] - [9]
6361    [[]] - [8]
6362    [structure] - []
6363    [structure, foo / 1] - [10]
6364    [atom] - []
6365    [atom, hello] - [7]
6366    [breal] - [5]
6367    [rational] - [4]
6368    [bignum] - [2]
6369    [integer] - []
6370    [integer, 1] - [1]
6371    [string] - [6]
6372    [double] - [3]
6373Branch determinisms for disjunction [2]
6374    Branch 1: det
6375    Branch 2: det
6376    Branch 3: det
6377    Branch 4: det
6378    Branch 5: det
6379    Branch 6: det
6380    Branch 7: det
6381    Branch 8: det
6382    Branch 9: det
6383    Branch 10: det
6384p / 1:
6385label(1):
6386	switch_on_type           a(1) 
6387		meta: 	ref(fail)
6388		[]: 	ref(25)
6389		atom: 	ref(15)
6390		bignum: 	ref(5)
6391		breal: 	ref(11)
6392		double: 	ref(7)
6393		goal: 	ref(fail)
6394		handle: 	ref(fail)
6395		integer: 	ref(3)
6396		list: 	ref(19)
6397		rational: 	ref(9)
6398		string: 	ref(13)
6399		structure: 	ref(22)
6400
6401	branch                   ref(fail) 
6402label(3):
6403	in_get_integer           a(1)     1 
6404	jmp                      p_integer / 0 
6405label(5):
6406	in_get_constant          a(1)     10000000000000000000 
6407	jmp                      p_big / 0 
6408label(7):
6409	in_get_constant          a(1)     1.1 
6410	jmp                      p_float / 0 
6411label(9):
6412	in_get_constant          a(1)     5_2 
6413	jmp                      p_rational / 0 
6414label(11):
6415	in_get_constant          a(1)     0.9__1.1 
6416	jmp                      p_breal / 0 
6417label(13):
6418	in_get_string            a(1)     "hello" 
6419	jmp                      p_string / 0 
6420label(15):
6421	in_get_atom              a(1)     hello 
6422	jmp                      p_atom / 0 
6423label(17):
6424	in_get_nil               a(1) 
6425label(25):
6426	jmp                      p_nil / 0 
6427label(19):
6428	in_get_list              a(1)     ref(20) 
6429label(20):
6430	jmp                      p_list / 0 
6431label(22):
6432	in_get_structure         a(1)     foo / 1     ref(23) 
6433label(23):
6434	read_test_var        
6435	read_atom                bar 
6436	jmp                      p_struct / 0 
6437
6438------ Test idx(102) -------
6439p(a, 1).
6440p(b, 2).
6441p(c, 3).
6442
6443INDEXES for (nondet) disjunction [2]
64441. Quality 1.5
6445    [] - []
6446    [atom] - []
6447    [atom, a] - [1]
6448    [atom, b] - [2]
6449    [atom, c] - [3]
6450    [var] - [1, 2, 3]
64512. Quality 1.5
6452    [] - []
6453    [var] - [1, 2, 3]
6454    [integer] - []
6455    [integer, 1] - [1]
6456    [integer, 2] - [2]
6457    [integer, 3] - [3]
6458Branch determinisms for disjunction [2]
6459    Branch 1: try
6460    Branch 2: retry
6461    Branch 3: trust
6462p / 2:
6463label(1):
6464	atom_switch              a(1) 
6465		a: 	ref(10)
6466		b: 	ref(11)
6467		c: 	ref(12)
6468		default: 	ref(fail)
6469
6470	integer_switch           a(2) 
6471		1: 	ref(4)
6472		2: 	ref(6)
6473		3: 	ref(8)
6474		default: 	ref(fail)
6475
6476label(3):
6477	try_me_else              0     2     ref(5) 
6478label(4):
6479	get_atom                 a(1)     a 
6480label(10):
6481	get_integer              a(2)     1 
6482	ret                  
6483label(5):
6484	retry_me_else            0     ref(7) 
6485label(6):
6486	get_atom                 a(1)     b 
6487label(11):
6488	get_integer              a(2)     2 
6489	ret                  
6490label(7):
6491	trust_me                 0 
6492label(8):
6493	get_atom                 a(1)     c 
6494label(12):
6495	get_integer              a(2)     3 
6496	ret                  
6497
6498------ Test idx(103) -------
6499p(1) :-
6500	-?->
6501	p_small1.
6502p(2) :-
6503	-?->
6504	p_small2.
6505p(10000000000) :-
6506	-?->
6507	p_medium1.
6508p(20000000000) :-
6509	-?->
6510	p_medium2.
6511p(10000000000000000000) :-
6512	-?->
6513	p_big1.
6514p(20000000000000000000) :-
6515	-?->
6516	p_big2.
6517
6518INDEXES for (nondet) disjunction [2]
65191. Quality 1.0
6520    [] - []
6521    [bignum] - [5, 6]
6522    [integer] - []
6523    [integer, 20000000000] - [4]
6524    [integer, 10000000000] - [3]
6525    [integer, 1] - [1]
6526    [integer, 2] - [2]
6527Branch determinisms for disjunction [2]
6528    Branch 1: det
6529    Branch 2: det
6530    Branch 3: det
6531    Branch 4: det
6532    Branch 5: try
6533    Branch 6: trust
6534p / 1:
6535label(1):
6536	switch_on_type           a(1) 
6537		meta: 	ref(fail)
6538		[]: 	ref(fail)
6539		atom: 	ref(fail)
6540		bignum: 	ref(15)
6541		breal: 	ref(fail)
6542		double: 	ref(fail)
6543		goal: 	ref(fail)
6544		handle: 	ref(fail)
6545		integer: 	ref(16)
6546		list: 	ref(fail)
6547		rational: 	ref(fail)
6548		string: 	ref(fail)
6549		structure: 	ref(fail)
6550
6551	branch                   ref(fail) 
6552label(3):
6553	in_get_integer           a(1)     1 
6554label(19):
6555	jmp                      p_small1 / 0 
6556label(5):
6557	in_get_integer           a(1)     2 
6558label(20):
6559	jmp                      p_small2 / 0 
6560label(7):
6561	in_get_integer           a(1)     10000000000 
6562label(18):
6563	jmp                      p_medium1 / 0 
6564label(9):
6565	in_get_integer           a(1)     20000000000 
6566label(17):
6567	jmp                      p_medium2 / 0 
6568label(11):
6569	in_get_constant          a(1)     10000000000000000000 
6570	jmp                      p_big1 / 0 
6571label(13):
6572	in_get_constant          a(1)     20000000000000000000 
6573	jmp                      p_big2 / 0 
6574label(15):
6575	try                      0     1     ref(11) 
6576	trust                    0     ref(13) 
6577label(16):
6578	integer_switch           a(1) 
6579		20000000000: 	ref(17)
6580		10000000000: 	ref(18)
6581		1: 	ref(19)
6582		2: 	ref(20)
6583		default: 	ref(fail)
6584
6585
6586------ Test idx(200) -------
6587p(A, B, C) :-
6588	var(A),
6589	!,
6590	B = C.
6591p(a, A, B) :-
6592	!,
6593	a(A, B).
6594p(A, B, C) :-
6595	q(A, B, C).
6596
6597INDEXES for (semidet) disjunction [2]
65981. Quality 1.0
6599    [] - [3]
6600    [atom] - [3]
6601    [atom, a] - [2]
6602    [var] - [1]
6603Branch determinisms for disjunction [2]
6604    Branch 1: det
6605    Branch 2: det
6606    Branch 3: det
6607p / 3:
6608label(1):
6609	atom_switch              a(1) 
6610		a: 	ref(9)
6611		default: 	ref(7)
6612
6613label(3):
6614	bi_var                   a(1) 
6615	get_value                a(2)     a(3) 
6616	ret                  
6617label(5):
6618	get_atom                 a(1)     a 
6619label(9):
6620	shift                    a(1)     a(2)     a(3) 
6621	jmp                      a / 2 
6622label(7):
6623	jmp                      q / 3 
6624
6625------ Test idx(201) -------
6626p(A, B) :-
6627	+(A, 1, C),
6628	(
6629	    p1(C, B)
6630	;
6631	    p2(A, B)
6632	).
6633
6634p / 2:
6635label(1):
6636	bi_addi                  a(1)     1     a(3)     24 
6637	try_me_else              0     3     ref(3) 
6638label(2):
6639	move                     a(3)     a(1) 
6640	jmp                      p1 / 2 
6641label(3):
6642	trust_me                 0 
6643label(4):
6644	jmp                      p2 / 2 
6645
6646------ Test idx(202) -------
6647p(A, B) :-
6648	true,
6649	+(A, 1, C),
6650	(
6651	    p1(C, B)
6652	;
6653	    p2(C, B)
6654	).
6655
6656p / 2:
6657label(1):
6658	get_variable             2     a(1)     y(2) 
6659	move                     a(2)     y(1) 
6660	callf                    true / 0     Y[1,2] 
6661	move                     y(2)     a(2) 
6662	bi_addi                  a(2)     1     a(1)     24 
6663	try_me_else              0     1     ref(3) 
6664label(2):
6665	move_chain               y(1)     a(2)     p1 / 2 
6666label(3):
6667	trust_me_inline          0     Y[1] 
6668label(4):
6669	move_chain               y(1)     a(2)     p2 / 2 
6670
6671------ Test idx(203) -------
6672p(A, B) :-
6673	true,
6674	+(A, 1, C),
6675	(
6676	    p1(C, B)
6677	;
6678	    p2(C, C, B)
6679	).
6680
6681p / 2:
6682label(1):
6683	get_variable             2     a(1)     y(2) 
6684	move                     a(2)     y(1) 
6685	callf                    true / 0     Y[1,2] 
6686	move                     y(2)     a(2) 
6687	bi_addi                  a(2)     1     a(1)     24 
6688	try_me_else              0     1     ref(3) 
6689label(2):
6690	move_chain               y(1)     a(2)     p1 / 2 
6691label(3):
6692	trust_me_inline          0     Y[1] 
6693label(4):
6694	move                     a(1)     a(2) 
6695	move_chain               y(1)     a(3)     p2 / 3 
6696
6697------ Test idx(204) -------
6698p(A, B) :-
6699	true,
6700	+(A, 1, C),
6701	integer(C),
6702	(
6703	    p1(C, B)
6704	;
6705	    p2(C, B)
6706	).
6707
6708p / 2:
6709label(1):
6710	get_variable             2     a(1)     y(2) 
6711	move                     a(2)     y(1) 
6712	callf                    true / 0     Y[1,2] 
6713	move                     y(2)     a(2) 
6714	bi_addi                  a(2)     1     a(1)     24 
6715	bi_integer               a(1) 
6716	try_me_else              0     1     ref(3) 
6717label(2):
6718	move_chain               y(1)     a(2)     p1 / 2 
6719label(3):
6720	trust_me_inline          0     Y[1] 
6721label(4):
6722	move_chain               y(1)     a(2)     p2 / 2 
6723
6724------ Test idx(300) -------
6725p(A) :-
6726	(
6727	    A = 1,
6728	    p1
6729	;
6730	    A = 2,
6731	    p2
6732	),
6733	q(A).
6734
6735INDEXES for (nondet) disjunction [2]
67361. Quality 1.3
6737    [] - []
6738    [var] - [1, 2]
6739    [integer] - []
6740    [integer, 1] - [1]
6741    [integer, 2] - [2]
6742Branch determinisms for disjunction [2]
6743    Branch 1: try
6744    Branch 2: trust
6745p / 1:
6746label(1):
6747	integer_switch           a(1) 
6748		1: 	ref(7)
6749		2: 	ref(8)
6750		default: 	ref(fail)
6751
6752label(2):
6753	try_me_else              0     1     ref(4) 
6754label(3):
6755	get_integer              a(1)     1 
6756label(7):
6757	get_variable             1     a(1)     y(1) 
6758	callf                    p1 / 0     Y[1] 
6759	move_chain               y(1)     a(1)     q / 1 
6760label(4):
6761	trust_me                 0 
6762label(5):
6763	get_integer              a(1)     2 
6764label(8):
6765	get_variable             1     a(1)     y(1) 
6766	callf                    p2 / 0     Y[1] 
6767	move_chain               y(1)     a(1)     q / 1 
6768
6769------ Test head(100) -------
6770p(a) :-
6771	q.
6772
6773p / 1:
6774label(1):
6775	get_atom                 a(1)     a 
6776	jmp                      q / 0 
6777
6778------ Test head(101) -------
6779p(a, A, 3) :-
6780	q.
6781
6782p / 3:
6783label(1):
6784	get_atom                 a(1)     a 
6785	get_integer              a(3)     3 
6786	jmp                      q / 0 
6787
6788------ Test head(102) -------
6789p(A, A) :-
6790	q.
6791
6792p / 2:
6793label(1):
6794	get_value                a(2)     a(1) 
6795	jmp                      q / 0 
6796
6797------ Test head(103) -------
6798p(a, A, B, 3.5, 5_2, "hello", A) :-
6799	q.
6800
6801p / 7:
6802label(1):
6803	get_atom                 a(1)     a 
6804	get_constant             a(4)     3.5 
6805	get_constant             a(5)     5_2 
6806	get_string               a(6)     "hello" 
6807	get_value                a(7)     a(2) 
6808	jmp                      q / 0 
6809
6810------ Test head(1) -------
6811p(f(1)) :-
6812	q.
6813
6814p / 1:
6815label(1):
6816	get_structure            a(1)     f / 1     ref(2) 
6817	write_integer            1 
6818	jmp                      q / 0 
6819label(2):
6820	read_integer             1 
6821	jmp                      q / 0 
6822
6823------ Test head(2) -------
6824p(f(1, 2)) :-
6825	q.
6826
6827p / 1:
6828label(1):
6829	get_structure            a(1)     f / 2     ref(2) 
6830	write_integer2           1     2 
6831	jmp                      q / 0 
6832label(2):
6833	read_integer             1 
6834	read_integer             2 
6835	jmp                      q / 0 
6836
6837------ Test head(3) -------
6838p(f(g(1))) :-
6839	q.
6840
6841p / 1:
6842label(1):
6843	get_structure            a(1)     f / 1     ref(3) 
6844	write_structure          g / 1 
6845label(2):
6846	write_integer            1 
6847	jmp                      q / 0 
6848label(3):
6849	read_last_structure      g / 1     ref(2) 
6850	read_integer             1 
6851	jmp                      q / 0 
6852
6853------ Test head(4) -------
6854p(f(g(1), h(2))) :-
6855	q.
6856
6857p / 1:
6858label(1):
6859	get_structure            a(1)     f / 2     ref(4) 
6860	write_first_structure     g / 1 
6861label(2):
6862	write_integer            1 
6863	mode                     t(0)     ref(5) 
6864	write_structure          h / 1 
6865label(3):
6866	write_integer            2 
6867	space                    -1 
6868	jmp                      q / 0 
6869label(4):
6870	read_structure           g / 1     ref(2) 
6871	read_integer             1 
6872	mode                     t(0) 
6873label(5):
6874	read_last_structure      h / 1     ref(3) 
6875	read_integer             2 
6876	space                    -1 
6877	jmp                      q / 0 
6878
6879------ Test head(5) -------
6880p(f(g(1), h(2), i(3))) :-
6881	q.
6882
6883p / 1:
6884label(1):
6885	get_structure            a(1)     f / 3     ref(5) 
6886	write_first_structure     g / 1 
6887label(2):
6888	write_integer            1 
6889	write_next_structure     h / 1     t(0)     ref(6) 
6890label(3):
6891	write_integer            2 
6892	mode                     t(0)     ref(7) 
6893	write_structure          i / 1 
6894label(4):
6895	write_integer            3 
6896	space                    -1 
6897	jmp                      q / 0 
6898label(5):
6899	read_structure           g / 1     ref(2) 
6900	read_integer             1 
6901label(6):
6902	read_next_structure      h / 1     t(0)     ref(3) 
6903	read_integer             2 
6904	mode                     t(0) 
6905label(7):
6906	read_last_structure      i / 1     ref(4) 
6907	read_integer             3 
6908	space                    -1 
6909	jmp                      q / 0 
6910
6911------ Test head(6) -------
6912p(f(4, g(1), h(2), i(3))) :-
6913	q.
6914
6915p / 1:
6916label(1):
6917	get_structure            a(1)     f / 4     ref(5) 
6918	write_integer            4 
6919	write_first_structure     g / 1 
6920label(2):
6921	write_integer            1 
6922	write_next_structure     h / 1     t(0)     ref(6) 
6923label(3):
6924	write_integer            2 
6925	mode                     t(0)     ref(7) 
6926	write_structure          i / 1 
6927label(4):
6928	write_integer            3 
6929	space                    -1 
6930	jmp                      q / 0 
6931label(5):
6932	read_integer             4 
6933	read_structure           g / 1     ref(2) 
6934	read_integer             1 
6935label(6):
6936	read_next_structure      h / 1     t(0)     ref(3) 
6937	read_integer             2 
6938	mode                     t(0) 
6939label(7):
6940	read_last_structure      i / 1     ref(4) 
6941	read_integer             3 
6942	space                    -1 
6943	jmp                      q / 0 
6944
6945------ Test head(7) -------
6946p(f(4, g(1), 5, h(2), i(3))) :-
6947	q.
6948
6949p / 1:
6950label(1):
6951	get_structure            a(1)     f / 5     ref(5) 
6952	write_integer            4 
6953	write_first_structure     g / 1 
6954label(2):
6955	write_integer            1 
6956	mode                     t(0)     ref(6) 
6957	write_integer            5 
6958	write_next_structure     h / 1     t(0) 
6959label(3):
6960	write_integer            2 
6961	mode                     t(0)     ref(7) 
6962	write_structure          i / 1 
6963label(4):
6964	write_integer            3 
6965	space                    -1 
6966	jmp                      q / 0 
6967label(5):
6968	read_integer             4 
6969	read_structure           g / 1     ref(2) 
6970	read_integer             1 
6971	mode                     t(0) 
6972label(6):
6973	read_integer             5 
6974	read_structure           h / 1     t(0)     ref(3) 
6975	read_integer             2 
6976	mode                     t(0) 
6977label(7):
6978	read_last_structure      i / 1     ref(4) 
6979	read_integer             3 
6980	space                    -1 
6981	jmp                      q / 0 
6982
6983------ Test head(8) -------
6984p(f(4, g(1), 5, h(2), 6, i(3))) :-
6985	q.
6986
6987p / 1:
6988label(1):
6989	get_structure            a(1)     f / 6     ref(5) 
6990	write_integer            4 
6991	write_first_structure     g / 1 
6992label(2):
6993	write_integer            1 
6994	mode                     t(0)     ref(6) 
6995	write_integer            5 
6996	write_next_structure     h / 1     t(0) 
6997label(3):
6998	write_integer            2 
6999	mode                     t(0)     ref(7) 
7000	write_integer            6 
7001	write_structure          i / 1 
7002label(4):
7003	write_integer            3 
7004	space                    -1 
7005	jmp                      q / 0 
7006label(5):
7007	read_integer             4 
7008	read_structure           g / 1     ref(2) 
7009	read_integer             1 
7010	mode                     t(0) 
7011label(6):
7012	read_integer             5 
7013	read_structure           h / 1     t(0)     ref(3) 
7014	read_integer             2 
7015	mode                     t(0) 
7016label(7):
7017	read_integer             6 
7018	read_last_structure      i / 1     ref(4) 
7019	read_integer             3 
7020	space                    -1 
7021	jmp                      q / 0 
7022
7023------ Test head(9) -------
7024p(f(4, g(1), 5, h(2), 6, i(3), 7)) :-
7025	q.
7026
7027p / 1:
7028label(1):
7029	get_structure            a(1)     f / 7     ref(5) 
7030	write_integer            4 
7031	write_first_structure     g / 1 
7032label(2):
7033	write_integer            1 
7034	mode                     t(0)     ref(6) 
7035	write_integer            5 
7036	write_next_structure     h / 1     t(0) 
7037label(3):
7038	write_integer            2 
7039	mode                     t(0)     ref(7) 
7040	write_integer            6 
7041	write_next_structure     i / 1     t(0) 
7042label(4):
7043	write_integer            3 
7044	mode                     t(0)     ref(8) 
7045	write_integer            7 
7046	space                    -1 
7047	jmp                      q / 0 
7048label(5):
7049	read_integer             4 
7050	read_structure           g / 1     ref(2) 
7051	read_integer             1 
7052	mode                     t(0) 
7053label(6):
7054	read_integer             5 
7055	read_structure           h / 1     t(0)     ref(3) 
7056	read_integer             2 
7057	mode                     t(0) 
7058label(7):
7059	read_integer             6 
7060	read_structure           i / 1     t(0)     ref(4) 
7061	read_integer             3 
7062	mode                     t(0) 
7063label(8):
7064	read_integer             7 
7065	space                    -1 
7066	jmp                      q / 0 
7067
7068------ Test head(10) -------
7069p(f(4, g(1), 5, h(2), 6, i(3), 7)) :-
7070	q.
7071
7072p / 1:
7073label(1):
7074	get_structure            a(1)     f / 7     ref(5) 
7075	write_integer            4 
7076	write_first_structure     g / 1 
7077label(2):
7078	write_integer            1 
7079	mode                     t(0)     ref(6) 
7080	write_integer            5 
7081	write_next_structure     h / 1     t(0) 
7082label(3):
7083	write_integer            2 
7084	mode                     t(0)     ref(7) 
7085	write_integer            6 
7086	write_next_structure     i / 1     t(0) 
7087label(4):
7088	write_integer            3 
7089	mode                     t(0)     ref(8) 
7090	write_integer            7 
7091	space                    -1 
7092	jmp                      q / 0 
7093label(5):
7094	read_integer             4 
7095	read_structure           g / 1     ref(2) 
7096	read_integer             1 
7097	mode                     t(0) 
7098label(6):
7099	read_integer             5 
7100	read_structure           h / 1     t(0)     ref(3) 
7101	read_integer             2 
7102	mode                     t(0) 
7103label(7):
7104	read_integer             6 
7105	read_structure           i / 1     t(0)     ref(4) 
7106	read_integer             3 
7107	mode                     t(0) 
7108label(8):
7109	read_integer             7 
7110	space                    -1 
7111	jmp                      q / 0 
7112
7113------ Test head(11) -------
7114p(f(4, g(1), 5, h(2), 6, i(3), 7, 8)) :-
7115	q.
7116
7117p / 1:
7118label(1):
7119	get_structure            a(1)     f / 8     ref(5) 
7120	write_integer            4 
7121	write_first_structure     g / 1 
7122label(2):
7123	write_integer            1 
7124	mode                     t(0)     ref(6) 
7125	write_integer            5 
7126	write_next_structure     h / 1     t(0) 
7127label(3):
7128	write_integer            2 
7129	mode                     t(0)     ref(7) 
7130	write_integer            6 
7131	write_next_structure     i / 1     t(0) 
7132label(4):
7133	write_integer            3 
7134	mode                     t(0)     ref(8) 
7135	write_integer2           7     8 
7136	space                    -1 
7137	jmp                      q / 0 
7138label(5):
7139	read_integer             4 
7140	read_structure           g / 1     ref(2) 
7141	read_integer             1 
7142	mode                     t(0) 
7143label(6):
7144	read_integer             5 
7145	read_structure           h / 1     t(0)     ref(3) 
7146	read_integer             2 
7147	mode                     t(0) 
7148label(7):
7149	read_integer             6 
7150	read_structure           i / 1     t(0)     ref(4) 
7151	read_integer             3 
7152	mode                     t(0) 
7153label(8):
7154	read_integer             7 
7155	read_integer             8 
7156	space                    -1 
7157	jmp                      q / 0 
7158
7159------ Test head(12) -------
7160p(f(g(1), 5, h(2), 6, i(3), 7, 8)) :-
7161	q.
7162
7163p / 1:
7164label(1):
7165	get_structure            a(1)     f / 7     ref(5) 
7166	write_first_structure     g / 1 
7167label(2):
7168	write_integer            1 
7169	mode                     t(0)     ref(6) 
7170	write_integer            5 
7171	write_next_structure     h / 1     t(0) 
7172label(3):
7173	write_integer            2 
7174	mode                     t(0)     ref(7) 
7175	write_integer            6 
7176	write_next_structure     i / 1     t(0) 
7177label(4):
7178	write_integer            3 
7179	mode                     t(0)     ref(8) 
7180	write_integer2           7     8 
7181	space                    -1 
7182	jmp                      q / 0 
7183label(5):
7184	read_structure           g / 1     ref(2) 
7185	read_integer             1 
7186	mode                     t(0) 
7187label(6):
7188	read_integer             5 
7189	read_structure           h / 1     t(0)     ref(3) 
7190	read_integer             2 
7191	mode                     t(0) 
7192label(7):
7193	read_integer             6 
7194	read_structure           i / 1     t(0)     ref(4) 
7195	read_integer             3 
7196	mode                     t(0) 
7197label(8):
7198	read_integer             7 
7199	read_integer             8 
7200	space                    -1 
7201	jmp                      q / 0 
7202
7203------ Test head(13) -------
7204p(f(g(1), h(2), 6, i(3), 7, 8)) :-
7205	q.
7206
7207p / 1:
7208label(1):
7209	get_structure            a(1)     f / 6     ref(5) 
7210	write_first_structure     g / 1 
7211label(2):
7212	write_integer            1 
7213	write_next_structure     h / 1     t(0)     ref(6) 
7214label(3):
7215	write_integer            2 
7216	mode                     t(0)     ref(7) 
7217	write_integer            6 
7218	write_next_structure     i / 1     t(0) 
7219label(4):
7220	write_integer            3 
7221	mode                     t(0)     ref(8) 
7222	write_integer2           7     8 
7223	space                    -1 
7224	jmp                      q / 0 
7225label(5):
7226	read_structure           g / 1     ref(2) 
7227	read_integer             1 
7228label(6):
7229	read_next_structure      h / 1     t(0)     ref(3) 
7230	read_integer             2 
7231	mode                     t(0) 
7232label(7):
7233	read_integer             6 
7234	read_structure           i / 1     t(0)     ref(4) 
7235	read_integer             3 
7236	mode                     t(0) 
7237label(8):
7238	read_integer             7 
7239	read_integer             8 
7240	space                    -1 
7241	jmp                      q / 0 
7242
7243------ Test head(14) -------
7244p(f(g(1), h(2), i(3), 7, 8)) :-
7245	q.
7246
7247p / 1:
7248label(1):
7249	get_structure            a(1)     f / 5     ref(5) 
7250	write_first_structure     g / 1 
7251label(2):
7252	write_integer            1 
7253	write_next_structure     h / 1     t(0)     ref(6) 
7254label(3):
7255	write_integer            2 
7256	write_next_structure     i / 1     t(0)     ref(7) 
7257label(4):
7258	write_integer            3 
7259	mode                     t(0)     ref(8) 
7260	write_integer2           7     8 
7261	space                    -1 
7262	jmp                      q / 0 
7263label(5):
7264	read_structure           g / 1     ref(2) 
7265	read_integer             1 
7266label(6):
7267	read_next_structure      h / 1     t(0)     ref(3) 
7268	read_integer             2 
7269label(7):
7270	read_next_structure      i / 1     t(0)     ref(4) 
7271	read_integer             3 
7272	mode                     t(0) 
7273label(8):
7274	read_integer             7 
7275	read_integer             8 
7276	space                    -1 
7277	jmp                      q / 0 
7278
7279------ Test head(15) -------
7280p(f(g(1), h(2), i(3), 8)) :-
7281	q.
7282
7283p / 1:
7284label(1):
7285	get_structure            a(1)     f / 4     ref(5) 
7286	write_first_structure     g / 1 
7287label(2):
7288	write_integer            1 
7289	write_next_structure     h / 1     t(0)     ref(6) 
7290label(3):
7291	write_integer            2 
7292	write_next_structure     i / 1     t(0)     ref(7) 
7293label(4):
7294	write_integer            3 
7295	mode                     t(0)     ref(8) 
7296	write_integer            8 
7297	space                    -1 
7298	jmp                      q / 0 
7299label(5):
7300	read_structure           g / 1     ref(2) 
7301	read_integer             1 
7302label(6):
7303	read_next_structure      h / 1     t(0)     ref(3) 
7304	read_integer             2 
7305label(7):
7306	read_next_structure      i / 1     t(0)     ref(4) 
7307	read_integer             3 
7308	mode                     t(0) 
7309label(8):
7310	read_integer             8 
7311	space                    -1 
7312	jmp                      q / 0 
7313
7314------ Test head(16) -------
7315p(A, B) :-
7316	A = f(B, C),
7317	q(A, C).
7318
7319p / 2:
7320label(1):
7321	get_structure            a(1)     f / 2     ref(2) 
7322	write_value              a(2) 
7323	write_variable           a(2) 
7324	jmp                      q / 2 
7325label(2):
7326	read_value               a(2) 
7327	read_variable            a(2) 
7328	jmp                      q / 2 
7329
7330------ Test head(17) -------
7331p(A, B) :-
7332	A = f(C, B),
7333	q(A, C).
7334
7335p / 2:
7336label(1):
7337	get_structure            a(1)     f / 2     ref(2) 
7338	move                     a(2)     a(3) 
7339	write_variable           a(2) 
7340	write_value              a(3) 
7341	jmp                      q / 2 
7342label(2):
7343	move                     a(2)     a(3) 
7344	read_variable            a(2) 
7345	read_value               a(3) 
7346	jmp                      q / 2 
7347
7348------ Test head(18) -------
7349p(A, B) :-
7350	A = f(g(B), C),
7351	q(A, C).
7352
7353p / 2:
7354label(1):
7355	get_structure            a(1)     f / 2     ref(3) 
7356	write_first_structure     g / 1 
7357label(2):
7358	write_value              a(2) 
7359	mode                     t(0)     ref(4) 
7360	write_variable           a(2) 
7361	space                    -1 
7362	jmp                      q / 2 
7363label(3):
7364	read_structure           g / 1     ref(2) 
7365	read_value               a(2) 
7366	mode                     t(0) 
7367label(4):
7368	read_variable            a(2) 
7369	space                    -1 
7370	jmp                      q / 2 
7371
7372------ Test head(19) -------
7373p(f(A)) :-
7374	q,
7375	r(A).
7376
7377p / 1:
7378label(1):
7379	allocate                 1 
7380	get_structure            a(1)     f / 1     ref(2) 
7381	write_variable           y(1) 
7382	branch                   ref(3) 
7383label(2):
7384	read_variable            y(1) 
7385label(3):
7386	callf                    q / 0     Y[1] 
7387	move_chain               y(1)     a(1)     r / 1 
7388
7389------ Test head(20) -------
7390p(f(A, A)) :-
7391	q,
7392	r(A).
7393
7394p / 1:
7395label(1):
7396	allocate                 1 
7397	get_structure            a(1)     f / 2     ref(2) 
7398	write_variable           y(1) 
7399	write_value              y(1) 
7400	branch                   ref(3) 
7401label(2):
7402	read_variable            y(1) 
7403	read_value               y(1) 
7404label(3):
7405	callf                    q / 0     Y[1] 
7406	move_chain               y(1)     a(1)     r / 1 
7407
7408------ Test head(20) -------
7409p([g(1), h(2)]) :-
7410	q.
7411
7412p / 1:
7413label(1):
7414	get_list                 a(1)     ref(5) 
7415	write_first_structure     g / 1 
7416label(2):
7417	write_integer            1 
7418	mode                     t(0)     ref(6) 
7419	write_list           
7420label(3):
7421	write_first_structure     h / 1 
7422label(4):
7423	write_integer            2 
7424	mode                     t(0)     ref(7) 
7425	write_nil            
7426	space                    -2 
7427	jmp                      q / 0 
7428label(5):
7429	read_structure           g / 1     ref(2) 
7430	read_integer             1 
7431	mode                     t(0) 
7432label(6):
7433	read_last_list           ref(3) 
7434	read_structure           h / 1     ref(4) 
7435	read_integer             2 
7436	mode                     t(0) 
7437label(7):
7438	read_nil             
7439	space                    -2 
7440	jmp                      q / 0 
7441
7442------ Test head(21) -------
7443p([[1, 2], [3|A], [4, 5], c]) :-
7444	q(A).
7445
7446p / 1:
7447label(1):
7448	get_list                 a(1)     ref(10) 
7449	write_first_list     
7450label(2):
7451	write_integer            1 
7452	write_list           
7453label(3):
7454	write_integer            2 
7455	write_nil            
7456	mode                     t(0)     ref(11) 
7457	write_list           
7458label(4):
7459	write_first_list     
7460label(5):
7461	write_integer            3 
7462	write_variable           a(1) 
7463	mode                     t(0)     ref(12) 
7464	write_list           
7465label(6):
7466	write_first_list     
7467label(7):
7468	write_integer            4 
7469	write_list           
7470label(8):
7471	write_integer            5 
7472	write_nil            
7473	mode                     t(0)     ref(13) 
7474	write_list           
7475label(9):
7476	write_atom               c 
7477	write_nil            
7478	space                    -3 
7479	jmp                      q / 1 
7480label(10):
7481	read_list                ref(2) 
7482	read_integer             1 
7483	read_last_list           ref(3) 
7484	read_integer             2 
7485	read_nil             
7486	mode                     t(0) 
7487label(11):
7488	read_last_list           ref(4) 
7489	read_list                ref(5) 
7490	read_integer             3 
7491	read_variable            a(1) 
7492	mode                     t(0) 
7493label(12):
7494	read_last_list           ref(6) 
7495	read_list                ref(7) 
7496	read_integer             4 
7497	read_last_list           ref(8) 
7498	read_integer             5 
7499	read_nil             
7500	mode                     t(0) 
7501label(13):
7502	read_last_list           ref(9) 
7503	read_atom                c 
7504	read_nil             
7505	space                    -3 
7506	jmp                      q / 1 
7507
7508------ Test head(22) -------
7509p([a, [1, 2], [3, 4], b, [5|A], c]) :-
7510	q(A).
7511
7512p / 1:
7513label(1):
7514	get_list                 a(1)     ref(12) 
7515	write_atom               a 
7516	write_list           
7517label(2):
7518	write_first_list     
7519label(3):
7520	write_integer            1 
7521	write_list           
7522label(4):
7523	write_integer            2 
7524	write_nil            
7525	mode                     t(0)     ref(13) 
7526	write_list           
7527label(5):
7528	write_first_list     
7529label(6):
7530	write_integer            3 
7531	write_list           
7532label(7):
7533	write_integer            4 
7534	write_nil            
7535	mode                     t(0)     ref(14) 
7536	write_list           
7537label(8):
7538	write_atom               b 
7539	write_list           
7540label(9):
7541	write_first_list     
7542label(10):
7543	write_integer            5 
7544	write_variable           a(1) 
7545	mode                     t(0)     ref(15) 
7546	write_list           
7547label(11):
7548	write_atom               c 
7549	write_nil            
7550	space                    -3 
7551	jmp                      q / 1 
7552label(12):
7553	read_atom                a 
7554	read_last_list           ref(2) 
7555	read_list                ref(3) 
7556	read_integer             1 
7557	read_last_list           ref(4) 
7558	read_integer             2 
7559	read_nil             
7560	mode                     t(0) 
7561label(13):
7562	read_last_list           ref(5) 
7563	read_list                ref(6) 
7564	read_integer             3 
7565	read_last_list           ref(7) 
7566	read_integer             4 
7567	read_nil             
7568	mode                     t(0) 
7569label(14):
7570	read_last_list           ref(8) 
7571	read_atom                b 
7572	read_last_list           ref(9) 
7573	read_list                ref(10) 
7574	read_integer             5 
7575	read_variable            a(1) 
7576	mode                     t(0) 
7577label(15):
7578	read_last_list           ref(11) 
7579	read_atom                c 
7580	read_nil             
7581	space                    -3 
7582	jmp                      q / 1 
7583
7584------ Test head(23) -------
7585p([a, [1, 2], [3, 4], b, [5|A]|c]) :-
7586	q(A).
7587
7588p / 1:
7589label(1):
7590	get_list                 a(1)     ref(11) 
7591	write_atom               a 
7592	write_list           
7593label(2):
7594	write_first_list     
7595label(3):
7596	write_integer            1 
7597	write_list           
7598label(4):
7599	write_integer            2 
7600	write_nil            
7601	mode                     t(0)     ref(12) 
7602	write_list           
7603label(5):
7604	write_first_list     
7605label(6):
7606	write_integer            3 
7607	write_list           
7608label(7):
7609	write_integer            4 
7610	write_nil            
7611	mode                     t(0)     ref(13) 
7612	write_list           
7613label(8):
7614	write_atom               b 
7615	write_list           
7616label(9):
7617	write_first_list     
7618label(10):
7619	write_integer            5 
7620	write_variable           a(1) 
7621	mode                     t(0)     ref(14) 
7622	write_atom               c 
7623	space                    -3 
7624	jmp                      q / 1 
7625label(11):
7626	read_atom                a 
7627	read_last_list           ref(2) 
7628	read_list                ref(3) 
7629	read_integer             1 
7630	read_last_list           ref(4) 
7631	read_integer             2 
7632	read_nil             
7633	mode                     t(0) 
7634label(12):
7635	read_last_list           ref(5) 
7636	read_list                ref(6) 
7637	read_integer             3 
7638	read_last_list           ref(7) 
7639	read_integer             4 
7640	read_nil             
7641	mode                     t(0) 
7642label(13):
7643	read_last_list           ref(8) 
7644	read_atom                b 
7645	read_last_list           ref(9) 
7646	read_list                ref(10) 
7647	read_integer             5 
7648	read_variable            a(1) 
7649	mode                     t(0) 
7650label(14):
7651	read_atom                c 
7652	space                    -3 
7653	jmp                      q / 1 
7654
7655------ Test head(24) -------
7656p([a, [1, 2], [3, 4], b, [5|A]]) :-
7657	q(A).
7658
7659p / 1:
7660label(1):
7661	get_list                 a(1)     ref(11) 
7662	write_atom               a 
7663	write_list           
7664label(2):
7665	write_first_list     
7666label(3):
7667	write_integer            1 
7668	write_list           
7669label(4):
7670	write_integer            2 
7671	write_nil            
7672	mode                     t(0)     ref(12) 
7673	write_list           
7674label(5):
7675	write_first_list     
7676label(6):
7677	write_integer            3 
7678	write_list           
7679label(7):
7680	write_integer            4 
7681	write_nil            
7682	mode                     t(0)     ref(13) 
7683	write_list           
7684label(8):
7685	write_atom               b 
7686	write_list           
7687label(9):
7688	write_first_list     
7689label(10):
7690	write_integer            5 
7691	write_variable           a(1) 
7692	mode                     t(0)     ref(14) 
7693	write_nil            
7694	space                    -3 
7695	jmp                      q / 1 
7696label(11):
7697	read_atom                a 
7698	read_last_list           ref(2) 
7699	read_list                ref(3) 
7700	read_integer             1 
7701	read_last_list           ref(4) 
7702	read_integer             2 
7703	read_nil             
7704	mode                     t(0) 
7705label(12):
7706	read_last_list           ref(5) 
7707	read_list                ref(6) 
7708	read_integer             3 
7709	read_last_list           ref(7) 
7710	read_integer             4 
7711	read_nil             
7712	mode                     t(0) 
7713label(13):
7714	read_last_list           ref(8) 
7715	read_atom                b 
7716	read_last_list           ref(9) 
7717	read_list                ref(10) 
7718	read_integer             5 
7719	read_variable            a(1) 
7720	mode                     t(0) 
7721label(14):
7722	read_nil             
7723	space                    -3 
7724	jmp                      q / 1 
7725
7726------ Test head(30) -------
7727p(f([1, 2], [3|A], c)) :-
7728	q(A).
7729
7730p / 1:
7731label(1):
7732	get_structure            a(1)     f / 3     ref(5) 
7733	write_first_list     
7734label(2):
7735	write_integer            1 
7736	write_list           
7737label(3):
7738	write_integer            2 
7739	write_nil            
7740	write_next_list          t(0)     ref(6) 
7741label(4):
7742	write_integer            3 
7743	write_variable           a(1) 
7744	mode                     t(0)     ref(7) 
7745	write_atom               c 
7746	space                    -1 
7747	jmp                      q / 1 
7748label(5):
7749	read_list                ref(2) 
7750	read_integer             1 
7751	read_last_list           ref(3) 
7752	read_integer             2 
7753	read_nil             
7754label(6):
7755	read_next_list           t(0)     ref(4) 
7756	read_integer             3 
7757	read_variable            a(1) 
7758	mode                     t(0) 
7759label(7):
7760	read_atom                c 
7761	space                    -1 
7762	jmp                      q / 1 
7763
7764------ Test head(31) -------
7765p(f(a, [1, 2], b, [3|A], c)) :-
7766	q(A).
7767
7768p / 1:
7769label(1):
7770	get_structure            a(1)     f / 5     ref(5) 
7771	write_atom               a 
7772	write_first_list     
7773label(2):
7774	write_integer            1 
7775	write_list           
7776label(3):
7777	write_integer            2 
7778	write_nil            
7779	mode                     t(0)     ref(6) 
7780	write_atom               b 
7781	write_next_list          t(0) 
7782label(4):
7783	write_integer            3 
7784	write_variable           a(1) 
7785	mode                     t(0)     ref(7) 
7786	write_atom               c 
7787	space                    -1 
7788	jmp                      q / 1 
7789label(5):
7790	read_atom                a 
7791	read_list                ref(2) 
7792	read_integer             1 
7793	read_last_list           ref(3) 
7794	read_integer             2 
7795	read_nil             
7796	mode                     t(0) 
7797label(6):
7798	read_atom                b 
7799	read_list                t(0)     ref(4) 
7800	read_integer             3 
7801	read_variable            a(1) 
7802	mode                     t(0) 
7803label(7):
7804	read_atom                c 
7805	space                    -1 
7806	jmp                      q / 1 
7807
7808------ Test head(32) -------
7809p(f(a, [1, 2], [3|A], c)) :-
7810	q(A).
7811
7812p / 1:
7813label(1):
7814	get_structure            a(1)     f / 4     ref(5) 
7815	write_atom               a 
7816	write_first_list     
7817label(2):
7818	write_integer            1 
7819	write_list           
7820label(3):
7821	write_integer            2 
7822	write_nil            
7823	write_next_list          t(0)     ref(6) 
7824label(4):
7825	write_integer            3 
7826	write_variable           a(1) 
7827	mode                     t(0)     ref(7) 
7828	write_atom               c 
7829	space                    -1 
7830	jmp                      q / 1 
7831label(5):
7832	read_atom                a 
7833	read_list                ref(2) 
7834	read_integer             1 
7835	read_last_list           ref(3) 
7836	read_integer             2 
7837	read_nil             
7838label(6):
7839	read_next_list           t(0)     ref(4) 
7840	read_integer             3 
7841	read_variable            a(1) 
7842	mode                     t(0) 
7843label(7):
7844	read_atom                c 
7845	space                    -1 
7846	jmp                      q / 1 
7847
7848------ Test head(33) -------
7849p(f(a, [1, 2], b, [3|A])) :-
7850	q(A).
7851
7852p / 1:
7853label(1):
7854	get_structure            a(1)     f / 4     ref(5) 
7855	write_atom               a 
7856	write_first_list     
7857label(2):
7858	write_integer            1 
7859	write_list           
7860label(3):
7861	write_integer            2 
7862	write_nil            
7863	mode                     t(0)     ref(6) 
7864	write_atom               b 
7865	write_list           
7866label(4):
7867	write_integer            3 
7868	write_variable           a(1) 
7869	space                    -1 
7870	jmp                      q / 1 
7871label(5):
7872	read_atom                a 
7873	read_list                ref(2) 
7874	read_integer             1 
7875	read_last_list           ref(3) 
7876	read_integer             2 
7877	read_nil             
7878	mode                     t(0) 
7879label(6):
7880	read_atom                b 
7881	read_last_list           ref(4) 
7882	read_integer             3 
7883	read_variable            a(1) 
7884	space                    -1 
7885	jmp                      q / 1 
7886
7887------ Test head(34) -------
7888p(f("hello", 3.5, 5_3)) :-
7889	q.
7890
7891p / 1:
7892label(1):
7893	get_structure            a(1)     f / 3     ref(2) 
7894	write_string             "hello" 
7895	write_constant           3.5 
7896	write_constant           5_3 
7897	jmp                      q / 0 
7898label(2):
7899	read_string              "hello" 
7900	read_constant            3.5 
7901	read_constant            5_3 
7902	jmp                      q / 0 
7903
7904------ Test head(40) -------
7905p([A, B, C, D, E]).
7906
7907p / 1:
7908label(1):
7909	get_list                 a(1)     ref(6) 
7910	write_void           
7911	write_list           
7912label(2):
7913	write_void           
7914	write_list           
7915label(3):
7916	write_void           
7917	write_list           
7918label(4):
7919	write_void           
7920	write_list           
7921label(5):
7922	write_void           
7923	write_nil            
7924	ret                  
7925label(6):
7926	read_void            
7927	read_last_list           ref(2) 
7928	read_void            
7929	read_last_list           ref(3) 
7930	read_void            
7931	read_last_list           ref(4) 
7932	read_void            
7933	read_last_list           ref(5) 
7934	read_void            
7935	read_nil             
7936	ret                  
7937
7938------ Test head(41) -------
7939p(f(A, B, C, D, E)).
7940
7941p / 1:
7942label(1):
7943	get_structure            a(1)     f / 5     ref(2) 
7944	write_void               5 
7945label(2):
7946	ret                  
7947
7948------ Test head(42) -------
7949p(f(A, s(B, C), D, E)).
7950
7951p / 1:
7952label(1):
7953	get_structure            a(1)     f / 4     ref(3) 
7954	write_void           
7955	write_first_structure     s / 2 
7956label(2):
7957	write_void               2 
7958	mode                     t(0)     ref(4) 
7959	write_void               2 
7960	space                    -1 
7961	ret                  
7962label(3):
7963	read_void            
7964	read_structure           s / 2     ref(2) 
7965	mode                     t(0) 
7966	space                    -1 
7967	ret                  
7968label(4):
7969	space                    -1 
7970	ret                  
7971
7972------ Test match(1) -------
7973p(1, 2.3, 3_4, a, "s", []) ?-
7974	true.
7975
7976p / 6:
7977label(1):
7978	in_get_integer           a(1)     1 
7979	in_get_constant          a(2)     2.3 
7980	in_get_constant          a(3)     3_4 
7981	in_get_atom              a(4)     a 
7982	in_get_string            a(5)     "s" 
7983	in_get_nil               a(6) 
7984	ret                  
7985
7986------ Test match(2) -------
7987p(A, B, C, D, D) ?-
7988	q(A),
7989	r(B).
7990
7991p / 5:
7992label(1):
7993	get_matched_value        a(5)     a(4) 
7994	get_variable             1     a(2)     y(1) 
7995	callf                    q / 1     Y[1] 
7996	move_chain               y(1)     a(1)     r / 1 
7997
7998------ Test match(3) -------
7999p(A, A, B, B) ?-
8000	q(A),
8001	r(B).
8002
8003p / 4:
8004label(1):
8005	get_matched_value        a(2)     a(1) 
8006	get_matched_value        a(4)     a(3) 
8007	get_variable             1     a(3)     y(1) 
8008	callf                    q / 1     Y[1] 
8009	move_chain               y(1)     a(1)     r / 1 
8010
8011------ Test match(4) -------
8012p(foo(bar(1), A, baz(2))) ?-
8013	true.
8014
8015p / 1:
8016label(1):
8017	in_get_structure         a(1)     foo / 3     ref(2) 
8018label(2):
8019	read_structure           bar / 1     ref(fail) 
8020	read_test_var        
8021	read_integer             1 
8022	mode                     t(0) 
8023label(3):
8024	read_void            
8025	read_last_structure      baz / 1     ref(fail) 
8026	read_test_var        
8027	read_integer             2 
8028	space                    -1 
8029	ret                  
8030
8031------ Test match(5) -------
8032p([1, 2, [3, 4]]) ?-
8033	true.
8034
8035p / 1:
8036label(1):
8037	in_get_list              a(1)     ref(2) 
8038label(2):
8039	read_test_var        
8040	read_integer             1 
8041	read_last_list           ref(fail) 
8042	read_test_var        
8043	read_integer             2 
8044	read_last_list           ref(fail) 
8045	read_list                ref(fail) 
8046	read_test_var        
8047	read_integer             3 
8048	read_last_list           ref(fail) 
8049	read_test_var        
8050	read_integer             4 
8051	read_test_var        
8052	read_nil             
8053	mode                     t(0) 
8054label(3):
8055	read_test_var        
8056	read_nil             
8057	space                    -1 
8058	ret                  
8059
8060------ Test match(6) -------
8061p(foo(A, A)) ?-
8062	true.
8063
8064p / 1:
8065label(1):
8066	in_get_structure         a(1)     foo / 2     ref(2) 
8067label(2):
8068	read_variable            a(1) 
8069	read_matched_value       a(1) 
8070	ret                  
8071
8072------ Test match(7) -------
8073p(foo(A, A, B, B)) ?-
8074	q(A),
8075	r(B).
8076
8077p / 1:
8078label(1):
8079	allocate                 1 
8080	in_get_structure         a(1)     foo / 4     ref(2) 
8081label(2):
8082	read_variable            a(1) 
8083	read_matched_value       a(1) 
8084	read_variable            y(1) 
8085	read_matched_value       y(1) 
8086	callf                    q / 1     Y[1] 
8087	move_chain               y(1)     a(1)     r / 1 
8088
8089------ Test match(8) -------
8090p(A, foo(A, B), B) ?-
8091	true.
8092
8093p / 3:
8094label(1):
8095	in_get_structure         a(2)     foo / 2     ref(2) 
8096label(2):
8097	read_matched_value       a(1) 
8098	read_matched_value       a(3) 
8099	ret                  
8100
8101------ Test match(9) -------
8102p(A, foo(A, B), B) ?-
8103	p(A),
8104	r(B).
8105
8106p / 3:
8107label(1):
8108	in_get_structure         a(2)     foo / 2     ref(2) 
8109label(2):
8110	read_matched_value       a(1) 
8111	read_matched_value       a(3) 
8112	get_variable             1     a(3)     y(1) 
8113	callf                    p / 1     Y[1] 
8114	move_chain               y(1)     a(1)     r / 1 
8115
8116------ Test match(10) -------
8117p(A) ?-
8118	p(A, B).
8119
8120p / 1:
8121label(1):
8122	in_get_meta              a(1)     ref(fail) 
8123	read_void            
8124	read_attribute           suspend 
8125	read_variable            a(2) 
8126	jmp                      p / 2 
8127
8128------ Test match(11) -------
8129p(A) ?-
8130	p(a, A, B).
8131
8132p / 1:
8133label(1):
8134	in_get_meta              a(1)     ref(fail) 
8135	read_void            
8136	read_attribute           suspend 
8137	read_variable            a(3) 
8138	move                     a(1)     a(2) 
8139	put_atom                 a(1)     a 
8140	jmp                      p / 3 
8141
8142------ Test match(12) -------
8143p(A, A) ?-
8144	p(a, b, A, B).
8145
8146p / 2:
8147label(1):
8148	in_get_meta              a(1)     ref(fail) 
8149	read_void            
8150	read_attribute           suspend 
8151	read_variable            a(4) 
8152	get_matched_value        a(2)     a(1) 
8153	move                     a(1)     a(3) 
8154	put_atom                 a(1)     a 
8155	put_atom                 a(2)     b 
8156	jmp                      p / 4 
8157
8158------ Test match(13) -------
8159p(A) ?-
8160	q,
8161	p(A, B).
8162
8163p / 1:
8164label(1):
8165	allocate                 2 
8166	in_get_meta              a(1)     ref(fail) 
8167	read_void            
8168	read_attribute           suspend 
8169	read_variable            y(2) 
8170	move                     a(1)     y(1) 
8171	callf                    q / 0     Y[1,2] 
8172	move                     2     y(1)     a(1) 
8173	chain                    p / 2 
8174
8175------ Test match(14) -------
8176p(A, A) ?-
8177	q,
8178	p(A, B).
8179
8180p / 2:
8181label(1):
8182	allocate                 2 
8183	in_get_meta              a(1)     ref(fail) 
8184	read_void            
8185	read_attribute           suspend 
8186	read_variable            y(2) 
8187	get_matched_value        a(2)     a(1) 
8188	move                     a(1)     y(1) 
8189	callf                    q / 0     Y[1,2] 
8190	move                     2     y(1)     a(1) 
8191	chain                    ref(1) 
8192
8193------ Test match(20) -------
8194p(f(A)) ?-
8195	p(A, B).
8196
8197p / 1:
8198label(1):
8199	in_get_structure         a(1)     f / 1     ref(2) 
8200label(2):
8201	match_last_meta      
8202	read_variable            a(1) 
8203	read_attribute           suspend 
8204	read_variable            a(2) 
8205	jmp                      p / 2 
8206
8207------ Test match(21) -------
8208p(f(a, A)) ?-
8209	p(A, B).
8210
8211p / 1:
8212label(1):
8213	in_get_structure         a(1)     f / 2     ref(2) 
8214label(2):
8215	read_test_var        
8216	read_atom                a 
8217	match_last_meta      
8218	read_variable            a(1) 
8219	read_attribute           suspend 
8220	read_variable            a(2) 
8221	jmp                      p / 2 
8222
8223------ Test match(22) -------
8224p(f(a, A, c)) ?-
8225	p(A, B).
8226
8227p / 1:
8228label(1):
8229	in_get_structure         a(1)     f / 3     ref(2) 
8230label(2):
8231	read_test_var        
8232	read_atom                a 
8233	match_meta           
8234	read_variable            a(1) 
8235	read_attribute           suspend 
8236	read_variable            a(2) 
8237	mode                     t(0) 
8238label(3):
8239	read_test_var        
8240	read_atom                c 
8241	space                    -1 
8242	jmp                      p / 2 
8243
8244------ Test match(23) -------
8245p(f(bar(baz), A, c)) ?-
8246	p(A, B).
8247
8248p / 1:
8249label(1):
8250	in_get_structure         a(1)     f / 3     ref(2) 
8251label(2):
8252	read_structure           bar / 1     ref(fail) 
8253	read_test_var        
8254	read_atom                baz 
8255	match_next_meta          t(0) 
8256	read_variable            a(1) 
8257	read_attribute           suspend 
8258	read_variable            a(2) 
8259	mode                     t(0) 
8260label(3):
8261	read_test_var        
8262	read_atom                c 
8263	space                    -1 
8264	jmp                      p / 2 
8265
8266------ Test match(24) -------
8267p(f(A, A)) ?-
8268	p(A, B).
8269
8270p / 1:
8271label(1):
8272	in_get_structure         a(1)     f / 2     ref(2) 
8273label(2):
8274	match_meta           
8275	read_variable            a(1) 
8276	read_attribute           suspend 
8277	read_variable            a(2) 
8278	mode                     t(0) 
8279label(3):
8280	match_last_meta      
8281	read_matched_value       a(1) 
8282	read_attribute           suspend 
8283	read_matched_value       a(2) 
8284	space                    -1 
8285	jmp                      p / 2 
8286
8287------ Test match(25) -------
8288p(f(bar(baz), a, A, c)) ?-
8289	p(A, B).
8290
8291p / 1:
8292label(1):
8293	in_get_structure         a(1)     f / 4     ref(2) 
8294label(2):
8295	read_structure           bar / 1     ref(fail) 
8296	read_test_var        
8297	read_atom                baz 
8298	mode                     t(0) 
8299label(3):
8300	read_test_var        
8301	read_atom                a 
8302	match_meta               t(0) 
8303	read_variable            a(1) 
8304	read_attribute           suspend 
8305	read_variable            a(2) 
8306	mode                     t(0) 
8307label(4):
8308	read_test_var        
8309	read_atom                c 
8310	space                    -1 
8311	jmp                      p / 2 
8312
8313------ Test match(26) -------
8314p(f(A, bar(baz), c)) ?-
8315	p(A, B).
8316
8317p / 1:
8318label(1):
8319	in_get_structure         a(1)     f / 3     ref(2) 
8320label(2):
8321	match_meta           
8322	read_variable            a(1) 
8323	read_attribute           suspend 
8324	read_variable            a(2) 
8325label(3):
8326	read_next_structure      bar / 1     t(0)     ref(fail) 
8327	read_test_var        
8328	read_atom                baz 
8329	mode                     t(0) 
8330label(4):
8331	read_test_var        
8332	read_atom                c 
8333	space                    -1 
8334	jmp                      p / 2 
8335
8336------ Test match(30) -------
8337p(A) ?-
8338	p(A, B).
8339p(A) :-
8340	integer(A),
8341	q(A).
8342
8343INDEXES for (semidet) disjunction [2]
83441. Quality 1.0
8345    [] - []
8346    [var] - []
8347    [var, meta] - [1]
8348    [integer] - [2]
8349    [bignum] - [2]
8350Branch determinisms for disjunction [2]
8351    Branch 1: det
8352    Branch 2: det
8353p / 1:
8354label(1):
8355	switch_on_type           a(1) 
8356		meta: 	ref(7)
8357		[]: 	ref(fail)
8358		atom: 	ref(fail)
8359		bignum: 	ref(8)
8360		breal: 	ref(fail)
8361		double: 	ref(fail)
8362		goal: 	ref(fail)
8363		handle: 	ref(fail)
8364		integer: 	ref(8)
8365		list: 	ref(fail)
8366		rational: 	ref(fail)
8367		string: 	ref(fail)
8368		structure: 	ref(fail)
8369
8370	branch                   ref(fail) 
8371label(3):
8372	in_get_meta              a(1)     ref(fail) 
8373label(7):
8374	read_void            
8375	read_attribute           suspend 
8376	read_variable            a(2) 
8377	jmp                      p / 2 
8378label(5):
8379	bi_integer               a(1) 
8380label(8):
8381	jmp                      q / 1 
8382
8383------ Test match(31) -------
8384p(A) ?-
8385	!,
8386	p(A, B).
8387p(A) :-
8388	q(A).
8389
8390INDEXES for (nondet) disjunction [2]
83911. Quality 1.5
8392    [] - [2]
8393    [var] - [2]
8394    [var, meta] - [1, 2]
8395Branch determinisms for disjunction [2]
8396    Branch 1: try
8397    Branch 2: trust
8398p / 1:
8399label(1):
8400	savecut                  a(2) 
8401	switch_on_type           a(1) 
8402		meta: 	ref(2)
8403		[]: 	ref(5)
8404		atom: 	ref(5)
8405		bignum: 	ref(5)
8406		breal: 	ref(5)
8407		double: 	ref(5)
8408		goal: 	ref(5)
8409		handle: 	ref(5)
8410		integer: 	ref(5)
8411		list: 	ref(5)
8412		rational: 	ref(5)
8413		string: 	ref(5)
8414		structure: 	ref(5)
8415
8416	branch                   ref(5) 
8417label(2):
8418	try_me_else              0     2     ref(4) 
8419label(3):
8420	in_get_meta              a(1)     ref(fail) 
8421	read_void            
8422	read_attribute           suspend 
8423	move                     a(2)     a(3) 
8424	read_variable            a(2) 
8425	cut                      a(3) 
8426	jmp                      p / 2 
8427label(4):
8428	trust_me                 0 
8429label(5):
8430	jmp                      q / 1 
8431
8432------ Test match(32) -------
8433p(A) ?-
8434	p(A, B).
8435p(A) :-
8436	free(A),
8437	q(A).
8438
8439INDEXES for (semidet) disjunction [2]
84401. Quality 1.0
8441    [] - []
8442    [var] - []
8443    [var, free] - [2]
8444    [var, meta] - [1]
8445Branch determinisms for disjunction [2]
8446    Branch 1: det
8447    Branch 2: det
8448p / 1:
8449label(1):
8450	switch_on_type           a(1) 
8451		meta: 	ref(8)
8452		[]: 	ref(fail)
8453		atom: 	ref(fail)
8454		bignum: 	ref(fail)
8455		breal: 	ref(fail)
8456		double: 	ref(fail)
8457		goal: 	ref(fail)
8458		handle: 	ref(fail)
8459		integer: 	ref(fail)
8460		list: 	ref(fail)
8461		rational: 	ref(fail)
8462		string: 	ref(fail)
8463		structure: 	ref(fail)
8464
8465	branch                   ref(7) 
8466label(5):
8467	bi_free                  a(1) 
8468label(7):
8469	jmp                      q / 1 
8470label(3):
8471	in_get_meta              a(1)     ref(fail) 
8472label(8):
8473	read_void            
8474	read_attribute           suspend 
8475	read_variable            a(2) 
8476	jmp                      p / 2 
8477
8478------ Test match(33) -------
8479p(A) ?-
8480	p(A, B).
8481p(A) :-
8482	meta(A),
8483	q(A).
8484
8485INDEXES for (nondet) disjunction [2]
84861. Quality 2.0
8487    [] - []
8488    [var] - []
8489    [var, meta] - [1, 2]
8490Branch determinisms for disjunction [2]
8491    Branch 1: try
8492    Branch 2: trust
8493p / 1:
8494label(1):
8495	try_me_else              0     1     ref(3) 
8496label(2):
8497	in_get_meta              a(1)     ref(fail) 
8498	read_void            
8499	read_attribute           suspend 
8500	read_variable            a(2) 
8501	jmp                      p / 2 
8502label(3):
8503	trust_me                 0 
8504label(4):
8505	bi_meta                  a(1) 
8506	jmp                      q / 1 
8507
8508------ Test match(34) -------
8509p(A) :-
8510	free(A),
8511	q(A).
8512p(A) ?-
8513	p(A, B).
8514
8515INDEXES for (semidet) disjunction [2]
85161. Quality 1.0
8517    [] - []
8518    [var] - []
8519    [var, free] - [1]
8520    [var, meta] - [2]
8521Branch determinisms for disjunction [2]
8522    Branch 1: det
8523    Branch 2: det
8524p / 1:
8525label(1):
8526	switch_on_type           a(1) 
8527		meta: 	ref(8)
8528		[]: 	ref(fail)
8529		atom: 	ref(fail)
8530		bignum: 	ref(fail)
8531		breal: 	ref(fail)
8532		double: 	ref(fail)
8533		goal: 	ref(fail)
8534		handle: 	ref(fail)
8535		integer: 	ref(fail)
8536		list: 	ref(fail)
8537		rational: 	ref(fail)
8538		string: 	ref(fail)
8539		structure: 	ref(fail)
8540
8541	branch                   ref(7) 
8542label(3):
8543	bi_free                  a(1) 
8544label(7):
8545	jmp                      q / 1 
8546label(5):
8547	in_get_meta              a(1)     ref(fail) 
8548label(8):
8549	read_void            
8550	read_attribute           suspend 
8551	read_variable            a(2) 
8552	jmp                      p / 2 
8553
8554------ Test match(40) -------
8555p([A, B, C, D, E]) ?-
8556	true.
8557
8558p / 1:
8559label(1):
8560	in_get_list              a(1)     ref(2) 
8561label(2):
8562	read_void            
8563	read_last_list           ref(fail) 
8564	read_void            
8565	read_last_list           ref(fail) 
8566	read_void            
8567	read_last_list           ref(fail) 
8568	read_void            
8569	read_last_list           ref(fail) 
8570	read_void            
8571	read_test_var        
8572	read_nil             
8573	ret                  
8574
8575------ Test match(41) -------
8576p(f(A, B, C, D, E)) ?-
8577	true.
8578
8579p / 1:
8580label(1):
8581	in_get_structure         a(1)     f / 5     ref(2) 
8582label(2):
8583	ret                  
8584
8585------ Test match(42) -------
8586p(f(A, s(B, C), D, E)) ?-
8587	true.
8588
8589p / 1:
8590label(1):
8591	in_get_structure         a(1)     f / 4     ref(2) 
8592label(2):
8593	read_void            
8594	read_structure           s / 2     ref(fail) 
8595	mode                     t(0) 
8596	space                    -1 
8597	ret                  
8598
8599------ Test unify(1) -------
8600p(A, B, C) :-
8601	q,
8602	A = f(1, g(B, D), E, h(C, B)),
8603	r(C, D),
8604	s(E).
8605
8606p / 3:
8607label(1):
8608	get_variable             4     a(1)     y(2) 
8609	move                     2     a(2)     y(3) 
8610	callf                    q / 0     Y[2,3,4] 
8611	move                     y(2)     a(3) 
8612	get_structure            a(3)     f / 4     ref(4) 
8613	write_integer            1 
8614	write_first_structure     g / 2 
8615label(2):
8616	write_value              y(3) 
8617	write_variable           a(2) 
8618	mode                     t(0)     ref(5) 
8619	write_variable           y(1) 
8620	write_structure          h / 2 
8621label(3):
8622	write_value              y(4) 
8623	write_value              y(3) 
8624	branch                   ref(6) 
8625label(4):
8626	read_integer             1 
8627	read_structure           g / 2     ref(2) 
8628	read_value               y(3) 
8629	read_variable            a(2) 
8630	mode                     t(0) 
8631label(5):
8632	read_variable            y(1) 
8633	read_last_structure      h / 2     ref(3) 
8634	read_value               y(4) 
8635	read_value               y(3) 
8636label(6):
8637	space                    -1 
8638	move_callf               y(4)     a(1)     r / 2     Y[1] 
8639	move_chain               y(1)     a(1)     s / 1 
8640
8641------ Test dis(1) -------
8642p :-
8643	(
8644	    a
8645	;
8646	    (
8647		b
8648	    ;
8649		(
8650		    c
8651		;
8652		    d
8653		)
8654	    )
8655	).
8656
8657p / 0:
8658label(1):
8659	try_me_else              0     0     ref(3) 
8660label(2):
8661	jmp                      a / 0 
8662label(3):
8663	retry_me_else            0     ref(5) 
8664label(4):
8665	jmp                      b / 0 
8666label(5):
8667	retry_me_else            0     ref(7) 
8668label(6):
8669	jmp                      c / 0 
8670label(7):
8671	trust_me                 0 
8672label(8):
8673	jmp                      d / 0 
8674
8675------ Test dis(2) -------
8676p :-
8677	(
8678	    (
8679		(
8680		    a
8681		;
8682		    b
8683		)
8684	    ;
8685		c
8686	    )
8687	;
8688	    d
8689	).
8690
8691p / 0:
8692label(1):
8693	try_me_else              0     0     ref(3) 
8694label(2):
8695	jmp                      a / 0 
8696label(3):
8697	retry_me_else            0     ref(5) 
8698label(4):
8699	jmp                      b / 0 
8700label(5):
8701	retry_me_else            0     ref(7) 
8702label(6):
8703	jmp                      c / 0 
8704label(7):
8705	trust_me                 0 
8706label(8):
8707	jmp                      d / 0 
8708
8709------ Test dis(3) -------
8710p :-
8711	(
8712	    a
8713	;
8714	    (
8715		(
8716		    b
8717		;
8718		    c
8719		)
8720	    ;
8721		d
8722	    )
8723	).
8724
8725p / 0:
8726label(1):
8727	try_me_else              0     0     ref(3) 
8728label(2):
8729	jmp                      a / 0 
8730label(3):
8731	retry_me_else            0     ref(5) 
8732label(4):
8733	jmp                      b / 0 
8734label(5):
8735	retry_me_else            0     ref(7) 
8736label(6):
8737	jmp                      c / 0 
8738label(7):
8739	trust_me                 0 
8740label(8):
8741	jmp                      d / 0 
8742
8743------ Test dis(4) -------
8744p :-
8745	(
8746	    a
8747	->
8748	    aa
8749	;
8750	    b
8751	).
8752
8753p / 0:
8754label(1):
8755	allocate                 1 
8756	savecut                  y(1) 
8757	try_me_else              0     0     ref(3) 
8758label(2):
8759	callf                    a / 0     Y[1] 
8760	cut                      y(1)     0 
8761	chain                    aa / 0 
8762label(3):
8763	trust_me_inline          0     Y[] 
8764label(4):
8765	chain                    b / 0 
8766
8767------ Test dis(5) -------
8768p :-
8769	q,
8770	(
8771	    a
8772	->
8773	    aa
8774	;
8775	    b
8776	).
8777
8778p / 0:
8779label(1):
8780	allocate                 1 
8781	callf                    q / 0     Y[] 
8782	savecut                  y(1) 
8783	try_me_else              0     0     ref(3) 
8784label(2):
8785	callf                    a / 0     Y[1] 
8786	cut                      y(1)     0 
8787	chain                    aa / 0 
8788label(3):
8789	trust_me_inline          0     Y[] 
8790label(4):
8791	chain                    b / 0 
8792
8793------ Test dis(6) -------
8794p :-
8795	(
8796	    a
8797	->
8798	    aa
8799	;
8800	    (
8801		b
8802	    ->
8803		bb
8804	    ;
8805		(
8806		    c
8807		->
8808		    cc
8809		;
8810		    d
8811		)
8812	    )
8813	).
8814
8815p / 0:
8816label(1):
8817	allocate                 1 
8818	savecut                  y(1) 
8819	try_me_else              0     0     ref(3) 
8820label(2):
8821	callf                    a / 0     Y[1] 
8822	cut                      y(1)     0 
8823	chain                    aa / 0 
8824label(3):
8825	retry_me_inline          0     ref(5)     Y[1] 
8826label(4):
8827	callf                    b / 0     Y[1] 
8828	cut                      y(1)     0 
8829	chain                    bb / 0 
8830label(5):
8831	retry_me_inline          0     ref(7)     Y[1] 
8832label(6):
8833	callf                    c / 0     Y[1] 
8834	cut                      y(1)     0 
8835	chain                    cc / 0 
8836label(7):
8837	trust_me_inline          0     Y[] 
8838label(8):
8839	chain                    d / 0 
8840
8841------ Test dis(7) -------
8842p :-
8843	(
8844	    a
8845	->
8846	    aa
8847	;
8848	    (
8849		b
8850	    ->
8851		bb
8852	    ;
8853		(
8854		    c
8855		->
8856		    cc
8857		;
8858		    (
8859			d
8860		    ->
8861			dd
8862		    )
8863		)
8864	    )
8865	).
8866
8867p / 0:
8868label(1):
8869	allocate                 2 
8870	savecut                  y(1) 
8871	try_me_else              0     0     ref(3) 
8872label(2):
8873	callf                    a / 0     Y[1] 
8874	cut                      y(1)     0 
8875	chain                    aa / 0 
8876label(3):
8877	retry_me_inline          0     ref(5)     Y[1] 
8878label(4):
8879	callf                    b / 0     Y[1] 
8880	cut                      y(1)     0 
8881	chain                    bb / 0 
8882label(5):
8883	retry_me_inline          0     ref(7)     Y[1] 
8884label(6):
8885	callf                    c / 0     Y[1] 
8886	cut                      y(1)     0 
8887	chain                    cc / 0 
8888label(7):
8889	trust_me_inline          0     Y[] 
8890label(8):
8891	savecut                  y(2) 
8892	callf                    d / 0     Y[2] 
8893	cut                      y(2)     0 
8894	chain                    dd / 0 
8895
8896------ Test dis(8) -------
8897p :-
8898	(
8899	    a
8900	;
8901	    (
8902		b
8903	    ->
8904		bb
8905	    ;
8906		(
8907		    c
8908		->
8909		    cc
8910		;
8911		    d
8912		)
8913	    )
8914	).
8915
8916p / 0:
8917label(1):
8918	allocate                 1 
8919	savecut                  y(1) 
8920	try_me_else              0     0     ref(3) 
8921label(2):
8922	chain                    a / 0 
8923label(3):
8924	retry_me_inline          0     ref(5)     Y[1] 
8925label(4):
8926	callf                    b / 0     Y[1] 
8927	cut                      y(1)     0 
8928	chain                    bb / 0 
8929label(5):
8930	retry_me_inline          0     ref(7)     Y[1] 
8931label(6):
8932	callf                    c / 0     Y[1] 
8933	cut                      y(1)     0 
8934	chain                    cc / 0 
8935label(7):
8936	trust_me_inline          0     Y[] 
8937label(8):
8938	chain                    d / 0 
8939
8940------ Test dis(9) -------
8941p :-
8942	(
8943	    a
8944	->
8945	    aa
8946	;
8947	    (
8948		b
8949	    ;
8950		(
8951		    c
8952		->
8953		    cc
8954		;
8955		    d
8956		)
8957	    )
8958	).
8959
8960p / 0:
8961label(1):
8962	allocate                 1 
8963	savecut                  y(1) 
8964	try_me_else              0     0     ref(3) 
8965label(2):
8966	callf                    a / 0     Y[1] 
8967	cut                      y(1)     0 
8968	chain                    aa / 0 
8969label(3):
8970	retry_me_inline          0     ref(5)     Y[1] 
8971label(4):
8972	chain                    b / 0 
8973label(5):
8974	retry_me_inline          0     ref(7)     Y[1] 
8975label(6):
8976	callf                    c / 0     Y[1] 
8977	cut                      y(1)     0 
8978	chain                    cc / 0 
8979label(7):
8980	trust_me_inline          0     Y[] 
8981label(8):
8982	chain                    d / 0 
8983
8984------ Test dis(10) -------
8985p :-
8986	(
8987	    a
8988	->
8989	    aa
8990	;
8991	    (
8992		b
8993	    ->
8994		bb
8995	    ;
8996		(
8997		    c
8998		;
8999		    d
9000		)
9001	    )
9002	).
9003
9004p / 0:
9005label(1):
9006	allocate                 1 
9007	savecut                  y(1) 
9008	try_me_else              0     0     ref(3) 
9009label(2):
9010	callf                    a / 0     Y[1] 
9011	cut                      y(1)     0 
9012	chain                    aa / 0 
9013label(3):
9014	retry_me_inline          0     ref(5)     Y[1] 
9015label(4):
9016	callf                    b / 0     Y[1] 
9017	cut                      y(1)     0 
9018	chain                    bb / 0 
9019label(5):
9020	retry_me_inline          0     ref(7)     Y[] 
9021label(6):
9022	chain                    c / 0 
9023label(7):
9024	trust_me_inline          0     Y[] 
9025label(8):
9026	chain                    d / 0 
9027
9028------ Test dis(11) -------
9029p :-
9030	(
9031	    a
9032	->
9033	    aa
9034	;
9035	    (
9036		(
9037		    b
9038		->
9039		    bb
9040		;
9041		    c
9042		)
9043	    ;
9044		d
9045	    )
9046	).
9047
9048p / 0:
9049label(1):
9050	allocate                 2 
9051	savecut                  y(1) 
9052	try_me_else              0     0     ref(3) 
9053label(2):
9054	callf                    a / 0     Y[1] 
9055	cut                      y(1)     0 
9056	chain                    aa / 0 
9057label(3):
9058	retry_me_inline          0     ref(8)     Y[] 
9059label(4):
9060	savecut                  y(2) 
9061	try_me_else              0     0     ref(6) 
9062label(5):
9063	callf                    b / 0     Y[2] 
9064	cut                      y(2)     0 
9065	chain                    bb / 0 
9066label(6):
9067	trust_me_inline          0     Y[] 
9068label(7):
9069	chain                    c / 0 
9070label(8):
9071	trust_me_inline          0     Y[] 
9072label(9):
9073	chain                    d / 0 
9074
9075------ Test dis(12) -------
9076p :-
9077	(
9078	    \+ a
9079	->
9080	    b
9081	;
9082	    c
9083	).
9084
9085p / 0:
9086label(1):
9087	allocate                 2 
9088	savecut                  y(1) 
9089	try_me_else              0     0     ref(6) 
9090label(2):
9091	savecut                  y(2) 
9092	try_me_else              0     0     ref(4) 
9093label(3):
9094	callf                    a / 0     Y[1,2] 
9095	cut                      y(2)     1 
9096	failure              
9097label(4):
9098	trust_me_inline          0     Y[1] 
9099label(5):
9100	cut                      y(1)     0 
9101	chain                    b / 0 
9102label(6):
9103	trust_me_inline          0     Y[] 
9104label(7):
9105	chain                    c / 0 
9106
9107------ Test clause(1) -------
9108p :-
9109	a.
9110p :-
9111	b.
9112
9113p / 0:
9114label(1):
9115	try_me_else              0     0     ref(3) 
9116label(2):
9117	jmp                      a / 0 
9118label(3):
9119	trust_me                 0 
9120label(4):
9121	jmp                      b / 0 
9122
9123------ Test clause(2) -------
9124p :-
9125	a.
9126p :-
9127	b.
9128p :-
9129	c,
9130	d.
9131
9132p / 0:
9133label(1):
9134	try_me_else              0     0     ref(3) 
9135label(2):
9136	jmp                      a / 0 
9137label(3):
9138	retry_me_else            0     ref(5) 
9139label(4):
9140	jmp                      b / 0 
9141label(5):
9142	trust_me                 0 
9143label(6):
9144	allocate                 0 
9145	callf                    c / 0     Y[] 
9146	chain                    d / 0 
9147
9148------ Test clause(3) -------
9149p :-
9150	(
9151	    a
9152	->
9153	    aa
9154	).
9155p :-
9156	b.
9157
9158p / 0:
9159label(1):
9160	try_me_else              0     0     ref(3) 
9161label(2):
9162	allocate                 1 
9163	savecut                  y(1) 
9164	callf                    a / 0     Y[1] 
9165	cut                      y(1)     0 
9166	chain                    aa / 0 
9167label(3):
9168	trust_me                 0 
9169label(4):
9170	jmp                      b / 0 
9171
9172------ Test special(1) -------
9173p(A) :-
9174	A.
9175
9176p / 1:
9177label(1):
9178	put_module               a(2)     eclipse 
9179	jmp                      sepia_kernel : call_ / 2 
9180
9181------ Test special(2) -------
9182p(A) :-
9183	call(A).
9184
9185p / 1:
9186label(1):
9187	put_module               a(2)     eclipse 
9188	jmp                      sepia_kernel : call_ / 2 
9189
9190------ Test special(3) -------
9191p(A, B) :-
9192	A @ B.
9193
9194p / 2:
9195label(1):
9196	jmp                      sepia_kernel : call_ / 2 
9197
9198------ Test special(4) -------
9199p(A) :-
9200	A @ lists.
9201
9202p / 1:
9203label(1):
9204	put_atom                 a(2)     lists 
9205	jmp                      sepia_kernel : call_ / 2 
9206
9207------ Test special(5) -------
9208p(A, B) :-
9209	B : A.
9210
9211p / 2:
9212label(1):
9213	put_module               a(3)     eclipse 
9214	swap                     a(1)     a(2) 
9215	jmp                      sepia_kernel : '[]:@' / 3 
9216
9217------ Test special(6) -------
9218p(A) :-
9219	lists : A.
9220
9221p / 1:
9222label(1):
9223	move                     a(1)     a(2) 
9224	put_atom                 a(1)     lists 
9225	put_module               a(3)     eclipse 
9226	jmp                      sepia_kernel : '[]:@' / 3 
9227
9228------ Test special(7) -------
9229p :-
9230	3 = 3.
9231
9232p / 0:
9233label(1):
9234	ret                  
9235
9236------ Test special(8) -------
9237p :-
9238	3 = 4.
9239
9240p / 0:
9241label(1):
9242	failure              
9243
9244------ Test special(9) -------
9245p :-
9246	call(q).
9247
9248p / 0:
9249label(1):
9250	put_atom                 a(1)     q 
9251	put_module               a(2)     eclipse 
9252	jmp                      sepia_kernel : call_ / 2 
9253
9254------ Test special(10) -------
9255p :-
9256	q,
9257	call((a, !, b)),
9258	r.
9259
9260p / 0:
9261label(1):
9262	allocate                 0 
9263	callf                    q / 0     Y[] 
9264	put_structure            a(1)     (',') / 2 
9265	write_atom               a 
9266	push_structure           3 
9267	write_didatom            (',') / 2     ! 
9268	write_atom               b 
9269	put_module               a(2)     eclipse 
9270	callf                    sepia_kernel : call_ / 2     Y[] 
9271	chain                    r / 0 
9272
9273------ Test special(11) -------
9274p(A) :-
9275	call(q) @ A.
9276
9277p / 1:
9278label(1):
9279	move                     a(1)     a(2) 
9280	put_atom                 a(1)     q 
9281	jmp                      sepia_kernel : call_ / 2 
9282
9283------ Test special(12) -------
9284p :-
9285	call(q) @ lists.
9286
9287p / 0:
9288label(1):
9289	put_atom                 a(1)     q 
9290	put_atom                 a(2)     lists 
9291	jmp                      sepia_kernel : call_ / 2 
9292
9293------ Test special(13) -------
9294p :-
9295	call(writeln(hello)) @ lists.
9296
9297p / 0:
9298label(1):
9299	put_structure            a(1)     writeln / 1 
9300	write_atom               hello 
9301	put_atom                 a(2)     lists 
9302	jmp                      sepia_kernel : call_ / 2 
9303
9304------ Test special(13) -------
9305p :-
9306	writeln(hello) @ lists.
9307
9308p / 0:
9309label(1):
9310	put_atom                 a(1)     hello 
9311	put_atom                 a(2)     lists 
9312	jmp                      sepia_kernel : writeln_body / 2 
9313
9314------ Test special(14) -------
9315p :-
9316	(writeln(hello), nl) @ lists.
9317
9318p / 0:
9319label(1):
9320	put_atom                 a(1)     hello 
9321	put_atom                 a(2)     lists 
9322	allocate                 0 
9323	callf                    sepia_kernel : writeln_body / 2     Y[] 
9324	chain                    lists : nl / 0 
9325
9326------ Test tool(1) -------
9327p(A) :-
9328	get_flag(p / 0, definition_module, A).
9329
9330p / 1:
9331label(1):
9332	move                     a(1)     a(3) 
9333	put_structure            a(1)     (/) / 2 
9334	write_atom               p 
9335	push_integer             0 
9336	put_atom                 a(2)     definition_module 
9337	put_module               a(4)     eclipse 
9338	jmp                      sepia_kernel : get_flag_body / 4 
9339
9340------ Test tool(2) -------
9341p(A) :-
9342	get_flag(p / 0, definition_module, A) @ lists.
9343
9344p / 1:
9345label(1):
9346	move                     a(1)     a(3) 
9347	put_structure            a(1)     (/) / 2 
9348	write_atom               p 
9349	push_integer             0 
9350	put_atom                 a(2)     definition_module 
9351	put_atom                 a(4)     lists 
9352	jmp                      sepia_kernel : get_flag_body / 4 
9353
9354------ Test tool(3) -------
9355p(A, B) :-
9356	get_flag(p / 0, definition_module, B) @ A.
9357
9358p / 2:
9359label(1):
9360	move                     a(1)     a(4) 
9361	put_structure            a(1)     (/) / 2 
9362	write_atom               p 
9363	push_integer             0 
9364	move                     a(2)     a(3) 
9365	put_atom                 a(2)     definition_module 
9366	jmp                      sepia_kernel : get_flag_body / 4 
9367
9368------ Test tool(4) -------
9369p :-
9370	q @ lists.
9371
9372p / 0:
9373label(1):
9374	jmp                      q / 0 
9375
9376------ Test tool(5) -------
9377p(A) :-
9378	q @ A.
9379
9380p / 1:
9381label(1):
9382	jmp                      q / 0 
9383
9384------ Test cut(1) -------
9385p :-
9386	!.
9387
9388p / 0:
9389label(1):
9390	ret                  
9391
9392------ Test cut(2) -------
9393p :-
9394	q,
9395	!.
9396
9397p / 0:
9398label(1):
9399	allocate                 1 
9400	savecut                  y(1) 
9401	callf                    q / 0     Y[1] 
9402	cut                      y(1)     0 
9403	exit                 
9404
9405------ Test cut(3) -------
9406p :-
9407	q,
9408	!,
9409	r.
9410
9411p / 0:
9412label(1):
9413	allocate                 1 
9414	savecut                  y(1) 
9415	callf                    q / 0     Y[1] 
9416	cut                      y(1)     0 
9417	chain                    r / 0 
9418
9419------ Test cut(4) -------
9420p :-
9421	q,
9422	!,
9423	r.
9424p :-
9425	s.
9426
9427p / 0:
9428label(1):
9429	allocate                 1 
9430	savecut                  y(1) 
9431	try_me_else              0     0     ref(3) 
9432label(2):
9433	callf                    q / 0     Y[1] 
9434	cut                      y(1)     0 
9435	chain                    r / 0 
9436label(3):
9437	trust_me_inline          0     Y[] 
9438label(4):
9439	chain                    s / 0 
9440
9441------ Test cut(5) -------
9442p :-
9443	a.
9444p :-
9445	!,
9446	bb.
9447p :-
9448	c,
9449	d.
9450
9451p / 0:
9452label(1):
9453	savecut                  a(1) 
9454	try_me_else              0     1     ref(3) 
9455label(2):
9456	jmp                      a / 0 
9457label(3):
9458	retry_me_else            0     ref(5) 
9459label(4):
9460	cut                      a(1) 
9461	jmp                      bb / 0 
9462label(5):
9463	trust_me                 0 
9464label(6):
9465	allocate                 0 
9466	callf                    c / 0     Y[] 
9467	chain                    d / 0 
9468
9469------ Test cut(6) -------
9470p :-
9471	a.
9472p :-
9473	b,
9474	!,
9475	bb.
9476p :-
9477	c,
9478	d.
9479
9480p / 0:
9481label(1):
9482	allocate                 1 
9483	savecut                  y(1) 
9484	try_me_else              0     0     ref(3) 
9485label(2):
9486	chain                    a / 0 
9487label(3):
9488	retry_me_inline          0     ref(5)     Y[1] 
9489label(4):
9490	callf                    b / 0     Y[1] 
9491	cut                      y(1)     0 
9492	chain                    bb / 0 
9493label(5):
9494	trust_me_inline          0     Y[] 
9495label(6):
9496	callf                    c / 0     Y[] 
9497	chain                    d / 0 
9498
9499------ Test cut_to(1) -------
9500p(A) :-
9501	q,
9502	sepia_kernel : cut_to(A).
9503
9504p / 1:
9505label(1):
9506	get_variable             1     a(1)     y(1) 
9507	callf                    q / 0     Y[1] 
9508	move                     y(1)     a(1) 
9509	cut                      a(1) 
9510	exit                 
9511
9512------ Test cut_to(2) -------
9513p(A) :-
9514	q,
9515	nonvar(A),
9516	sepia_kernel : cut_to(A).
9517
9518p / 1:
9519label(1):
9520	get_variable             1     a(1)     y(1) 
9521	callf                    q / 0     Y[1] 
9522	move                     y(1)     a(1) 
9523	bi_nonvar                a(1) 
9524	cut                      a(1) 
9525	exit                 
9526
9527------ Test cut_to(3) -------
9528p(A) :-
9529	nonvar(A),
9530	sepia_kernel : cut_to(A).
9531
9532p / 1:
9533label(1):
9534	bi_nonvar                a(1) 
9535	cut                      a(1) 
9536	ret                  
9537
9538------ Test cut_to(4) -------
9539p(A) :-
9540	sepia_kernel : cut_to(A).
9541
9542p / 1:
9543label(1):
9544	cut                      a(1) 
9545	ret                  
9546
9547------ Test env(1) -------
9548p :-
9549	q(A, B, C, D, E, F, G),
9550	r(H, I, J, K, L, M, N),
9551	q(A, B, C, D, E, F, G),
9552	r(H, I, J, K, L, M, N).
9553
9554p / 0:
9555label(1):
9556	allocate                 14 
9557	put_global_variable2     a(1)     y(8)     a(2)     y(9) 
9558	put_global_variable2     a(3)     y(10)     a(4)     y(11) 
9559	put_global_variable2     a(5)     y(12)     a(6)     y(13) 
9560	put_global_variable_callf     a(7)     y(14)     q / 7     Y[8,9,10,11,12,13,14] 
9561	put_global_variable2     a(1)     y(1)     a(2)     y(2) 
9562	put_global_variable2     a(3)     y(3)     a(4)     y(4) 
9563	put_global_variable2     a(5)     y(5)     a(6)     y(6) 
9564	put_global_variable_callf     a(7)     y(7)     r / 7     Y[1,2,3,4,5,6,7,8,9,10,11,12,13,14] 
9565	move                     7     y(8)     a(1) 
9566	callf                    q / 7     Y[1,2,3,4,5,6,7] 
9567	move                     7     y(1)     a(1) 
9568	chain                    r / 7 
9569
9570------ Test env(2) -------
9571p :-
9572	q(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T),
9573	r(U, V, W, X, Y, Z, A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, N1),
9574	s(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T),
9575	t(U, V, W, X, Y, Z, A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, N1).
9576
9577p / 0:
9578label(1):
9579	allocate                 40 
9580	put_global_variable2     a(1)     y(21)     a(2)     y(22) 
9581	put_global_variable2     a(3)     y(23)     a(4)     y(24) 
9582	put_global_variable2     a(5)     y(25)     a(6)     y(26) 
9583	put_global_variable2     a(7)     y(27)     a(8)     y(28) 
9584	put_global_variable2     a(9)     y(29)     a(10)     y(30) 
9585	put_global_variable2     a(11)     y(31)     a(12)     y(32) 
9586	put_global_variable2     a(13)     y(33)     a(14)     y(34) 
9587	put_global_variable2     a(15)     y(35)     a(16)     y(36) 
9588	put_global_variable2     a(17)     y(37)     a(18)     y(38) 
9589	put_global_variable2     a(19)     y(39)     a(20)     y(40) 
9590	callf                    q / 20     Y[21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40] 
9591	put_global_variable2     a(1)     y(1)     a(2)     y(2) 
9592	put_global_variable2     a(3)     y(3)     a(4)     y(4) 
9593	put_global_variable2     a(5)     y(5)     a(6)     y(6) 
9594	put_global_variable2     a(7)     y(7)     a(8)     y(8) 
9595	put_global_variable2     a(9)     y(9)     a(10)     y(10) 
9596	put_global_variable2     a(11)     y(11)     a(12)     y(12) 
9597	put_global_variable2     a(13)     y(13)     a(14)     y(14) 
9598	put_global_variable2     a(15)     y(15)     a(16)     y(16) 
9599	put_global_variable2     a(17)     y(17)     a(18)     y(18) 
9600	put_global_variable2     a(19)     y(19)     a(20)     y(20) 
9601	callf                    r / 20     Y[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40] 
9602	move                     20     y(21)     a(1) 
9603	callf                    s / 20     Y[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
9604	move                     20     y(1)     a(1) 
9605	chain                    t / 20 
9606
9607------ Test env(3) -------
9608p(A, B, C) :-
9609	a,
9610	b(A),
9611	c(B),
9612	d(C),
9613	e.
9614
9615p / 3:
9616label(1):
9617	get_variable             3     a(1)     y(3) 
9618	move                     a(2)     y(2)     a(3)     y(1) 
9619	callf                    a / 0     Y[1,2,3] 
9620	move_callf               y(3)     a(1)     b / 1     Y[1,2] 
9621	move_callf               y(2)     a(1)     c / 1     Y[1] 
9622	move_callf               y(1)     a(1)     d / 1     Y[] 
9623	chain                    e / 0 
9624
9625------ Test env(4) -------
9626p(A, B, C) :-
9627	a,
9628	b(A),
9629	c(C),
9630	d(B),
9631	e.
9632
9633p / 3:
9634label(1):
9635	get_variable             3     a(1)     y(3) 
9636	move                     2     a(2)     y(1) 
9637	callf                    a / 0     Y[1,2,3] 
9638	move_callf               y(3)     a(1)     b / 1     Y[1,2] 
9639	move_callf               y(2)     a(1)     c / 1     Y[1] 
9640	move_callf               y(1)     a(1)     d / 1     Y[] 
9641	chain                    e / 0 
9642
9643------ Test env(5) -------
9644p(A, B, C, D) :-
9645	t,
9646	a(A),
9647	e.
9648p(A, B, C, D) :-
9649	t,
9650	b(B),
9651	e.
9652p(A, B, C, D) :-
9653	t,
9654	c(C),
9655	d(D),
9656	e.
9657p(A, B, C, D) :-
9658	t,
9659	a(A),
9660	e.
9661
9662p / 4:
9663label(1):
9664	get_variable             4     a(1)     y(1) 
9665	move                     3     a(2)     y(2) 
9666	try_me_else              0     0     ref(3) 
9667label(2):
9668	callf                    t / 0     Y[1] 
9669	move_callf               y(1)     a(1)     a / 1     Y[] 
9670	chain                    e / 0 
9671label(3):
9672	retry_me_inline          0     ref(5)     Y[1,2,3,4] 
9673label(4):
9674	callf                    t / 0     Y[2] 
9675	move_callf               y(2)     a(1)     b / 1     Y[] 
9676	chain                    e / 0 
9677label(5):
9678	retry_me_inline          0     ref(7)     Y[1,3,4] 
9679label(6):
9680	callf                    t / 0     Y[3,4] 
9681	move_callf               y(3)     a(1)     c / 1     Y[4] 
9682	move_callf               y(4)     a(1)     d / 1     Y[] 
9683	chain                    e / 0 
9684label(7):
9685	trust_me_inline          0     Y[1] 
9686label(8):
9687	callf                    t / 0     Y[1] 
9688	move_callf               y(1)     a(1)     a / 1     Y[] 
9689	chain                    e / 0 
9690
9691------ Test env(6) -------
9692p(a, A, B, C, D) :-
9693	t,
9694	a(A),
9695	e.
9696p(a, A, B, C, D) :-
9697	t,
9698	b(B),
9699	e.
9700p(b, A, B, C, D) :-
9701	t,
9702	c(C),
9703	d(D),
9704	e.
9705p(a, A, B, C, D) :-
9706	t,
9707	a(A),
9708	e.
9709
9710INDEXES for (nondet) disjunction [2]
97111. Quality 2.7
9712    [] - []
9713    [atom] - []
9714    [atom, a] - [1, 2, 4]
9715    [atom, b] - [3]
9716    [var] - [1, 2, 3, 4]
9717Branch determinisms for disjunction [2]
9718    Branch 1: try
9719    Branch 2: retry
9720    Branch 3: retry
9721    Branch 4: trust
9722p / 5:
9723label(1):
9724	get_variable             4     a(2)     y(1) 
9725	move                     3     a(3)     y(2) 
9726	atom_switch              a(1) 
9727		a: 	ref(12)
9728		b: 	ref(13)
9729		default: 	ref(fail)
9730
9731label(3):
9732	try_me_else              0     1     ref(5) 
9733label(4):
9734	get_atom                 a(1)     a 
9735	callf                    t / 0     Y[1] 
9736	move_callf               y(1)     a(1)     a / 1     Y[] 
9737	chain                    e / 0 
9738label(5):
9739	retry_me_inline          0     ref(7)     Y[1,2,3,4] 
9740label(6):
9741	get_atom                 a(1)     a 
9742	callf                    t / 0     Y[2] 
9743	move_callf               y(2)     a(1)     b / 1     Y[] 
9744	chain                    e / 0 
9745label(7):
9746	retry_me_inline          0     ref(9)     Y[1,3,4] 
9747label(8):
9748	get_atom                 a(1)     b 
9749label(13):
9750	callf                    t / 0     Y[3,4] 
9751	move_callf               y(3)     a(1)     c / 1     Y[4] 
9752	move_callf               y(4)     a(1)     d / 1     Y[] 
9753	chain                    e / 0 
9754label(9):
9755	trust_me_inline          0     Y[1] 
9756label(10):
9757	get_atom                 a(1)     a 
9758	callf                    t / 0     Y[1] 
9759	move_callf               y(1)     a(1)     a / 1     Y[] 
9760	chain                    e / 0 
9761label(12):
9762	try                      0     1     ref(4) 
9763	retry_inline             0     ref(6)     Y[1,2] 
9764	trust_inline             0     ref(10)     Y[1] 
9765
9766------ Test env(7) -------
9767p(a, A, B, C, D) :-
9768	t,
9769	a(A),
9770	e.
9771p(a, A, B, C, D) :-
9772	t,
9773	b(B),
9774	e.
9775p(a, A, B, C, D) :-
9776	t,
9777	c(C),
9778	d(D),
9779	e.
9780p(b, A, B, C, D) :-
9781	t,
9782	a(A),
9783	e.
9784
9785INDEXES for (nondet) disjunction [2]
97861. Quality 2.7
9787    [] - []
9788    [atom] - []
9789    [atom, a] - [1, 2, 3]
9790    [atom, b] - [4]
9791    [var] - [1, 2, 3, 4]
9792Branch determinisms for disjunction [2]
9793    Branch 1: try
9794    Branch 2: retry
9795    Branch 3: retry
9796    Branch 4: trust
9797p / 5:
9798label(1):
9799	get_variable             4     a(2)     y(1) 
9800	move                     3     a(3)     y(2) 
9801	atom_switch              a(1) 
9802		a: 	ref(12)
9803		b: 	ref(13)
9804		default: 	ref(fail)
9805
9806label(3):
9807	try_me_else              0     1     ref(5) 
9808label(4):
9809	get_atom                 a(1)     a 
9810	callf                    t / 0     Y[1] 
9811	move_callf               y(1)     a(1)     a / 1     Y[] 
9812	chain                    e / 0 
9813label(5):
9814	retry_me_inline          0     ref(7)     Y[1,2,3,4] 
9815label(6):
9816	get_atom                 a(1)     a 
9817	callf                    t / 0     Y[2] 
9818	move_callf               y(2)     a(1)     b / 1     Y[] 
9819	chain                    e / 0 
9820label(7):
9821	retry_me_inline          0     ref(9)     Y[1,3,4] 
9822label(8):
9823	get_atom                 a(1)     a 
9824	callf                    t / 0     Y[3,4] 
9825	move_callf               y(3)     a(1)     c / 1     Y[4] 
9826	move_callf               y(4)     a(1)     d / 1     Y[] 
9827	chain                    e / 0 
9828label(9):
9829	trust_me_inline          0     Y[1] 
9830label(10):
9831	get_atom                 a(1)     b 
9832label(13):
9833	callf                    t / 0     Y[1] 
9834	move_callf               y(1)     a(1)     a / 1     Y[] 
9835	chain                    e / 0 
9836label(12):
9837	try                      0     1     ref(4) 
9838	retry_inline             0     ref(6)     Y[2,3,4] 
9839	trust_inline             0     ref(8)     Y[3,4] 
9840
9841------ Test env(8) -------
9842p(a, A, B, C, D) :-
9843	t,
9844	a(A),
9845	e.
9846p(b, A, B, C, D) :-
9847	t,
9848	b(B),
9849	e.
9850p(a, A, B, C, D) :-
9851	t,
9852	c(C),
9853	d(D),
9854	e.
9855p(b, A, B, C, D) :-
9856	t,
9857	a(A),
9858	e.
9859
9860INDEXES for (nondet) disjunction [2]
98611. Quality 2.7
9862    [] - []
9863    [atom] - []
9864    [atom, a] - [1, 3]
9865    [atom, b] - [2, 4]
9866    [var] - [1, 2, 3, 4]
9867Branch determinisms for disjunction [2]
9868    Branch 1: try
9869    Branch 2: retry
9870    Branch 3: retry
9871    Branch 4: trust
9872p / 5:
9873label(1):
9874	get_variable             4     a(2)     y(1) 
9875	move                     3     a(3)     y(2) 
9876	atom_switch              a(1) 
9877		a: 	ref(12)
9878		b: 	ref(13)
9879		default: 	ref(fail)
9880
9881label(3):
9882	try_me_else              0     1     ref(5) 
9883label(4):
9884	get_atom                 a(1)     a 
9885	callf                    t / 0     Y[1] 
9886	move_callf               y(1)     a(1)     a / 1     Y[] 
9887	chain                    e / 0 
9888label(5):
9889	retry_me_inline          0     ref(7)     Y[1,2,3,4] 
9890label(6):
9891	get_atom                 a(1)     b 
9892	callf                    t / 0     Y[2] 
9893	move_callf               y(2)     a(1)     b / 1     Y[] 
9894	chain                    e / 0 
9895label(7):
9896	retry_me_inline          0     ref(9)     Y[1,3,4] 
9897label(8):
9898	get_atom                 a(1)     a 
9899	callf                    t / 0     Y[3,4] 
9900	move_callf               y(3)     a(1)     c / 1     Y[4] 
9901	move_callf               y(4)     a(1)     d / 1     Y[] 
9902	chain                    e / 0 
9903label(9):
9904	trust_me_inline          0     Y[1] 
9905label(10):
9906	get_atom                 a(1)     b 
9907	callf                    t / 0     Y[1] 
9908	move_callf               y(1)     a(1)     a / 1     Y[] 
9909	chain                    e / 0 
9910label(12):
9911	try                      0     1     ref(4) 
9912	trust_inline             0     ref(8)     Y[3,4] 
9913label(13):
9914	try                      0     1     ref(6) 
9915	trust_inline             0     ref(10)     Y[1] 
9916
9917------ Test env(20) -------
9918p(A) :-
9919	p,
9920	q(A).
9921
9922p / 1:
9923label(1):
9924	get_variable             1     a(1)     y(1) 
9925	callf                    p / 0     Y[1] 
9926	move_chain               y(1)     a(1)     q / 1 
9927
9928------ Test env(21) -------
9929p(A) :-
9930	p,
9931	q(A),
9932	atom(a).
9933
9934p / 1:
9935label(1):
9936	get_variable             1     a(1)     y(1) 
9937	callf                    p / 0     Y[1] 
9938	move_callf               y(1)     a(1)     q / 1     Y[] 
9939	put_atom                 a(1)     a 
9940	bi_atom                  a(1) 
9941	exit                 
9942
9943------ Test env(22) -------
9944p(A) :-
9945	p,
9946	q(A),
9947	atom(A).
9948
9949p / 1:
9950label(1):
9951	get_variable             1     a(1)     y(1) 
9952	callf                    p / 0     Y[1] 
9953	move_callf               y(1)     a(1)     q / 1     Y[1] 
9954	move                     y(1)     a(1) 
9955	bi_atom                  a(1) 
9956	exit                 
9957
9958------ Test env(23) -------
9959p(A) :-
9960	q(A).
9961
9962p / 1:
9963label(1):
9964	jmp                      q / 1 
9965
9966------ Test env(24) -------
9967p(A) :-
9968	q(A),
9969	atom(a).
9970
9971p / 1:
9972label(1):
9973	allocate                 0 
9974	callf                    q / 1     Y[] 
9975	put_atom                 a(1)     a 
9976	bi_atom                  a(1) 
9977	exit                 
9978
9979------ Test env(25) -------
9980p(A) :-
9981	q(A),
9982	atom(A).
9983
9984p / 1:
9985label(1):
9986	get_variable             1     a(1)     y(1) 
9987	callf                    q / 1     Y[1] 
9988	move                     y(1)     a(1) 
9989	bi_atom                  a(1) 
9990	exit                 
9991
9992------ Test env(26) -------
9993p(A) :-
9994	(
9995	    atom(A)
9996	;
9997	    number(A)
9998	),
9999	integer(A).
10000
10001INDEXES for (semidet) disjunction [2]
100021. Quality 0.7
10003    [] - []
10004    [[]] - [1]
10005    [atom] - [1]
10006    [rational] - [2]
10007    [integer] - [2]
10008    [breal] - [2]
10009    [bignum] - [2]
10010    [double] - [2]
10011Branch determinisms for disjunction [2]
10012    Branch 1: det
10013    Branch 2: det
10014p / 1:
10015label(1):
10016	switch_on_type           a(1) 
10017		meta: 	ref(fail)
10018		[]: 	ref(7)
10019		atom: 	ref(7)
10020		bignum: 	ref(8)
10021		breal: 	ref(8)
10022		double: 	ref(8)
10023		goal: 	ref(fail)
10024		handle: 	ref(fail)
10025		integer: 	ref(8)
10026		list: 	ref(fail)
10027		rational: 	ref(8)
10028		string: 	ref(fail)
10029		structure: 	ref(fail)
10030
10031	branch                   ref(fail) 
10032label(3):
10033	bi_atom                  a(1) 
10034label(7):
10035	get_variable             1     a(1)     y(1) 
10036	branch                   ref(6) 
10037label(5):
10038	bi_number                a(1) 
10039label(8):
10040	get_variable             1     a(1)     y(1) 
10041label(6):
10042	move                     y(1)     a(1) 
10043	bi_integer               a(1) 
10044	exit                 
10045
10046------ Test env(27) -------
10047p(A) :-
10048	p,
10049	q(A),
10050	!.
10051
10052p / 1:
10053label(1):
10054	allocate                 2 
10055	savecut                  y(1) 
10056	move                     a(1)     y(2) 
10057	callf                    p / 0     Y[1,2] 
10058	move_callf               y(2)     a(1)     q / 1     Y[1] 
10059	cut                      y(1)     0 
10060	exit                 
10061
10062------ Test env(28) -------
10063p(A) :-
10064	p,
10065	q(A),
10066	!,
10067	atom(a).
10068
10069p / 1:
10070label(1):
10071	allocate                 2 
10072	savecut                  y(1) 
10073	move                     a(1)     y(2) 
10074	callf                    p / 0     Y[1,2] 
10075	move_callf               y(2)     a(1)     q / 1     Y[1] 
10076	cut                      y(1)     0 
10077	put_atom                 a(1)     a 
10078	bi_atom                  a(1) 
10079	exit                 
10080
10081------ Test env(29) -------
10082p(A) :-
10083	p,
10084	q(A),
10085	!,
10086	atom(A).
10087
10088p / 1:
10089label(1):
10090	allocate                 2 
10091	savecut                  y(2) 
10092	move                     a(1)     y(1) 
10093	callf                    p / 0     Y[1,2] 
10094	move_callf               y(1)     a(1)     q / 1     Y[1,2] 
10095	cut                      y(2)     1 
10096	move                     y(1)     a(1) 
10097	bi_atom                  a(1) 
10098	exit                 
10099
10100------ Test env(30) -------
10101p(A) :-
10102	p,
10103	q(A),
10104	atom(a),
10105	!.
10106
10107p / 1:
10108label(1):
10109	allocate                 2 
10110	savecut                  y(1) 
10111	move                     a(1)     y(2) 
10112	callf                    p / 0     Y[1,2] 
10113	move_callf               y(2)     a(1)     q / 1     Y[1] 
10114	put_atom                 a(1)     a 
10115	bi_atom                  a(1) 
10116	cut                      y(1)     0 
10117	exit                 
10118
10119------ Test env(31) -------
10120p(A) :-
10121	p,
10122	q(A),
10123	atom(A),
10124	!.
10125
10126p / 1:
10127label(1):
10128	allocate                 2 
10129	savecut                  y(2) 
10130	move                     a(1)     y(1) 
10131	callf                    p / 0     Y[1,2] 
10132	move_callf               y(1)     a(1)     q / 1     Y[1,2] 
10133	move                     y(1)     a(1) 
10134	bi_atom                  a(1) 
10135	cut                      y(2)     0 
10136	exit                 
10137
10138------ Test env(32) -------
10139p(A) :-
10140	p(A),
10141	q(A),
10142	atom(a),
10143	(
10144	    var(B)
10145	->
10146	    integer(3)
10147	;
10148	    atom(b)
10149	).
10150
10151p / 1:
10152label(1):
10153	get_variable             1     a(1)     y(1) 
10154	callf                    ref(1)     Y[1] 
10155	move_callf               y(1)     a(1)     q / 1     Y[] 
10156	put_atom                 a(2)     a 
10157	bi_atom                  a(2) 
10158	savecut                  a(1) 
10159	try_me_else              0     1     ref(3) 
10160label(2):
10161	put_variable             a(2) 
10162	bi_var                   a(2) 
10163	cut                      a(1)     0 
10164	put_integer              a(1)     3 
10165	bi_integer               a(1) 
10166	exit                 
10167label(3):
10168	trust_me_inline          0     Y[] 
10169label(4):
10170	put_atom                 a(1)     b 
10171	bi_atom                  a(1) 
10172	exit                 
10173
10174------ Test true(1) -------
10175p.
10176
10177p / 0:
10178label(1):
10179	ret                  
10180
10181------ Test true(2) -------
10182p :-
10183	true,
10184	true,
10185	true.
10186
10187p / 0:
10188label(1):
10189	ret                  
10190
10191------ Test true(3) -------
10192p :-
10193	true,
10194	a,
10195	true,
10196	b,
10197	true.
10198
10199p / 0:
10200label(1):
10201	allocate                 0 
10202	callf                    a / 0     Y[] 
10203	chain                    b / 0 
10204
10205------ Test true(4) -------
10206p :-
10207	a,
10208	true,
10209	true,
10210	true,
10211	b,
10212	true,
10213	true,
10214	true.
10215
10216p / 0:
10217label(1):
10218	allocate                 0 
10219	callf                    a / 0     Y[] 
10220	chain                    b / 0 
10221
10222------ Test true(5) -------
10223p :-
10224	a,
10225	true,
10226	var(A),
10227	b.
10228
10229p / 0:
10230label(1):
10231	allocate                 0 
10232	callf                    a / 0     Y[] 
10233	callf                    true / 0     Y[] 
10234	put_variable             a(1) 
10235	bi_var                   a(1) 
10236	chain                    b / 0 
10237
10238------ Test true(6) -------
10239p :-
10240	a,
10241	true,
10242	!,
10243	b.
10244p.
10245
10246p / 0:
10247label(1):
10248	allocate                 1 
10249	savecut                  y(1) 
10250	try_me_else              0     0     ref(3) 
10251label(2):
10252	callf                    a / 0     Y[1] 
10253	callf                    true / 0     Y[1] 
10254	cut                      y(1)     0 
10255	chain                    b / 0 
10256label(3):
10257	trust_me_inline          0     Y[] 
10258label(4):
10259	exit                 
10260
10261------ Test true(7) -------
10262p :-
10263	true,
10264	!,
10265	b.
10266p.
10267
10268p / 0:
10269label(1):
10270	savecut                  a(1) 
10271	try_me_else              0     1     ref(3) 
10272label(2):
10273	get_variable             1     a(1)     y(1) 
10274	callf                    true / 0     Y[1] 
10275	cut                      y(1)     0 
10276	chain                    b / 0 
10277label(3):
10278	trust_me                 0 
10279label(4):
10280	ret                  
10281
10282------ Test true(8) -------
10283p :-
10284	true,
10285	true,
10286	!.
10287p.
10288
10289p / 0:
10290label(1):
10291	savecut                  a(1) 
10292	try_me_else              0     1     ref(3) 
10293label(2):
10294	get_variable             1     a(1)     y(1) 
10295	callf                    true / 0     Y[1] 
10296	cut                      y(1)     0 
10297	deallocate           
10298	branch                   ref(4) 
10299label(3):
10300	trust_me                 0 
10301label(4):
10302	ret                  
10303
10304------ Test true(9) -------
10305p :-
10306	(
10307	    var(A),
10308	    true
10309	->
10310	    true
10311	;
10312	    true
10313	),
10314	p.
10315
10316p / 0:
10317label(1):
10318	savecut                  a(1) 
10319	try_me_else              0     1     ref(3) 
10320label(2):
10321	put_variable             a(2) 
10322	bi_var                   a(2) 
10323	get_variable             1     a(1)     y(1) 
10324	callf                    true / 0     Y[1] 
10325	cut                      y(1)     0 
10326	chain                    ref(1) 
10327label(3):
10328	trust_me                 0 
10329label(4):
10330	jmp                      ref(1) 
10331
10332------ Test true(10) -------
10333p :-
10334	q,
10335	(
10336	    true
10337	->
10338	    r
10339	;
10340	    s
10341	).
10342
10343p / 0:
10344label(1):
10345	allocate                 1 
10346	callf                    q / 0     Y[] 
10347	savecut                  a(1) 
10348	try_me_else              0     1     ref(3) 
10349label(2):
10350	move                     a(1)     y(1) 
10351	callf                    true / 0     Y[1] 
10352	cut                      y(1)     0 
10353	chain                    r / 0 
10354label(3):
10355	trust_me_inline          0     Y[] 
10356label(4):
10357	chain                    s / 0 
10358
10359------ Test true(11) -------
10360p(A) :-
10361	true,
10362	q(A).
10363
10364p / 1:
10365label(1):
10366	jmp                      q / 1 
10367
10368------ Test true(12) -------
10369p(A) :-
10370	q(A),
10371	true.
10372
10373p / 1:
10374label(1):
10375	jmp                      q / 1 
10376
10377------ Test true(13) -------
10378p :-
10379	(
10380	    true
10381	;
10382	    true
10383	),
10384	(
10385	    true
10386	;
10387	    true
10388	).
10389
10390p / 0:
10391label(1):
10392	try_me_else              0     0     ref(3) 
10393label(2):
10394	allocate                 0 
10395label(5):
10396	try_me_else              0     0     ref(7) 
10397label(6):
10398	exit                 
10399label(3):
10400	trust_me                 0 
10401label(4):
10402	allocate                 0 
10403	branch                   ref(5) 
10404label(7):
10405	trust_me_inline          0     Y[] 
10406label(8):
10407	exit                 
10408
10409------ Test true(14) -------
10410p :-
10411	a,
10412	(
10413	    true
10414	;
10415	    true
10416	).
10417
10418p / 0:
10419label(1):
10420	allocate                 0 
10421	callf                    a / 0     Y[] 
10422	try_me_else              0     0     ref(3) 
10423label(2):
10424	exit                 
10425label(3):
10426	trust_me_inline          0     Y[] 
10427label(4):
10428	exit                 
10429
10430------ Test true(15) -------
10431p :-
10432	true,
10433	sepia_kernel : var(A),
10434	b.
10435
10436p / 0:
10437label(1):
10438	allocate                 0 
10439	callf                    true / 0     Y[] 
10440	put_variable             a(1) 
10441	bi_var                   a(1) 
10442	chain                    b / 0 
10443
10444------ Test true(16) -------
10445p :-
10446	true,
10447	A : var(B),
10448	b.
10449
10450p / 0:
10451label(1):
10452	put_variable             a(1) 
10453	put_structure            a(2)     var / 1 
10454	push_void            
10455	put_module               a(3)     eclipse 
10456	allocate                 0 
10457	callf                    sepia_kernel : '[]:@' / 3     Y[] 
10458	chain                    b / 0 
10459
10460------ Test true(17) -------
10461p :-
10462	true,
10463	sepia_kernel : nl,
10464	b.
10465
10466p / 0:
10467label(1):
10468	allocate                 0 
10469	callf                    sepia_kernel : nl / 0     Y[] 
10470	chain                    b / 0 
10471
10472------ Test true(18) -------
10473p :-
10474	true,
10475	(
10476	    a
10477	;
10478	    b
10479	).
10480
10481p / 0:
10482label(1):
10483	allocate                 0 
10484	callf                    true / 0     Y[] 
10485	try_me_else              0     0     ref(3) 
10486label(2):
10487	chain                    a / 0 
10488label(3):
10489	trust_me_inline          0     Y[] 
10490label(4):
10491	chain                    b / 0 
10492
10493------ Test true(19) -------
10494p :-
10495	true,
10496	(
10497	    a
10498	->
10499	    b
10500	).
10501
10502p / 0:
10503label(1):
10504	allocate                 1 
10505	callf                    true / 0     Y[] 
10506	savecut                  y(1) 
10507	callf                    a / 0     Y[1] 
10508	cut                      y(1)     0 
10509	chain                    b / 0 
10510
10511------ Test true(20) -------
10512p :-
10513	true,
10514	(
10515	    a
10516	->
10517	    b
10518	;
10519	    c
10520	).
10521
10522p / 0:
10523label(1):
10524	allocate                 1 
10525	callf                    true / 0     Y[] 
10526	savecut                  y(1) 
10527	try_me_else              0     0     ref(3) 
10528label(2):
10529	callf                    a / 0     Y[1] 
10530	cut                      y(1)     0 
10531	chain                    b / 0 
10532label(3):
10533	trust_me_inline          0     Y[] 
10534label(4):
10535	chain                    c / 0 
10536
10537------ Test true(21) -------
10538p :-
10539	true,
10540	once a.
10541
10542p / 0:
10543label(1):
10544	allocate                 1 
10545	callf                    true / 0     Y[] 
10546	savecut                  y(1) 
10547	callf                    a / 0     Y[1] 
10548	cut                      y(1)     0 
10549	exit                 
10550
10551------ Test true(22) -------
10552p :-
10553	true,
10554	\+ a.
10555
10556p / 0:
10557label(1):
10558	allocate                 1 
10559	callf                    true / 0     Y[] 
10560	savecut                  y(1) 
10561	try_me_else              0     0     ref(3) 
10562label(2):
10563	callf                    a / 0     Y[1] 
10564	cut                      y(1)     0 
10565	failure              
10566label(3):
10567	trust_me_inline          0     Y[] 
10568label(4):
10569	exit                 
10570
10571------ Test true(23) -------
10572p :-
10573	true,
10574	not a.
10575
10576p / 0:
10577label(1):
10578	allocate                 1 
10579	callf                    true / 0     Y[] 
10580	savecut                  y(1) 
10581	try_me_else              0     0     ref(3) 
10582label(2):
10583	callf                    a / 0     Y[1] 
10584	cut                      y(1)     0 
10585	failure              
10586label(3):
10587	trust_me_inline          0     Y[] 
10588label(4):
10589	exit                 
10590
10591------ Test true(24) -------
10592p :-
10593	true,
10594	(4 > 3) @ lists.
10595
10596p / 0:
10597label(1):
10598	allocate                 0 
10599	callf                    true / 0     Y[] 
10600	put_integer              a(1)     4 
10601	put_integer              a(2)     3 
10602	bi_gt                    a(1)     a(2)     lists     48 
10603	exit                 
10604
10605------ Test true(25) -------
10606p :-
10607	true,
10608	writeln(hello) @ lists.
10609
10610p / 0:
10611label(1):
10612	put_atom                 a(1)     hello 
10613	put_atom                 a(2)     lists 
10614	jmp                      sepia_kernel : writeln_body / 2 
10615
10616------ Test bip(type_tests) -------
10617p(A) :-
10618	free(A).
10619p(A) :-
10620	is_suspension(A).
10621p(A) :-
10622	is_event(A).
10623p(A) :-
10624	is_handle(A).
10625p(A) :-
10626	nonvar(A).
10627p(A) :-
10628	var(A).
10629p(A) :-
10630	meta(A).
10631p(A) :-
10632	atom(A).
10633p(A) :-
10634	integer(A).
10635p(A) :-
10636	sepia_kernel : bignum(A).
10637p(A) :-
10638	rational(A).
10639p(A) :-
10640	real(A).
10641p(A) :-
10642	float(A).
10643p(A) :-
10644	breal(A).
10645p(A) :-
10646	string(A).
10647p(A) :-
10648	number(A).
10649p(A) :-
10650	atomic(A).
10651p(A) :-
10652	callable(A).
10653p(A) :-
10654	compound(A).
10655p(A) :-
10656	is_list(A).
10657p(A) :-
10658	fail.
10659
10660INDEXES for (nondet) disjunction [2]
106611. Quality 4.4
10662    [] - [21]
10663    [[]] - [5, 8, 17, 18, 20, 21]
10664    [var] - [6, 21]
10665    [var, free] - [1, 6, 21]
10666    [var, meta] - [6, 7, 21]
10667    [atom] - [3, 5, 8, 17, 18, 21]
10668    [bignum] - [5, 9, 10, 16, 17, 21]
10669    [goal] - [2, 5, 17, 21]
10670    [double] - [5, 12, 13, 16, 17, 21]
10671    [list] - [5, 18, 19, 20, 21]
10672    [structure] - [5, 18, 19, 21]
10673    [rational] - [5, 11, 16, 17, 21]
10674    [handle] - [3, 4, 5, 17, 21]
10675    [breal] - [5, 12, 14, 16, 17, 21]
10676    [integer] - [5, 9, 16, 17, 21]
10677    [string] - [5, 15, 17, 21]
10678Branch determinisms for disjunction [2]
10679    Branch 1: try
10680    Branch 2: try
10681    Branch 3: try
10682    Branch 4: retry
10683    Branch 5: retry
10684    Branch 6: retry
10685    Branch 7: retry
10686    Branch 8: retry
10687    Branch 9: retry
10688    Branch 10: retry
10689    Branch 11: retry
10690    Branch 12: retry
10691    Branch 13: retry
10692    Branch 14: retry
10693    Branch 15: retry
10694    Branch 16: retry
10695    Branch 17: retry
10696    Branch 18: retry
10697    Branch 19: retry
10698    Branch 20: retry
10699    Branch 21: trust
10700p / 1:
10701label(1):
10702	switch_on_type           a(1) 
10703		meta: 	ref(58)
10704		[]: 	ref(45)
10705		atom: 	ref(46)
10706		bignum: 	ref(47)
10707		breal: 	ref(48)
10708		double: 	ref(49)
10709		goal: 	ref(50)
10710		handle: 	ref(51)
10711		integer: 	ref(52)
10712		list: 	ref(53)
10713		rational: 	ref(54)
10714		string: 	ref(55)
10715		structure: 	ref(56)
10716
10717label(57):
10718	try                      0     1     ref(3) 
10719	retry                    0     ref(13) 
10720	trust                    0     ref(43) 
10721label(3):
10722	bi_free                  a(1) 
10723	ret                  
10724label(5):
10725	bi_is_suspension         a(1) 
10726	ret                  
10727label(7):
10728	bi_is_event              a(1) 
10729	ret                  
10730label(9):
10731	bi_is_handle             a(1) 
10732	ret                  
10733label(11):
10734	bi_nonvar                a(1) 
10735	ret                  
10736label(13):
10737	bi_var                   a(1) 
10738	ret                  
10739label(15):
10740	bi_meta                  a(1) 
10741	ret                  
10742label(17):
10743	bi_atom                  a(1) 
10744	ret                  
10745label(19):
10746	bi_integer               a(1) 
10747	ret                  
10748label(21):
10749	bi_bignum                a(1) 
10750	ret                  
10751label(23):
10752	bi_rational              a(1) 
10753	ret                  
10754label(25):
10755	bi_real                  a(1) 
10756	ret                  
10757label(27):
10758	bi_float                 a(1) 
10759	ret                  
10760label(29):
10761	bi_breal                 a(1) 
10762	ret                  
10763label(31):
10764	bi_string                a(1) 
10765	ret                  
10766label(33):
10767	bi_number                a(1) 
10768	ret                  
10769label(35):
10770	bi_atomic                a(1) 
10771	ret                  
10772label(37):
10773	bi_callable              a(1) 
10774	ret                  
10775label(39):
10776	bi_compound              a(1) 
10777	ret                  
10778label(41):
10779	bi_is_list               a(1) 
10780	ret                  
10781label(43):
10782	failure              
10783label(45):
10784	try                      0     1     ref(11) 
10785	retry                    0     ref(17) 
10786	retry                    0     ref(35) 
10787	retry                    0     ref(37) 
10788	retry                    0     ref(41) 
10789	trust                    0     ref(43) 
10790label(46):
10791	try                      0     1     ref(7) 
10792	retry                    0     ref(11) 
10793	retry                    0     ref(17) 
10794	retry                    0     ref(35) 
10795	retry                    0     ref(37) 
10796	trust                    0     ref(43) 
10797label(47):
10798	try                      0     1     ref(11) 
10799	retry                    0     ref(19) 
10800	retry                    0     ref(21) 
10801	retry                    0     ref(33) 
10802	retry                    0     ref(35) 
10803	trust                    0     ref(43) 
10804label(48):
10805	try                      0     1     ref(11) 
10806	retry                    0     ref(25) 
10807	retry                    0     ref(29) 
10808	retry                    0     ref(33) 
10809	retry                    0     ref(35) 
10810	trust                    0     ref(43) 
10811label(49):
10812	try                      0     1     ref(11) 
10813	retry                    0     ref(25) 
10814	retry                    0     ref(27) 
10815	retry                    0     ref(33) 
10816	retry                    0     ref(35) 
10817	trust                    0     ref(43) 
10818label(50):
10819	try                      0     1     ref(5) 
10820	retry                    0     ref(11) 
10821	retry                    0     ref(35) 
10822	trust                    0     ref(43) 
10823label(51):
10824	try                      0     1     ref(7) 
10825	retry                    0     ref(9) 
10826	retry                    0     ref(11) 
10827	retry                    0     ref(35) 
10828	trust                    0     ref(43) 
10829label(52):
10830	try                      0     1     ref(11) 
10831	retry                    0     ref(19) 
10832	retry                    0     ref(33) 
10833	retry                    0     ref(35) 
10834	trust                    0     ref(43) 
10835label(53):
10836	try                      0     1     ref(11) 
10837	retry                    0     ref(37) 
10838	retry                    0     ref(39) 
10839	retry                    0     ref(41) 
10840	trust                    0     ref(43) 
10841label(54):
10842	try                      0     1     ref(11) 
10843	retry                    0     ref(23) 
10844	retry                    0     ref(33) 
10845	retry                    0     ref(35) 
10846	trust                    0     ref(43) 
10847label(55):
10848	try                      0     1     ref(11) 
10849	retry                    0     ref(31) 
10850	retry                    0     ref(35) 
10851	trust                    0     ref(43) 
10852label(56):
10853	try                      0     1     ref(11) 
10854	retry                    0     ref(37) 
10855	retry                    0     ref(39) 
10856	trust                    0     ref(43) 
10857label(58):
10858	try                      0     1     ref(13) 
10859	retry                    0     ref(15) 
10860	trust                    0     ref(43) 
10861
10862------ Test bip(type_tests_det1) -------
10863p(A) :-
10864	var(A).
10865p(A) :-
10866	atomic(A).
10867p(A) :-
10868	compound(A).
10869
10870INDEXES for (semidet) disjunction [2]
108711. Quality 1.0
10872    [] - []
10873    [[]] - [2]
10874    [var] - [1]
10875    [atom] - [2]
10876    [bignum] - [2]
10877    [goal] - [2]
10878    [double] - [2]
10879    [list] - [3]
10880    [structure] - [3]
10881    [rational] - [2]
10882    [handle] - [2]
10883    [breal] - [2]
10884    [integer] - [2]
10885    [string] - [2]
10886Branch determinisms for disjunction [2]
10887    Branch 1: det
10888    Branch 2: det
10889    Branch 3: det
10890p / 1:
10891label(1):
10892	switch_on_type           a(1) 
10893		meta: 	ref(9)
10894		[]: 	ref(10)
10895		atom: 	ref(10)
10896		bignum: 	ref(10)
10897		breal: 	ref(10)
10898		double: 	ref(10)
10899		goal: 	ref(10)
10900		handle: 	ref(10)
10901		integer: 	ref(10)
10902		list: 	ref(11)
10903		rational: 	ref(10)
10904		string: 	ref(10)
10905		structure: 	ref(11)
10906
10907	branch                   ref(9) 
10908label(3):
10909	bi_var                   a(1) 
10910label(9):
10911	ret                  
10912label(5):
10913	bi_atomic                a(1) 
10914label(10):
10915	ret                  
10916label(7):
10917	bi_compound              a(1) 
10918label(11):
10919	ret                  
10920
10921------ Test bip(type_tests_det2) -------
10922p(A) :-
10923	var(A).
10924p(A) :-
10925	atom(A).
10926p(A) :-
10927	number(A).
10928p(A) :-
10929	string(A).
10930p(A) :-
10931	compound(A).
10932p(A) :-
10933	is_handle(A).
10934p(A) :-
10935	is_suspension(A).
10936
10937INDEXES for (semidet) disjunction [2]
109381. Quality 1.0
10939    [] - []
10940    [[]] - [2]
10941    [var] - [1]
10942    [atom] - [2]
10943    [bignum] - [3]
10944    [goal] - [7]
10945    [double] - [3]
10946    [list] - [5]
10947    [structure] - [5]
10948    [rational] - [3]
10949    [handle] - [6]
10950    [breal] - [3]
10951    [integer] - [3]
10952    [string] - [4]
10953Branch determinisms for disjunction [2]
10954    Branch 1: det
10955    Branch 2: det
10956    Branch 3: det
10957    Branch 4: det
10958    Branch 5: det
10959    Branch 6: det
10960    Branch 7: det
10961p / 1:
10962label(1):
10963	switch_on_type           a(1) 
10964		meta: 	ref(17)
10965		[]: 	ref(18)
10966		atom: 	ref(18)
10967		bignum: 	ref(19)
10968		breal: 	ref(19)
10969		double: 	ref(19)
10970		goal: 	ref(15)
10971		handle: 	ref(20)
10972		integer: 	ref(19)
10973		list: 	ref(21)
10974		rational: 	ref(19)
10975		string: 	ref(22)
10976		structure: 	ref(21)
10977
10978	branch                   ref(17) 
10979label(3):
10980	bi_var                   a(1) 
10981label(17):
10982	ret                  
10983label(5):
10984	bi_atom                  a(1) 
10985label(18):
10986	ret                  
10987label(7):
10988	bi_number                a(1) 
10989label(19):
10990	ret                  
10991label(9):
10992	bi_string                a(1) 
10993label(22):
10994	ret                  
10995label(11):
10996	bi_compound              a(1) 
10997label(21):
10998	ret                  
10999label(13):
11000	bi_is_handle             a(1) 
11001label(20):
11002	ret                  
11003label(15):
11004	bi_is_suspension         a(1) 
11005	ret                  
11006
11007------ Test bip(type_tests_det3) -------
11008p(A) :-
11009	free(A).
11010p(A) :-
11011	meta(A).
11012p(A) :-
11013	callable(A).
11014p(A) :-
11015	number(A).
11016p(A) :-
11017	string(A).
11018p(A) :-
11019	is_handle(A).
11020p(A) :-
11021	is_suspension(A).
11022
11023INDEXES for (semidet) disjunction [2]
110241. Quality 1.0
11025    [] - []
11026    [[]] - [3]
11027    [var] - []
11028    [var, free] - [1]
11029    [var, meta] - [2]
11030    [atom] - [3]
11031    [bignum] - [4]
11032    [goal] - [7]
11033    [double] - [4]
11034    [list] - [3]
11035    [structure] - [3]
11036    [rational] - [4]
11037    [handle] - [6]
11038    [breal] - [4]
11039    [integer] - [4]
11040    [string] - [5]
11041Branch determinisms for disjunction [2]
11042    Branch 1: det
11043    Branch 2: det
11044    Branch 3: det
11045    Branch 4: det
11046    Branch 5: det
11047    Branch 6: det
11048    Branch 7: det
11049p / 1:
11050label(1):
11051	switch_on_type           a(1) 
11052		meta: 	ref(18)
11053		[]: 	ref(19)
11054		atom: 	ref(19)
11055		bignum: 	ref(20)
11056		breal: 	ref(20)
11057		double: 	ref(20)
11058		goal: 	ref(15)
11059		handle: 	ref(21)
11060		integer: 	ref(20)
11061		list: 	ref(19)
11062		rational: 	ref(20)
11063		string: 	ref(22)
11064		structure: 	ref(19)
11065
11066	branch                   ref(17) 
11067label(3):
11068	bi_free                  a(1) 
11069label(17):
11070	ret                  
11071label(5):
11072	bi_meta                  a(1) 
11073label(18):
11074	ret                  
11075label(7):
11076	bi_callable              a(1) 
11077label(19):
11078	ret                  
11079label(9):
11080	bi_number                a(1) 
11081label(20):
11082	ret                  
11083label(11):
11084	bi_string                a(1) 
11085label(22):
11086	ret                  
11087label(13):
11088	bi_is_handle             a(1) 
11089label(21):
11090	ret                  
11091label(15):
11092	bi_is_suspension         a(1) 
11093	ret                  
11094
11095------ Test bip(other) -------
11096p(A) :-
11097	sepia_kernel : set_bip_error(A).
11098p(A) :-
11099	make_suspension(true, 3, A).
11100p(A) :-
11101	sepia_kernel : make_suspension(true, 3, A, eclipse).
11102
11103p / 1:
11104label(1):
11105	try_me_else              0     1     ref(3) 
11106label(2):
11107	bi_set_bip_error         a(1) 
11108	ret                  
11109label(3):
11110	retry_me_else            0     ref(5) 
11111label(4):
11112	put_atom                 a(2)     true 
11113	put_integer              a(3)     3 
11114	put_module               a(4)     eclipse 
11115	bi_make_suspension       a(2)     a(3)     a(1)     a(4)     0 
11116	ret                  
11117label(5):
11118	trust_me                 0 
11119label(6):
11120	put_atom                 a(2)     true 
11121	put_integer              a(3)     3 
11122	put_module               a(4)     eclipse 
11123	bi_make_suspension       a(2)     a(3)     a(1)     a(4)     0 
11124	ret                  
11125
11126------ Test bip(eq) -------
11127p(A, B) :-
11128	A = B.
11129p(A, B) :-
11130	A == B.
11131p(A, B) :-
11132	A \== B.
11133p(A, B) :-
11134	A ~= B.
11135p(A, B) :-
11136	sepia_kernel : \==(A, B, []).
11137
11138p / 2:
11139label(1):
11140	try_me_else              0     2     ref(3) 
11141label(2):
11142	get_value                a(1)     a(2) 
11143	ret                  
11144label(3):
11145	retry_me_else            0     ref(5) 
11146label(4):
11147	get_matched_value        a(1)     a(2) 
11148	ret                  
11149label(5):
11150	retry_me_else            0     ref(7) 
11151label(6):
11152	bi_not_identical         a(1)     a(2) 
11153	ret                  
11154label(7):
11155	retry_me_else            0     ref(9) 
11156label(8):
11157	bi_inequality            a(1)     a(2) 
11158	ret                  
11159label(9):
11160	trust_me                 0 
11161label(10):
11162	put_nil                  a(3) 
11163	bi_not_ident_list        a(1)     a(2)     a(3) 
11164	ret                  
11165
11166------ Test bip(arith_comp) -------
11167p(A, B) :-
11168	A < B.
11169p(A, B) :-
11170	A =< B.
11171p(A, B) :-
11172	A =:= B.
11173p(A, B) :-
11174	A >= B.
11175p(A, B) :-
11176	A > B.
11177p(A, B) :-
11178	A =\= B.
11179
11180p / 2:
11181label(1):
11182	try_me_else              0     2     ref(3) 
11183label(2):
11184	bi_lt                    a(1)     a(2)     eclipse     48 
11185	ret                  
11186label(3):
11187	retry_me_else            0     ref(5) 
11188label(4):
11189	bi_le                    a(1)     a(2)     eclipse     48 
11190	ret                  
11191label(5):
11192	retry_me_else            0     ref(7) 
11193label(6):
11194	bi_eq                    a(1)     a(2)     eclipse     48 
11195	ret                  
11196label(7):
11197	retry_me_else            0     ref(9) 
11198label(8):
11199	bi_ge                    a(1)     a(2)     eclipse     48 
11200	ret                  
11201label(9):
11202	retry_me_else            0     ref(11) 
11203label(10):
11204	bi_gt                    a(1)     a(2)     eclipse     48 
11205	ret                  
11206label(11):
11207	trust_me                 0 
11208label(12):
11209	bi_ne                    a(1)     a(2)     eclipse     48 
11210	ret                  
11211
11212------ Test bip(arith_comp_mod) -------
11213p(A, B, C) :-
11214	sepia_kernel : <(A, B, C).
11215p(A, B, C) :-
11216	sepia_kernel : =<(A, B, C).
11217p(A, B, C) :-
11218	sepia_kernel : =:=(A, B, C).
11219p(A, B, C) :-
11220	sepia_kernel : >=(A, B, C).
11221p(A, B, C) :-
11222	sepia_kernel : >(A, B, C).
11223p(A, B, C) :-
11224	sepia_kernel : =\=(A, B, C).
11225
11226p / 3:
11227label(1):
11228	try_me_else              0     3     ref(3) 
11229label(2):
11230	bi_lt                    a(1)     a(2)     a(3)     0 
11231	ret                  
11232label(3):
11233	retry_me_else            0     ref(5) 
11234label(4):
11235	bi_le                    a(1)     a(2)     a(3)     0 
11236	ret                  
11237label(5):
11238	retry_me_else            0     ref(7) 
11239label(6):
11240	bi_eq                    a(1)     a(2)     a(3)     0 
11241	ret                  
11242label(7):
11243	retry_me_else            0     ref(9) 
11244label(8):
11245	bi_ge                    a(1)     a(2)     a(3)     0 
11246	ret                  
11247label(9):
11248	retry_me_else            0     ref(11) 
11249label(10):
11250	bi_gt                    a(1)     a(2)     a(3)     0 
11251	ret                  
11252label(11):
11253	trust_me                 0 
11254label(12):
11255	bi_ne                    a(1)     a(2)     a(3)     0 
11256	ret                  
11257
11258------ Test bip(functions) -------
11259p(A) :-
11260	get_bip_error(B),
11261	B - C,
11262	+(C, 1, D),
11263	+(B, C, D),
11264	-(D, 1, E),
11265	-(D, C, E),
11266	*(E, 2, F),
11267	/(F, 2, G),
11268	//(G, 2, H),
11269	rem(H, 2, I),
11270	div(I, 2, J),
11271	mod(J, 2, K),
11272	/\(K, 2, L),
11273	\/(L, 2, M),
11274	xor(M, 2, N),
11275	\(N, O),
11276	arity(foo(a, b, c), 3),
11277	arg(O, foo(a, b, c), A).
11278
11279p / 1:
11280label(1):
11281	get_variable             2     a(1)     y(1) 
11282	put_global_variable_callf     a(1)     y(2)     get_bip_error / 1     Y[1,2] 
11283	move                     y(2)     a(1) 
11284	bi_minus                 a(1)     a(2)     4 
11285	bi_addi                  a(2)     1     a(3)     24 
11286	bi_add                   a(1)     a(2)     a(1)     16 
11287	get_value                a(1)     a(3) 
11288	bi_addi                  a(3)     -1     a(1)     24 
11289	bi_sub                   a(3)     a(2)     a(2)     16 
11290	get_value                a(2)     a(1) 
11291	put_integer              a(2)     2 
11292	bi_mul                   a(1)     a(2)     a(1)     16 
11293	put_integer              a(2)     2 
11294	bi_quot                  a(1)     a(2)     a(1)     16 
11295	put_integer              a(2)     2 
11296	bi_div                   a(1)     a(2)     a(1)     16 
11297	put_integer              a(2)     2 
11298	bi_rem                   a(1)     a(2)     a(1)     16 
11299	put_integer              a(2)     2 
11300	bi_fdiv                  a(1)     a(2)     a(1)     16 
11301	put_integer              a(2)     2 
11302	bi_mod                   a(1)     a(2)     a(1)     16 
11303	put_integer              a(2)     2 
11304	bi_and                   a(1)     a(2)     a(1)     16 
11305	put_integer              a(2)     2 
11306	bi_or                    a(1)     a(2)     a(1)     16 
11307	put_integer              a(2)     2 
11308	bi_xor                   a(1)     a(2)     a(1)     16 
11309	bi_bitnot                a(1)     a(1)     4 
11310	put_structure            a(2)     foo / 3 
11311	write_atom2              a     b 
11312	write_atom               c 
11313	bi_arity                 a(2)     a(2)     4 
11314	get_integer              a(2)     3 
11315	put_structure            a(2)     foo / 3 
11316	write_atom2              a     b 
11317	write_atom               c 
11318	bi_arg                   a(1)     a(2)     a(1)     16 
11319	get_value                a(1)     y(1) 
11320	exit                 
11321
11322------ Test bip(1) -------
11323p(A, B) :-
11324	+(A, B, C),
11325	-(C, 1, D),
11326	p(D).
11327
11328p / 2:
11329label(1):
11330	bi_add                   a(1)     a(2)     a(2)     16 
11331	bi_addi                  a(2)     -1     a(1)     24 
11332	jmp                      p / 1 
11333
11334------ Test bip(2) -------
11335p(A, B) :-
11336	+(A, B, C),
11337	-(A, B, C).
11338
11339p / 2:
11340label(1):
11341	bi_add                   a(1)     a(2)     a(3)     16 
11342	bi_sub                   a(1)     a(2)     a(1)     16 
11343	get_value                a(1)     a(3) 
11344	ret                  
11345
11346------ Test bip(3) -------
11347p(A, B) :-
11348	+(A, B, 0).
11349
11350p / 2:
11351label(1):
11352	bi_add                   a(1)     a(2)     a(1)     16 
11353	get_integer              a(1)     0 
11354	ret                  
11355
11356------ Test bip(4) -------
11357p(A, B) :-
11358	+(A, B, foo(bar)).
11359
11360p / 2:
11361label(1):
11362	bi_add                   a(1)     a(2)     a(1)     16 
11363	get_structure            a(1)     foo / 1     ref(2) 
11364	write_atom               bar 
11365	ret                  
11366label(2):
11367	read_atom                bar 
11368	ret                  
11369
11370------ Test bip(5) -------
11371p(A, B) :-
11372	+(A, 1, B).
11373
11374p / 2:
11375label(1):
11376	bi_addi                  a(1)     1     a(1)     24 
11377	get_value                a(1)     a(2) 
11378	ret                  
11379
11380------ Test bip(6) -------
11381p(A, B) :-
11382	+(A, B, C),
11383	q,
11384	p(C).
11385
11386p / 2:
11387label(1):
11388	bi_add                   a(1)     a(2)     a(1)     16 
11389	get_variable             1     a(1)     y(1) 
11390	callf                    q / 0     Y[1] 
11391	move_chain               y(1)     a(1)     p / 1 
11392
11393------ Test bip(7) -------
11394p(A, B) :-
11395	q,
11396	+(A, B, C),
11397	p(C).
11398
11399p / 2:
11400label(1):
11401	get_variable             2     a(1)     y(1) 
11402	move                     a(2)     y(2) 
11403	callf                    q / 0     Y[1,2] 
11404	move                     2     y(1)     a(2) 
11405	bi_add                   a(2)     a(3)     a(1)     16 
11406	chain                    p / 1 
11407
11408------ Test bip(8) -------
11409p(A, B) :-
11410	q(C),
11411	+(A, B, C),
11412	p(C).
11413
11414p / 2:
11415label(1):
11416	get_variable             3     a(1)     y(1) 
11417	move                     a(2)     y(2) 
11418	put_global_variable_callf     a(1)     y(3)     q / 1     Y[1,2,3] 
11419	move                     2     y(1)     a(2) 
11420	bi_add                   a(2)     a(3)     a(2)     16 
11421	get_value                a(2)     y(3) 
11422	move_chain               y(3)     a(1)     p / 1 
11423
11424------ Test bip(9) -------
11425p(A, B) :-
11426	q(C),
11427	+(A, B, C),
11428	-(A, B, C),
11429	p(C).
11430
11431p / 2:
11432label(1):
11433	get_variable             3     a(1)     y(1) 
11434	move                     a(2)     y(2) 
11435	put_global_variable_callf     a(1)     y(3)     q / 1     Y[1,2,3] 
11436	move                     2     y(1)     a(2) 
11437	bi_add                   a(2)     a(3)     a(4)     16 
11438	get_value                a(4)     y(3) 
11439	bi_sub                   a(2)     a(3)     a(2)     16 
11440	get_value                a(2)     y(3) 
11441	move_chain               y(3)     a(1)     p / 1 
11442
11443------ Test bip(10) -------
11444p(A, B) :-
11445	+(A, B, C).
11446
11447p / 2:
11448label(1):
11449	bi_add                   a(1)     a(2)     a(1)     16 
11450	ret                  
11451
11452------ Test bip(20) -------
11453p(A, B) :-
11454	A > B.
11455
11456p / 2:
11457label(1):
11458	bi_gt                    a(1)     a(2)     eclipse     48 
11459	ret                  
11460
11461------ Test inline(1) -------
11462:- inline(i1 / 1).
11463i1(1).
11464i1(2).
11465p(A) :-
11466	i1(A).
11467q(A) :-
11468	r,
11469	i1(A),
11470	s.
11471
11472:- inline(i1 / 1).
11473INDEXES for (nondet) disjunction [2]
114741. Quality 1.3
11475    [] - []
11476    [var] - [1, 2]
11477    [integer] - []
11478    [integer, 1] - [1]
11479    [integer, 2] - [2]
11480Branch determinisms for disjunction [2]
11481    Branch 1: try
11482    Branch 2: trust
11483i1 / 1:
11484label(1):
11485	integer_switch           a(1) 
11486		1: 	ref(7)
11487		2: 	ref(8)
11488		default: 	ref(fail)
11489
11490label(2):
11491	try_me_else              0     1     ref(4) 
11492label(3):
11493	get_integer              a(1)     1 
11494label(7):
11495	ret                  
11496label(4):
11497	trust_me                 0 
11498label(5):
11499	get_integer              a(1)     2 
11500label(8):
11501	ret                  
11502INDEXES for (nondet) disjunction [2]
115031. Quality 1.3
11504    [] - []
11505    [var] - [1, 2]
11506    [integer] - []
11507    [integer, 1] - [1]
11508    [integer, 2] - [2]
11509Branch determinisms for disjunction [2]
11510    Branch 1: try
11511    Branch 2: trust
11512p / 1:
11513label(1):
11514	integer_switch           a(1) 
11515		1: 	ref(7)
11516		2: 	ref(8)
11517		default: 	ref(fail)
11518
11519label(2):
11520	try_me_else              0     1     ref(4) 
11521label(3):
11522	get_integer              a(1)     1 
11523label(7):
11524	ret                  
11525label(4):
11526	trust_me                 0 
11527label(5):
11528	get_integer              a(1)     2 
11529label(8):
11530	ret                  
11531INDEXES for (nondet) disjunction [3]
115321. Quality 1.3
11533    [] - []
11534    [var] - [1, 2]
11535    [integer] - []
11536    [integer, 1] - [1]
11537    [integer, 2] - [2]
11538Branch determinisms for disjunction [3]
11539    Branch 1: try
11540    Branch 2: trust
11541q / 1:
11542label(1):
11543	get_variable             1     a(1)     y(1) 
11544	callf                    r / 0     Y[1] 
11545	integer_switch           y(1) 
11546		1: 	ref(4)
11547		2: 	ref(6)
11548		default: 	ref(fail)
11549
11550label(3):
11551	try_me_else              0     0     ref(5) 
11552label(4):
11553	move                     y(1)     a(1) 
11554	get_integer              a(1)     1 
11555	chain                    s / 0 
11556label(5):
11557	trust_me_inline          0     Y[1] 
11558label(6):
11559	move                     y(1)     a(1) 
11560	get_integer              a(1)     2 
11561	chain                    s / 0 
11562
11563------ Test inline(2) -------
11564:- inline(i2 / 1).
11565i2(A) :-
11566	r(A),
11567	!.
11568i2(A) :-
11569	s.
11570p(A) :-
11571	q,
11572	i2(A),
11573	t(A).
11574
11575:- inline(i2 / 1).
11576i2 / 1:
11577label(1):
11578	allocate                 1 
11579	savecut                  y(1) 
11580	try_me_else              0     1     ref(3) 
11581label(2):
11582	callf                    r / 1     Y[1] 
11583	cut                      y(1)     0 
11584	exit                 
11585label(3):
11586	trust_me_inline          0     Y[] 
11587label(4):
11588	chain                    s / 0 
11589p / 1:
11590label(1):
11591	get_variable             2     a(1)     y(1) 
11592	callf                    q / 0     Y[1] 
11593	savecut                  y(2) 
11594	try_me_else              0     0     ref(3) 
11595label(2):
11596	move_callf               y(1)     a(1)     r / 1     Y[1,2] 
11597	cut                      y(2)     1 
11598	move_chain               y(1)     a(1)     t / 1 
11599label(3):
11600	trust_me_inline          0     Y[1] 
11601label(4):
11602	callf                    s / 0     Y[1] 
11603	move_chain               y(1)     a(1)     t / 1 
11604
11605------ Test bench(1) -------
11606conc([], A, A).
11607conc([A|B], C, [A|D]) :-
11608	conc(B, C, D).
11609
11610INDEXES for (nondet) disjunction [2]
116111. Quality 1.3
11612    [] - []
11613    [list] - [2]
11614    [[]] - [1]
11615    [var] - [1, 2]
116162. Quality 1.5
11617    [] - [1]
11618    [list] - [1, 2]
11619    [var] - [1, 2]
11620Branch determinisms for disjunction [2]
11621    Branch 1: try
11622    Branch 2: trust
11623conc / 3:
11624label(1):
11625	list_switch              a(1)     ref(7)     ref(12)     ref(fail) 
11626	list_switch              a(3)     ref(3)     ref(4)     ref(4) 
11627label(3):
11628	try_me_else              0     3     ref(5) 
11629label(4):
11630	get_nil                  a(1) 
11631label(12):
11632	get_value                a(3)     a(2) 
11633	ret                  
11634label(5):
11635	trust_me                 0 
11636label(6):
11637	get_list                 a(1)     ref(7) 
11638	write_variable2          a(4)     a(1) 
11639	branch                   ref(8) 
11640label(7):
11641	read_variable2           a(4)     a(1) 
11642label(8):
11643	get_list                 a(3)     ref(9) 
11644	write_value              a(4) 
11645	write_variable           a(3) 
11646	jmp                      ref(1) 
11647label(9):
11648	read_value               a(4) 
11649	read_variable            a(3) 
11650	jmp                      ref(1) 
11651
11652------ Test bench(2) -------
11653conc(A, B, C) :-
11654	(
11655	    A = [],
11656	    B = D,
11657	    C = D
11658	;
11659	    A = [E|F],
11660	    B = D,
11661	    C = [E|G],
11662	    conc(F, D, G)
11663	).
11664
11665INDEXES for (nondet) disjunction [2]
116661. Quality 1.3
11667    [] - []
11668    [list] - [2]
11669    [[]] - [1]
11670    [var] - [1, 2]
116712. Quality 1.5
11672    [] - [1]
11673    [list] - [1, 2]
11674    [var] - [1, 2]
11675Branch determinisms for disjunction [2]
11676    Branch 1: try
11677    Branch 2: trust
11678conc / 3:
11679label(1):
11680	list_switch              a(1)     ref(7)     ref(12)     ref(fail) 
11681	list_switch              a(3)     ref(3)     ref(4)     ref(4) 
11682label(3):
11683	try_me_else              0     3     ref(5) 
11684label(4):
11685	get_nil                  a(1) 
11686label(12):
11687	move                     a(2)     a(1) 
11688	get_value                a(3)     a(1) 
11689	ret                  
11690label(5):
11691	trust_me                 0 
11692label(6):
11693	get_list                 a(1)     ref(7) 
11694	write_variable2          a(4)     a(1) 
11695	branch                   ref(8) 
11696label(7):
11697	read_variable2           a(4)     a(1) 
11698label(8):
11699	get_list                 a(3)     ref(9) 
11700	write_value              a(4) 
11701	write_variable           a(3) 
11702	jmp                      ref(1) 
11703label(9):
11704	read_value               a(4) 
11705	read_variable            a(3) 
11706	jmp                      ref(1) 
11707
11708------ Test bench(3) -------
11709conc(A, B, C) :-
11710	(
11711	    A = [D|E],
11712	    B = F,
11713	    C = [D|G],
11714	    conc(E, F, G)
11715	;
11716	    A = [],
11717	    B = F,
11718	    C = F
11719	).
11720
11721INDEXES for (nondet) disjunction [2]
117221. Quality 1.3
11723    [] - []
11724    [[]] - [2]
11725    [list] - [1]
11726    [var] - [1, 2]
117272. Quality 1.5
11728    [] - [2]
11729    [list] - [1, 2]
11730    [var] - [1, 2]
11731Branch determinisms for disjunction [2]
11732    Branch 1: try
11733    Branch 2: trust
11734conc / 3:
11735label(1):
11736	list_switch              a(1)     ref(5)     ref(12)     ref(fail) 
11737	list_switch              a(3)     ref(3)     ref(10)     ref(10) 
11738label(3):
11739	try_me_else              0     3     ref(9) 
11740label(4):
11741	get_list                 a(1)     ref(5) 
11742	write_variable2          a(4)     a(1) 
11743	branch                   ref(6) 
11744label(5):
11745	read_variable2           a(4)     a(1) 
11746label(6):
11747	get_list                 a(3)     ref(7) 
11748	write_value              a(4) 
11749	write_variable           a(3) 
11750	jmp                      ref(1) 
11751label(7):
11752	read_value               a(4) 
11753	read_variable            a(3) 
11754	jmp                      ref(1) 
11755label(9):
11756	trust_me                 0 
11757label(10):
11758	get_nil                  a(1) 
11759label(12):
11760	move                     a(2)     a(1) 
11761	get_value                a(3)     a(1) 
11762	ret                  
11763
11764------ Test bench(4) -------
11765conc(e(A), B, B).
11766conc(f(A, B), C, f(A, D)) :-
11767	conc(B, C, D).
11768
11769INDEXES for (nondet) disjunction [2]
117701. Quality 1.3
11771    [] - []
11772    [structure] - []
11773    [structure, e / 1] - [1]
11774    [structure, f / 2] - [2]
11775    [var] - [1, 2]
117762. Quality 1.5
11777    [] - [1]
11778    [structure] - [1]
11779    [structure, f / 2] - [1, 2]
11780    [var] - [1, 2]
11781Branch determinisms for disjunction [2]
11782    Branch 1: try
11783    Branch 2: trust
11784conc / 3:
11785label(1):
11786	functor_switch           a(1) 
11787		e / 1: 	ref(6)
11788		f / 2: 	ref(9)
11789		default: 	ref(fail)
11790
11791	functor_switch           a(3) 
11792		f / 2: 	ref(4)
11793		default: 	ref(5)
11794
11795label(4):
11796	try_me_else              0     3     ref(7) 
11797label(5):
11798	get_structure            a(1)     e / 1     ref(6) 
11799	write_void           
11800label(6):
11801	get_value                a(3)     a(2) 
11802	ret                  
11803label(7):
11804	trust_me                 0 
11805label(8):
11806	get_structure            a(1)     f / 2     ref(9) 
11807	write_variable2          a(4)     a(1) 
11808	branch                   ref(10) 
11809label(9):
11810	read_variable2           a(4)     a(1) 
11811label(10):
11812	get_structure            a(3)     f / 2     ref(11) 
11813	write_value              a(4) 
11814	write_variable           a(3) 
11815	jmp                      ref(1) 
11816label(11):
11817	read_value               a(4) 
11818	read_variable            a(3) 
11819	jmp                      ref(1) 
11820
11821------ Test bench(5) -------
11822conc(A, B, C) :-
11823	(
11824	    A = e(D),
11825	    B = E,
11826	    C = E
11827	;
11828	    A = f(F, G),
11829	    B = E,
11830	    C = f(F, H),
11831	    conc(G, E, H)
11832	).
11833
11834INDEXES for (nondet) disjunction [2]
118351. Quality 1.3
11836    [] - []
11837    [structure] - []
11838    [structure, e / 1] - [1]
11839    [structure, f / 2] - [2]
11840    [var] - [1, 2]
118412. Quality 1.5
11842    [] - [1]
11843    [structure] - [1]
11844    [structure, f / 2] - [1, 2]
11845    [var] - [1, 2]
11846Branch determinisms for disjunction [2]
11847    Branch 1: try
11848    Branch 2: trust
11849conc / 3:
11850label(1):
11851	functor_switch           a(1) 
11852		e / 1: 	ref(6)
11853		f / 2: 	ref(9)
11854		default: 	ref(fail)
11855
11856	functor_switch           a(3) 
11857		f / 2: 	ref(4)
11858		default: 	ref(5)
11859
11860label(4):
11861	try_me_else              0     3     ref(7) 
11862label(5):
11863	get_structure            a(1)     e / 1     ref(6) 
11864	write_void           
11865label(6):
11866	move                     a(2)     a(1) 
11867	get_value                a(3)     a(1) 
11868	ret                  
11869label(7):
11870	trust_me                 0 
11871label(8):
11872	get_structure            a(1)     f / 2     ref(9) 
11873	write_variable2          a(4)     a(1) 
11874	branch                   ref(10) 
11875label(9):
11876	read_variable2           a(4)     a(1) 
11877label(10):
11878	get_structure            a(3)     f / 2     ref(11) 
11879	write_value              a(4) 
11880	write_variable           a(3) 
11881	jmp                      ref(1) 
11882label(11):
11883	read_value               a(4) 
11884	read_variable            a(3) 
11885	jmp                      ref(1) 
11886
11887------ Test bench(6) -------
11888conc([], A, B) :-
11889	!,
11890	A = B.
11891conc([A|B], C, [A|D]) :-
11892	conc(B, C, D).
11893
11894INDEXES for (semidet) disjunction [2]
118951. Quality 1.0
11896    [] - []
11897    [list] - [2]
11898    [[]] - [1]
11899    [var] - [1]
11900Branch determinisms for disjunction [2]
11901    Branch 1: det
11902    Branch 2: det
11903conc / 3:
11904label(1):
11905	list_switch              a(1)     ref(6)     ref(11)     ref(fail) 
11906label(3):
11907	get_nil                  a(1) 
11908label(11):
11909	get_value                a(2)     a(3) 
11910	ret                  
11911label(6):
11912	read_variable2           a(4)     a(1) 
11913label(7):
11914	get_list                 a(3)     ref(8) 
11915	write_value              a(4) 
11916	write_variable           a(3) 
11917	jmp                      ref(1) 
11918label(8):
11919	read_value               a(4) 
11920	read_variable            a(3) 
11921	jmp                      ref(1) 
11922
11923------ Test bench(7) -------
11924conc([], A, B) :-
11925	t,
11926	!,
11927	A = B.
11928conc([A|B], C, [A|D]) :-
11929	conc(B, C, D).
11930
11931INDEXES for (nondet) disjunction [2]
119321. Quality 1.3
11933    [] - []
11934    [list] - [2]
11935    [[]] - [1]
11936    [var] - [1, 2]
119372. Quality 1.5
11938    [] - [1]
11939    [list] - [1, 2]
11940    [var] - [1, 2]
11941Branch determinisms for disjunction [2]
11942    Branch 1: try
11943    Branch 2: trust
11944conc / 3:
11945label(1):
11946	allocate                 3 
11947	savecut                  y(1) 
11948	list_switch              a(1)     ref(7)     ref(12)     ref(fail) 
11949	list_switch              a(3)     ref(3)     ref(4)     ref(4) 
11950label(3):
11951	try_me_else              0     3     ref(5) 
11952label(4):
11953	get_nil                  a(1) 
11954label(12):
11955	move                     2     a(2)     y(2) 
11956	callf                    t / 0     Y[1,2,3] 
11957	cut                      y(1)     3 
11958	get_value                y(2)     y(3) 
11959	exit                 
11960label(5):
11961	trust_me_inline          0     Y[] 
11962label(6):
11963	get_list                 a(1)     ref(7) 
11964	write_variable2          a(4)     a(1) 
11965	branch                   ref(8) 
11966label(7):
11967	read_variable2           a(4)     a(1) 
11968label(8):
11969	get_list                 a(3)     ref(9) 
11970	write_value              a(4) 
11971	write_variable           a(3) 
11972	chain                    ref(1) 
11973label(9):
11974	read_value               a(4) 
11975	read_variable            a(3) 
11976	chain                    ref(1) 
11977
11978------ Test bench(tak) -------
11979tak(A, B, C, D) :-
11980	(
11981	    A =< B
11982	->
11983	    C = D
11984	;
11985	    E is A - 1,
11986	    tak(E, B, C, F),
11987	    G is B - 1,
11988	    tak(G, C, A, H),
11989	    I is C - 1,
11990	    tak(I, A, B, J),
11991	    tak(F, H, J, D)
11992	).
11993
11994tak / 4:
11995label(1):
11996	savecut                  a(5) 
11997	try_me_else              0     5     ref(3) 
11998label(2):
11999	bi_le                    a(1)     a(2)     eclipse     48 
12000	cut                      a(5) 
12001	get_value                a(3)     a(4) 
12002	ret                  
12003label(3):
12004	trust_me                 0 
12005label(4):
12006	bi_addi                  a(1)     -1     a(5)     24 
12007	get_variable             7     a(1)     y(5) 
12008	move                     2     a(2)     y(6) 
12009	move                     a(4)     y(3) 
12010	put_global_variable      a(4)     y(4) 
12011	move                     a(5)     a(1) 
12012	callf                    ref(1)     Y[3,4,5,6,7] 
12013	move                     y(6)     a(5) 
12014	bi_addi                  a(5)     -1     a(1)     24 
12015	put_global_variable      a(4)     y(2) 
12016	move                     y(7)     a(2)     y(5)     a(3) 
12017	callf                    ref(1)     Y[2,3,4,5,6,7] 
12018	move                     y(7)     a(5) 
12019	bi_addi                  a(5)     -1     a(1)     24 
12020	put_global_variable      a(4)     y(1) 
12021	move                     2     y(5)     a(2) 
12022	callf                    ref(1)     Y[1,2,3,4] 
12023	move                     y(4)     a(1)     y(2)     a(2)     y(1)     a(3) 
12024	move_chain               y(3)     a(4)     ref(1) 
12025
12026------ Test bench(takc) -------
12027tak(A, B, C, D) :-
12028	A =< B,
12029	!,
12030	C = D.
12031tak(A, B, C, D) :-
12032	E is A - 1,
12033	tak(E, B, C, F),
12034	G is B - 1,
12035	tak(G, C, A, H),
12036	I is C - 1,
12037	tak(I, A, B, J),
12038	tak(F, H, J, D).
12039
12040tak / 4:
12041label(1):
12042	savecut                  a(5) 
12043	try_me_else              0     5     ref(3) 
12044label(2):
12045	bi_le                    a(1)     a(2)     eclipse     48 
12046	cut                      a(5) 
12047	get_value                a(3)     a(4) 
12048	ret                  
12049label(3):
12050	trust_me                 0 
12051label(4):
12052	bi_addi                  a(1)     -1     a(5)     24 
12053	get_variable             7     a(1)     y(5) 
12054	move                     2     a(2)     y(6) 
12055	move                     a(4)     y(3) 
12056	put_global_variable      a(4)     y(4) 
12057	move                     a(5)     a(1) 
12058	callf                    ref(1)     Y[3,4,5,6,7] 
12059	move                     y(6)     a(5) 
12060	bi_addi                  a(5)     -1     a(1)     24 
12061	put_global_variable      a(4)     y(2) 
12062	move                     y(7)     a(2)     y(5)     a(3) 
12063	callf                    ref(1)     Y[2,3,4,5,6,7] 
12064	move                     y(7)     a(5) 
12065	bi_addi                  a(5)     -1     a(1)     24 
12066	put_global_variable      a(4)     y(1) 
12067	move                     2     y(5)     a(2) 
12068	callf                    ref(1)     Y[1,2,3,4] 
12069	move                     y(4)     a(1)     y(2)     a(2)     y(1)     a(3) 
12070	move_chain               y(3)     a(4)     ref(1) 
12071
12072------ Test bug(1) -------
12073simplify_code([], []).
12074simplify_code([code(A, B, C)|D], E) :-
12075	(
12076	    simplify(A, D, F)
12077	->
12078	    simplify_code(F, E)
12079	;
12080	    E = [A|F],
12081	    simplify_code(D, F)
12082	).
12083
12084INDEXES for (nondet) disjunction [2]
120851. Quality 1.3
12086    [] - []
12087    [list] - [2]
12088    [[]] - [1]
12089    [var] - [1, 2]
120902. Quality 1.5
12091    [] - [2]
12092    [[]] - [1, 2]
12093    [var] - [1, 2]
12094Branch determinisms for disjunction [2]
12095    Branch 1: try
12096    Branch 2: trust
12097INDEXES for (nondet) disjunction [2, 2, 2]
120981. Quality 1.5
12099    [] - [1]
12100    [list] - [1, 2]
12101    [var] - [1, 2]
12102Branch determinisms for disjunction [2, 2, 2]
12103    Branch 1: try
12104    Branch 2: trust
12105simplify_code / 2:
12106label(1):
12107	list_switch              a(1)     ref(8)     ref(18)     ref(fail) 
12108	list_switch              a(2)     ref(6)     ref(3)     ref(6) 
12109label(3):
12110	try_me_else              0     2     ref(5) 
12111label(4):
12112	get_nil                  a(1) 
12113label(18):
12114	get_nil                  a(2) 
12115	ret                  
12116label(5):
12117	trust_me                 0 
12118label(6):
12119	get_list                 a(1)     ref(8) 
12120	write_first_structure     code / 3 
12121label(7):
12122	write_variable           a(3) 
12123	write_void               2 
12124	mode                     t(0)     ref(9) 
12125	write_variable           a(1) 
12126	branch                   ref(10) 
12127label(8):
12128	read_structure           code / 3     ref(7) 
12129	read_variable            a(3) 
12130	mode                     t(0) 
12131label(9):
12132	read_variable            a(1) 
12133label(10):
12134	space                    -1 
12135	allocate                 3 
12136	savecut                  y(1) 
12137	list_switch              a(2)     ref(11)     ref(12)     ref(12) 
12138label(11):
12139	try_me_else              0     3     ref(13) 
12140label(12):
12141	move                     a(2)     y(2) 
12142	shift                    a(2)     a(1)     a(3) 
12143	put_global_variable_callf     a(3)     y(3)     simplify / 3     Y[1,2,3] 
12144	cut                      y(1)     3 
12145	move                     y(3)     a(1)     y(2)     a(2) 
12146	chain                    ref(1) 
12147label(13):
12148	trust_me_inline          0     Y[] 
12149label(14):
12150	get_list                 a(2)     ref(15) 
12151	write_value              a(3) 
12152	write_variable           a(2) 
12153	chain                    ref(1) 
12154label(15):
12155	read_value               a(3) 
12156	read_variable            a(2) 
12157	chain                    ref(1) 
12158
12159------ Test bug(2) -------
12160loop(A) :-
12161	(
12162	    foreach(B, A)
12163	do
12164	    writeln(B)
12165	).
12166
12167loop / 1:
12168label(1):
12169	jmp                      do__2 / 1 
12170
12171------ Test bug(3) -------
12172p(A, B, C) :-
12173	(
12174	    A = B
12175	->
12176	    C = foo
12177	;
12178	    else
12179	).
12180
12181p / 3:
12182label(1):
12183	savecut                  a(4) 
12184	try_me_else              0     4     ref(3) 
12185label(2):
12186	get_value                a(1)     a(2) 
12187	cut                      a(4) 
12188	get_atom                 a(3)     foo 
12189	ret                  
12190label(3):
12191	trust_me                 0 
12192label(4):
12193	jmp                      (else) / 0 
12194
12195------ Test bug(4) -------
12196p(A, B, C) :-
12197	(
12198	    A == B
12199	->
12200	    D = temp,
12201	    C = E
12202	;
12203	    C = [F|E]
12204	).
12205
12206p / 3:
12207label(1):
12208	savecut                  a(4) 
12209	try_me_else              0     4     ref(3) 
12210label(2):
12211	get_matched_value        a(1)     a(2) 
12212	cut                      a(4) 
12213	ret                  
12214label(3):
12215	trust_me                 0 
12216label(4):
12217	get_list                 a(3)     ref(5) 
12218	write_void               2 
12219	ret                  
12220label(5):
12221	ret                  
12222
12223------ Test bug(5) -------
12224indexing_transformation([A|B], C) :-
12225	(
12226	    A = disjunction(D)
12227	->
12228	    then
12229	;
12230	    C = [E|F]
12231	).
12232
12233INDEXES for (semidet) disjunction [2]
122341. Quality 1.0
12235    [] - [2]
12236    [structure] - [2]
12237    [structure, disjunction / 1] - [1]
12238    [var] - [1]
12239Branch determinisms for disjunction [2]
12240    Branch 1: det
12241    Branch 2: det
12242indexing_transformation / 2:
12243label(1):
12244	get_list                 a(1)     ref(2) 
12245	write_variable           a(1) 
12246	write_void           
12247	functor_switch           a(1) 
12248		disjunction / 1: 	ref(6)
12249		default: 	ref(8)
12250
12251label(5):
12252	get_structure            a(1)     disjunction / 1     ref(6) 
12253	write_void           
12254label(6):
12255	jmp                      (then) / 0 
12256label(2):
12257	read_variable            a(1) 
12258	functor_switch           a(1) 
12259		disjunction / 1: 	ref(6)
12260		default: 	ref(8)
12261
12262	branch                   ref(5) 
12263label(8):
12264	get_list                 a(2)     ref(9) 
12265	write_void               2 
12266label(9):
12267	ret                  
12268
12269------ Test bug(6) -------
12270insert_after_head(A, B, C) :-
12271	(
12272	    B = [D|E],
12273	    D = goal(head, F)
12274	->
12275	    C = [D, A|E]
12276	;
12277	    C = [A|B]
12278	).
12279
12280INDEXES for (nondet) disjunction [2]
122811. Quality 1.5
12282    [] - [2]
12283    [list] - [1, 2]
12284    [var] - [1, 2]
12285Branch determinisms for disjunction [2]
12286    Branch 1: try
12287    Branch 2: trust
12288insert_after_head / 3:
12289label(1):
12290	savecut                  a(4) 
12291	list_switch              a(2)     ref(2)     ref(11)     ref(11) 
12292label(2):
12293	try_me_else              0     4     ref(10) 
12294label(3):
12295	get_list                 a(2)     ref(4) 
12296	write_variable2          a(2)     a(5) 
12297	branch                   ref(5) 
12298label(4):
12299	read_variable2           a(2)     a(5) 
12300label(5):
12301	get_structure            a(2)     goal / 2     ref(6) 
12302	write_atom               head 
12303	write_void           
12304	branch                   ref(7) 
12305label(6):
12306	read_atom                head 
12307label(7):
12308	cut                      a(4) 
12309	get_list                 a(3)     ref(9) 
12310	write_value              a(2) 
12311	write_list           
12312label(8):
12313	write_value              a(1) 
12314	write_value              a(5) 
12315	ret                  
12316label(9):
12317	read_value               a(2) 
12318	read_last_list           ref(8) 
12319	read_value               a(1) 
12320	read_value               a(5) 
12321	ret                  
12322label(10):
12323	trust_me                 0 
12324label(11):
12325	get_list                 a(3)     ref(12) 
12326	write_value              a(1) 
12327	write_value              a(2) 
12328	ret                  
12329label(12):
12330	read_value               a(1) 
12331	read_value               a(2) 
12332	ret                  
12333
12334------ Test bug(7) -------
12335declaration_warning_handler(A, B, lists) :-
12336	!.
12337declaration_warning_handler(A, B, profile) :-
12338	!.
12339declaration_warning_handler(75, A, B) :-
12340	!,
12341	get_flag_body(A, definition_module, C, B),
12342	get_deprecation_advice(A, C, D),
12343	!,
12344	warning_handler(75, A, B),
12345	printf(warning_output, " Advice: %w%n", [D]).
12346declaration_warning_handler(85, A : B, C) :-
12347	known_library(A),
12348	!.
12349declaration_warning_handler(A, B, C) :-
12350	warning_handler(A, B, C).
12351
12352INDEXES for (nondet) disjunction [2]
123531. Quality 1.7
12354    [] - [3, 4, 5]
12355    [atom] - [3, 4, 5]
12356    [atom, profile] - [2]
12357    [atom, lists] - [1]
12358    [var] - [1]
123592. Quality 3.3
12360    [] - [1, 2, 5]
12361    [var] - [1, 2, 3]
12362    [integer] - [1, 2, 5]
12363    [integer, 85] - [1, 2, 4, 5]
12364    [integer, 75] - [1, 2, 3]
12365Branch determinisms for disjunction [2]
12366    Branch 1: det
12367    Branch 2: det
12368    Branch 3: try
12369    Branch 4: retry
12370    Branch 5: trust
12371declaration_warning_handler / 3:
12372label(1):
12373	savecut                  a(4) 
12374	atom_switch              a(3) 
12375		profile: 	ref(21)
12376		lists: 	ref(22)
12377		default: 	ref(17)
12378
12379label(5):
12380	get_atom                 a(3)     lists 
12381label(22):
12382	ret                  
12383label(7):
12384	get_atom                 a(3)     profile 
12385label(21):
12386	ret                  
12387label(9):
12388	get_integer              a(1)     75 
12389	cut                      a(4) 
12390	get_variable             5     a(2)     y(2) 
12391	move                     2     a(3)     y(3) 
12392	put_atom                 a(2)     definition_module 
12393	put_global_variable      a(3)     y(5) 
12394	move                     y(2)     a(1)     y(3)     a(4) 
12395	callf                    get_flag_body / 4     Y[2,3,4,5] 
12396	put_global_variable      a(3)     y(1) 
12397	move                     y(2)     a(1)     y(5)     a(2) 
12398	callf                    get_deprecation_advice / 3     Y[1,2,3,4] 
12399	cut                      y(4)     3 
12400	put_integer              a(1)     75 
12401	move                     2     y(2)     a(2) 
12402	callf                    warning_handler / 3     Y[1] 
12403	put_list                 a(3) 
12404	push_value               y(1) 
12405	push_nil             
12406	put_atom                 a(1)     warning_output 
12407	put_string               a(2)     " Advice: %w%n" 
12408	put_module               a(4)     eclipse 
12409	chain                    sepia_kernel : printf_body / 4 
12410label(11):
12411	get_integer              a(1)     85 
12412	get_structure            a(2)     (:) / 2     ref(12) 
12413	write_variable           a(1) 
12414	write_void           
12415	branch                   ref(13) 
12416label(12):
12417	read_variable            a(1) 
12418label(13):
12419	get_variable             1     a(4)     y(1) 
12420	callf                    known_library / 1     Y[1] 
12421	cut                      y(1)     0 
12422	exit                 
12423label(15):
12424	jmp                      warning_handler / 3 
12425label(17):
12426	try                      0     4     ref(9) 
12427	retry                    0     ref(11) 
12428	trust                    0     ref(15) 
12429
12430------ Test bug(8) -------
12431attach_suspensions(postponed, A) ?-
12432	!,
12433	postpone_suspensions(A).
12434attach_suspensions(A, B) :-
12435	atom(A),
12436	!,
12437	attach_suspensions1(A, B).
12438attach_suspensions(A, B) :-
12439	nonvar(A),
12440	!,
12441	error(5, attach_suspensions(A, B)).
12442attach_suspensions(A, B) :-
12443	error(4, attach_suspensions(A, B)).
12444
12445INDEXES for (semidet) disjunction [2]
124461. Quality 0.8
12447    [] - [4]
12448    [handle] - [3]
12449    [list] - [3]
12450    [[]] - [2]
12451    [structure] - [3]
12452    [atom] - [2]
12453    [atom, postponed] - [1]
12454    [rational] - [3]
12455    [integer] - [3]
12456    [breal] - [3]
12457    [bignum] - [3]
12458    [string] - [3]
12459    [double] - [3]
12460    [goal] - [3]
12461Branch determinisms for disjunction [2]
12462    Branch 1: det
12463    Branch 2: det
12464    Branch 3: det
12465    Branch 4: det
12466attach_suspensions / 2:
12467label(1):
12468	switch_on_type           a(1) 
12469		meta: 	ref(9)
12470		[]: 	ref(12)
12471		atom: 	ref(11)
12472		bignum: 	ref(13)
12473		breal: 	ref(13)
12474		double: 	ref(13)
12475		goal: 	ref(13)
12476		handle: 	ref(13)
12477		integer: 	ref(13)
12478		list: 	ref(13)
12479		rational: 	ref(13)
12480		string: 	ref(13)
12481		structure: 	ref(13)
12482
12483label(9):
12484	move                     a(2)     a(4) 
12485	put_structure            a(2)     attach_suspensions / 2 
12486	push_value               a(1) 
12487	push_value               a(4) 
12488	put_integer              a(1)     4 
12489	put_module               a(3)     eclipse 
12490	jmp                      sepia_kernel : error_ / 3 
12491label(3):
12492	in_get_atom              a(1)     postponed 
12493label(14):
12494	move                     a(2)     a(1) 
12495	jmp                      postpone_suspensions / 1 
12496label(5):
12497	bi_atom                  a(1) 
12498label(12):
12499	jmp                      attach_suspensions1 / 2 
12500label(7):
12501	bi_nonvar                a(1) 
12502label(13):
12503	move                     a(2)     a(4) 
12504	put_structure            a(2)     attach_suspensions / 2 
12505	push_value               a(1) 
12506	push_value               a(4) 
12507	put_integer              a(1)     5 
12508	put_module               a(3)     eclipse 
12509	jmp                      sepia_kernel : error_ / 3 
12510label(11):
12511	atom_switch              a(1) 
12512		postponed: 	ref(14)
12513		default: 	ref(5)
12514
12515
12516------ Test bug(9) -------
12517execute(A, B, C) :-
12518	(
12519	    [A|B] = C
12520	;
12521	    C = []
12522	).
12523
12524INDEXES for (nondet) disjunction [2]
125251. Quality 1.3
12526    [] - []
12527    [[]] - [2]
12528    [list] - [1]
12529    [var] - [1, 2]
12530Branch determinisms for disjunction [2]
12531    Branch 1: try
12532    Branch 2: trust
12533execute / 3:
12534label(1):
12535	list_switch              a(3)     ref(4)     ref(8)     ref(fail) 
12536label(2):
12537	try_me_else              0     3     ref(5) 
12538label(3):
12539	get_list                 a(3)     ref(4) 
12540	write_value              a(1) 
12541	write_value              a(2) 
12542	ret                  
12543label(4):
12544	read_value               a(1) 
12545	read_value               a(2) 
12546	ret                  
12547label(5):
12548	trust_me                 0 
12549label(6):
12550	get_nil                  a(3) 
12551label(8):
12552	ret                  
12553
12554------ Test bug(10) -------
12555do_x(0, [], A, A).
12556do_x(A, B, C, D) :-
12557	C is E + 1,
12558	F is A >> 1,
12559	(
12560	    A /\ 1 =:= 0
12561	->
12562	    B = G
12563	;
12564	    B = [E|G]
12565	),
12566	do_x(F, G, C, D).
12567
12568INDEXES for (nondet) disjunction [2]
125691. Quality 1.5
12570    [] - [2]
12571    [var] - [1, 2]
12572    [integer] - [2]
12573    [integer, 0] - [1, 2]
125742. Quality 1.5
12575    [] - [2]
12576    [[]] - [1, 2]
12577    [var] - [1, 2]
12578Branch determinisms for disjunction [2]
12579    Branch 1: try
12580    Branch 2: trust
12581INDEXES for (nondet) disjunction [2, 2, 3]
125821. Quality 1.5
12583    [] - [1]
12584    [list] - [1, 2]
12585    [var] - [1, 2]
12586Branch determinisms for disjunction [2, 2, 3]
12587    Branch 1: try
12588    Branch 2: trust
12589do_x / 4:
12590label(1):
12591	integer_switch           a(1) 
12592		0: 	ref(3)
12593		default: 	ref(7)
12594
12595label(3):
12596	list_switch              a(2)     ref(7)     ref(4)     ref(7) 
12597label(4):
12598	try_me_else              0     4     ref(6) 
12599label(5):
12600	get_integer              a(1)     0 
12601	get_nil                  a(2) 
12602	get_value                a(4)     a(3) 
12603	ret                  
12604label(6):
12605	trust_me                 0 
12606label(7):
12607	allocate                 7 
12608	put_global_variable      a(5)     y(7) 
12609	bi_addi                  a(5)     1     a(5)     24 
12610	get_value                a(5)     a(3) 
12611	move                     2     a(1)     y(5) 
12612	move                     2     a(3)     y(2) 
12613	put_integer              a(2)     1 
12614	put_global_variable_callf     a(3)     y(4)     sepia_kernel : (>>) / 3     Y[2,3,4,5,6,7] 
12615	savecut                  a(1) 
12616	list_switch              y(6)     ref(8)     ref(9)     ref(9) 
12617label(8):
12618	try_me_else              0     1     ref(10) 
12619label(9):
12620	put_integer              a(2)     1 
12621	move                     y(5)     a(3) 
12622	bi_and                   a(3)     a(2)     a(2)     16 
12623	put_integer              a(3)     0 
12624	bi_eq                    a(2)     a(3)     eclipse     48 
12625	cut                      a(1)     6 
12626	move                     y(6)     y(1) 
12627	branch                   ref(13) 
12628label(10):
12629	trust_me_inline          0     Y[2,3,4,6,7] 
12630label(11):
12631	move                     y(6)     a(1) 
12632	get_list                 a(1)     ref(12) 
12633	write_value              y(7) 
12634	write_variable           y(1) 
12635	branch                   ref(13) 
12636label(12):
12637	read_value               y(7) 
12638	read_variable            y(1) 
12639label(13):
12640	move                     y(4)     a(1) 
12641	move                     3     y(1)     a(2) 
12642	chain                    ref(1) 
12643
12644------ Test bug(11) -------
12645add_incoming(A, B, C, D) :-
12646	arg(A, C, E),
12647	(
12648	    var(E)
12649	->
12650	    arg(A, B, E),
12651	    do__N(E, D, B, C, D)
12652	;
12653	    true
12654	).
12655
12656INDEXES for (semidet) disjunction [2]
126571. Quality 1.0
12658    [] - [2]
12659    [var] - [1]
12660Branch determinisms for disjunction [2]
12661    Branch 1: det
12662    Branch 2: det
12663add_incoming / 4:
12664label(1):
12665	bi_arg                   a(1)     a(3)     a(5)     16 
12666	switch_on_type           a(5) 
12667		meta: 	ref(6)
12668		[]: 	ref(5)
12669		atom: 	ref(5)
12670		bignum: 	ref(5)
12671		breal: 	ref(5)
12672		double: 	ref(5)
12673		goal: 	ref(5)
12674		handle: 	ref(5)
12675		integer: 	ref(5)
12676		list: 	ref(5)
12677		rational: 	ref(5)
12678		string: 	ref(5)
12679		structure: 	ref(5)
12680
12681	branch                   ref(6) 
12682label(3):
12683	bi_var                   a(5) 
12684label(6):
12685	bi_arg                   a(1)     a(2)     a(6)     16 
12686	get_value                a(6)     a(5) 
12687	move                     a(5)     a(1) 
12688	rot                      a(3)     a(2)     a(4) 
12689	move                     a(2)     a(5) 
12690	jmp                      do__N / 5 
12691label(5):
12692	ret                  
12693
12694------ Test bug(12) -------
12695i_np_head0(np_head(A), B - C, B - C, void).
12696i_np_head0(name(A), B - A, B - A, id).
12697i_np_head0(wh(A), A, A, id).
12698
12699INDEXES for (nondet) disjunction [2]
127001. Quality 1.5
12701    [] - []
12702    [structure] - []
12703    [structure, name / 1] - [2]
12704    [structure, wh / 1] - [3]
12705    [structure, np_head / 1] - [1]
12706    [var] - [1, 2, 3]
127072. Quality 2.0
12708    [] - [3]
12709    [structure] - [3]
12710    [structure, - / 2] - [1, 2, 3]
12711    [var] - [1, 2, 3]
127123. Quality 2.0
12713    [] - [3]
12714    [structure] - [3]
12715    [structure, - / 2] - [1, 2, 3]
12716    [var] - [1, 2, 3]
127174. Quality 2.0
12718    [] - []
12719    [atom] - []
12720    [atom, id] - [2, 3]
12721    [atom, void] - [1]
12722    [var] - [1, 2, 3]
12723Branch determinisms for disjunction [2]
12724    Branch 1: try
12725    Branch 2: retry
12726    Branch 3: trust
12727i_np_head0 / 4:
12728label(1):
12729	functor_switch           a(1) 
12730		name / 1: 	ref(15)
12731		wh / 1: 	ref(23)
12732		np_head / 1: 	ref(8)
12733		default: 	ref(fail)
12734
12735	functor_switch           a(2) 
12736		(-) / 2: 	ref(4)
12737		default: 	ref(22)
12738
12739label(4):
12740	functor_switch           a(3) 
12741		(-) / 2: 	ref(5)
12742		default: 	ref(22)
12743
12744	atom_switch              a(4) 
12745		id: 	ref(26)
12746		void: 	ref(7)
12747		default: 	ref(fail)
12748
12749label(6):
12750	try_me_else              0     4     ref(13) 
12751label(7):
12752	get_structure            a(1)     np_head / 1     ref(8) 
12753	write_void           
12754label(8):
12755	get_structure            a(2)     (-) / 2     ref(9) 
12756	write_variable2          a(1)     a(2) 
12757	branch                   ref(10) 
12758label(9):
12759	read_variable2           a(1)     a(2) 
12760label(10):
12761	get_structure            a(3)     (-) / 2     ref(11) 
12762	write_value              a(1) 
12763	write_value              a(2) 
12764	get_atom                 a(4)     void 
12765	ret                  
12766label(11):
12767	read_value               a(1) 
12768	read_value               a(2) 
12769	get_atom                 a(4)     void 
12770	ret                  
12771label(13):
12772	retry_me_else            0     ref(21) 
12773label(14):
12774	get_structure            a(1)     name / 1     ref(15) 
12775	write_variable           a(1) 
12776	branch                   ref(16) 
12777label(15):
12778	read_variable            a(1) 
12779label(16):
12780	get_structure            a(2)     (-) / 2     ref(17) 
12781	write_variable           a(2) 
12782	write_value              a(1) 
12783	branch                   ref(18) 
12784label(17):
12785	read_variable            a(2) 
12786	read_value               a(1) 
12787label(18):
12788	get_structure            a(3)     (-) / 2     ref(19) 
12789	write_value              a(2) 
12790	write_value              a(1) 
12791	get_atom                 a(4)     id 
12792	ret                  
12793label(19):
12794	read_value               a(2) 
12795	read_value               a(1) 
12796	get_atom                 a(4)     id 
12797	ret                  
12798label(21):
12799	trust_me                 0 
12800label(22):
12801	get_structure            a(1)     wh / 1     ref(23) 
12802	write_value              a(2) 
12803	get_value                a(3)     a(2) 
12804	get_atom                 a(4)     id 
12805	ret                  
12806label(23):
12807	read_value               a(2) 
12808	get_value                a(3)     a(2) 
12809	get_atom                 a(4)     id 
12810	ret                  
12811label(26):
12812	try                      0     4     ref(14) 
12813	trust                    0     ref(22) 
12814label(5):
12815	atom_switch              a(4) 
12816		id: 	ref(26)
12817		void: 	ref(7)
12818		default: 	ref(fail)
12819
12820	branch                   ref(6) 
12821
12822------ Test bugzilla(68) -------
12823xgt0(pinf) :-
12824	!.
12825xgt0(A) :-
12826	integer(A),
12827	A > 0.
12828
12829INDEXES for (semidet) disjunction [2]
128301. Quality 1.0
12831    [] - []
12832    [atom] - []
12833    [atom, pinf] - [1]
12834    [var] - [1]
12835    [integer] - [2]
12836    [bignum] - [2]
12837Branch determinisms for disjunction [2]
12838    Branch 1: det
12839    Branch 2: det
12840xgt0 / 1:
12841label(1):
12842	switch_on_type           a(1) 
12843		meta: 	ref(3)
12844		[]: 	ref(fail)
12845		atom: 	ref(3)
12846		bignum: 	ref(7)
12847		breal: 	ref(fail)
12848		double: 	ref(fail)
12849		goal: 	ref(fail)
12850		handle: 	ref(fail)
12851		integer: 	ref(7)
12852		list: 	ref(fail)
12853		rational: 	ref(fail)
12854		string: 	ref(fail)
12855		structure: 	ref(fail)
12856
12857label(3):
12858	get_atom                 a(1)     pinf 
12859	ret                  
12860label(5):
12861	bi_integer               a(1) 
12862label(7):
12863	put_integer              a(2)     0 
12864	bi_gt                    a(1)     a(2)     eclipse     48 
12865	ret                  
12866
12867------ Test bugzilla(165) -------
12868compute_stop(A) :-
12869	var(A),
12870	!,
12871	writeln(var).
12872compute_stop(1) :-
12873	!,
12874	writeln(1).
12875compute_stop(-1) :-
12876	!,
12877	writeln(-1).
12878compute_stop(A) :-
12879	integer(A),
12880	A > 1,
12881	!,
12882	writeln(pos).
12883compute_stop(A) :-
12884	integer(A),
12885	A < 0,
12886	!,
12887	writeln(neg).
12888compute_stop(A) :-
12889	writeln(other).
12890
12891INDEXES for (nondet) disjunction [2]
128921. Quality 1.4
12893    [] - [6]
12894    [var] - [1]
12895    [bignum] - [4, 5, 6]
12896    [integer] - [4, 5, 6]
12897    [integer, 1] - [2]
12898    [integer, -1] - [3]
12899Branch determinisms for disjunction [2]
12900    Branch 1: det
12901    Branch 2: det
12902    Branch 3: det
12903    Branch 4: try
12904    Branch 5: retry
12905    Branch 6: trust
12906compute_stop / 1:
12907label(1):
12908	savecut                  a(2) 
12909	switch_on_type           a(1) 
12910		meta: 	ref(17)
12911		[]: 	ref(13)
12912		atom: 	ref(13)
12913		bignum: 	ref(15)
12914		breal: 	ref(13)
12915		double: 	ref(13)
12916		goal: 	ref(13)
12917		handle: 	ref(13)
12918		integer: 	ref(16)
12919		list: 	ref(13)
12920		rational: 	ref(13)
12921		string: 	ref(13)
12922		structure: 	ref(13)
12923
12924	branch                   ref(17) 
12925label(3):
12926	bi_var                   a(1) 
12927label(17):
12928	put_atom                 a(1)     var 
12929	put_module               a(2)     eclipse 
12930	jmp                      sepia_kernel : writeln_body / 2 
12931label(5):
12932	get_integer              a(1)     1 
12933label(18):
12934	put_integer              a(1)     1 
12935	put_module               a(2)     eclipse 
12936	jmp                      sepia_kernel : writeln_body / 2 
12937label(7):
12938	get_integer              a(1)     -1 
12939label(19):
12940	put_integer              a(1)     -1 
12941	put_module               a(2)     eclipse 
12942	jmp                      sepia_kernel : writeln_body / 2 
12943label(9):
12944	bi_integer               a(1) 
12945	put_integer              a(3)     1 
12946	bi_gt                    a(1)     a(3)     eclipse     48 
12947	cut                      a(2) 
12948	put_atom                 a(1)     pos 
12949	put_module               a(2)     eclipse 
12950	jmp                      sepia_kernel : writeln_body / 2 
12951label(11):
12952	bi_integer               a(1) 
12953	put_integer              a(3)     0 
12954	bi_lt                    a(1)     a(3)     eclipse     48 
12955	cut                      a(2) 
12956	put_atom                 a(1)     neg 
12957	put_module               a(2)     eclipse 
12958	jmp                      sepia_kernel : writeln_body / 2 
12959label(13):
12960	put_atom                 a(1)     other 
12961	put_module               a(2)     eclipse 
12962	jmp                      sepia_kernel : writeln_body / 2 
12963label(15):
12964	try                      0     2     ref(9) 
12965	retry                    0     ref(11) 
12966	trust                    0     ref(13) 
12967label(16):
12968	integer_switch           a(1) 
12969		1: 	ref(18)
12970		-1: 	ref(19)
12971		default: 	ref(15)
12972
12973
12974------ Test bugzilla(408) -------
12975dan :-
12976	A = B,
12977	A = 2,
12978	write(B).
12979b :-
12980	a,
12981	A = 2,
12982	B = 3,
12983	writeln(A),
12984	c(B).
12985
12986dan / 0:
12987label(1):
12988	put_variable             a(3) 
12989	move                     a(3)     a(1) 
12990	get_integer              a(3)     2 
12991	put_module               a(2)     eclipse 
12992	jmp                      sepia_kernel : write_ / 2 
12993b / 0:
12994label(1):
12995	allocate                 1 
12996	callf                    a / 0     Y[] 
12997	put_integer              a(1)     2 
12998	put_integer              a(3)     3 
12999	move                     a(3)     y(1) 
13000	put_module               a(2)     eclipse 
13001	callf                    sepia_kernel : writeln_body / 2     Y[1] 
13002	move_chain               y(1)     a(1)     c / 1 
13003
13004------ Test bugzilla(642) -------
13005q(A, B) :-
13006	equal([A], [C]),
13007	(
13008	    C = b,
13009	    B = 1
13010	->
13011	    then
13012	;
13013	    else
13014	).
13015
13016INDEXES for (nondet) disjunction [3]
130171. Quality 1.5
13018    [] - [2]
13019    [var] - [1, 2]
13020    [integer] - [2]
13021    [integer, 1] - [1, 2]
130222. Quality 1.5
13023    [] - [2]
13024    [atom] - [2]
13025    [atom, b] - [1, 2]
13026    [var] - [1, 2]
13027Branch determinisms for disjunction [3]
13028    Branch 1: try
13029    Branch 2: trust
13030q / 2:
13031label(1):
13032	get_variable             2     a(2)     y(1) 
13033	move                     a(1)     a(3) 
13034	put_list                 a(1) 
13035	push_value               a(3) 
13036	push_nil             
13037	put_list                 a(2) 
13038	push_variable            y(2) 
13039	push_nil             
13040	callf                    equal / 2     Y[1,2] 
13041	savecut                  a(1) 
13042	integer_switch           y(1) 
13043		1: 	ref(3)
13044		default: 	ref(7)
13045
13046label(3):
13047	atom_switch              y(2) 
13048		b: 	ref(4)
13049		default: 	ref(7)
13050
13051label(4):
13052	try_me_else              0     1     ref(6) 
13053label(5):
13054	move                     y(2)     a(2) 
13055	get_atom                 a(2)     b 
13056	move                     y(1)     a(2) 
13057	get_integer              a(2)     1 
13058	cut                      a(1)     0 
13059	chain                    (then) / 0 
13060label(6):
13061	trust_me_inline          0     Y[] 
13062label(7):
13063	chain                    (else) / 0 
13064
13065------ Test bugzilla(727) -------
13066p1 :-
13067	A = f(B),
13068	t,
13069	writeln(B).
13070p2 :-
13071	A = f(B),
13072	writeln(B).
13073
13074p1 / 0:
13075label(1):
13076	allocate                 1 
13077	put_global_variable      y(1) 
13078	callf                    t / 0     Y[1] 
13079	put_module               a(2)     eclipse 
13080	move_chain               y(1)     a(1)     sepia_kernel : writeln_body / 2 
13081p2 / 0:
13082label(1):
13083	put_variable             a(1) 
13084	put_module               a(2)     eclipse 
13085	jmp                      sepia_kernel : writeln_body / 2 
13086
13087------ Test bugzilla(774) -------
13088p1 :-
13089	(
13090	    A = A
13091	;
13092	    true
13093	),
13094	writeln(A).
13095
13096p1 / 0:
13097label(1):
13098	try_me_else              0     0     ref(3) 
13099label(2):
13100	allocate                 1 
13101	put_global_variable      y(1) 
13102label(5):
13103	put_module               a(2)     eclipse 
13104	move_chain               y(1)     a(1)     sepia_kernel : writeln_body / 2 
13105label(3):
13106	trust_me                 0 
13107label(4):
13108	allocate                 1 
13109	gc_test                  1 
13110	put_global_variable      y(1) 
13111	branch                   ref(5) 
13112
13113------ Test at1 -------
13114at1 :-
13115	var(f(A)),
13116	A == a,
13117	q(A, f(A)).
13118
13119at1 / 0:
13120label(1):
13121	put_structure            a(3)     f / 1 
13122	push_variable            a(1) 
13123	bi_var                   a(3) 
13124	in_get_atom              a(1)     a 
13125	put_structure            a(2)     f / 1 
13126	push_value               a(1) 
13127	jmp                      q / 2 
13128
13129------ Test at2 -------
13130at2 :-
13131	f(A) == f(B),
13132	A == B,
13133	q(A, B).
13134
13135at2 / 0:
13136label(1):
13137	put_structure            a(3)     f / 1 
13138	push_variable            a(1) 
13139	put_structure            a(4)     f / 1 
13140	push_variable            a(2) 
13141	get_matched_value        a(3)     a(4) 
13142	get_matched_value        a(1)     a(2) 
13143	jmp                      q / 2 
13144
13145------ Test at3 -------
13146at3 :-
13147	f(A) == f(B),
13148	A == B,
13149	q(f(A), f(B)).
13150
13151at3 / 0:
13152label(1):
13153	put_structure            a(3)     f / 1 
13154	push_variable            a(4) 
13155	put_structure            a(5)     f / 1 
13156	push_variable            a(6) 
13157	get_matched_value        a(3)     a(5) 
13158	get_matched_value        a(4)     a(6) 
13159	put_structure            a(1)     f / 1 
13160	push_value               a(4) 
13161	put_structure            a(2)     f / 1 
13162	push_value               a(6) 
13163	jmp                      q / 2 
13164
13165------ Test at4 -------
13166at4 :-
13167	q,
13168	f(A) == f(B),
13169	A == B,
13170	q(A, B).
13171
13172at4 / 0:
13173label(1):
13174	allocate                 0 
13175	callf                    q / 0     Y[] 
13176	put_structure            a(3)     f / 1 
13177	push_variable            a(1) 
13178	put_structure            a(4)     f / 1 
13179	push_variable            a(2) 
13180	get_matched_value        a(3)     a(4) 
13181	get_matched_value        a(1)     a(2) 
13182	chain                    q / 2 
13183
13184------ Test ag1 -------
13185ag1 :-
13186	*(f(A), f(A), f(A)).
13187
13188ag1 / 0:
13189label(1):
13190	put_structure            a(1)     f / 1 
13191	push_variable            a(2) 
13192	put_structure            a(3)     f / 1 
13193	push_value               a(2) 
13194	bi_mul                   a(1)     a(3)     a(1)     16 
13195	get_structure            a(1)     f / 1     ref(2) 
13196	write_value              a(2) 
13197	ret                  
13198label(2):
13199	read_value               a(2) 
13200	ret                  
13201
13202------ Test ag2 -------
13203ag2 :-
13204	*(A, A, f(A)).
13205
13206ag2 / 0:
13207label(1):
13208	put_variable             a(1) 
13209	bi_mul                   a(1)     a(1)     a(2)     16 
13210	get_structure            a(2)     f / 1     ref(2) 
13211	write_value              a(1) 
13212	ret                  
13213label(2):
13214	read_value               a(1) 
13215	ret                  
13216
13217------ Test ag3 -------
13218ag3 :-
13219	A == f(A),
13220	q(A).
13221
13222ag3 / 0:
13223label(1):
13224	put_variable             a(1) 
13225	put_structure            a(2)     f / 1 
13226	push_value               a(1) 
13227	get_matched_value        a(1)     a(2) 
13228	jmp                      q / 1 
13229
13230------ Test ag5 -------
13231ag5 :-
13232	p(f(A), f(A), f(A)).
13233
13234ag5 / 0:
13235label(1):
13236	put_structure            a(1)     f / 1 
13237	push_variable            a(4) 
13238	put_structure            a(2)     f / 1 
13239	push_value               a(4) 
13240	put_structure            a(3)     f / 1 
13241	push_value               a(4) 
13242	jmp                      p / 3 
13243
13244------ Test ag6 -------
13245ag6 :-
13246	p(A, A, f(A)),
13247	p(f(B), f(B)),
13248	p(C, f(C)),
13249	p(f(D), D).
13250
13251ag6 / 0:
13252label(1):
13253	put_structure            a(3)     f / 1 
13254	push_variable            a(1) 
13255	allocate                 0 
13256	move                     a(1)     a(2) 
13257	callf                    p / 3     Y[] 
13258	put_structure            a(1)     f / 1 
13259	push_variable            a(3) 
13260	put_structure            a(2)     f / 1 
13261	push_value               a(3) 
13262	callf                    p / 2     Y[] 
13263	put_structure            a(2)     f / 1 
13264	push_variable            a(1) 
13265	callf                    p / 2     Y[] 
13266	put_structure            a(1)     f / 1 
13267	push_variable            a(2) 
13268	chain                    p / 2 
13269
13270------ Test ag8 -------
13271ag8 :-
13272	A =.. [f, B, B],
13273	q(A).
13274
13275ag8 / 0:
13276label(1):
13277	put_structure            a(1)     f / 2 
13278	push_variable            a(2) 
13279	push_value               a(2) 
13280	jmp                      q / 1 
13281
13282------ Test am1 -------
13283am1 :-
13284	f(A) == A.
13285
13286am1 / 0:
13287label(1):
13288	put_structure            a(1)     f / 1 
13289	push_variable            a(2) 
13290	get_matched_value        a(1)     a(2) 
13291	ret                  
13292
13293------ Test am2 -------
13294am2 :-
13295	f(A) == A,
13296	q(A).
13297
13298am2 / 0:
13299label(1):
13300	put_structure            a(2)     f / 1 
13301	push_variable            a(1) 
13302	get_matched_value        a(2)     a(1) 
13303	jmp                      q / 1 
13304
13305------ Test am3 -------
13306am3 :-
13307	f(A) == A,
13308	q(A),
13309	r.
13310
13311am3 / 0:
13312label(1):
13313	put_structure            a(2)     f / 1 
13314	push_variable            a(1) 
13315	get_matched_value        a(2)     a(1) 
13316	allocate                 0 
13317	callf                    q / 1     Y[] 
13318	chain                    r / 0 
13319
13320------ Test am4 -------
13321am4 :-
13322	*(f(A), A, f(A)).
13323
13324am4 / 0:
13325label(1):
13326	put_structure            a(1)     f / 1 
13327	push_variable            a(2) 
13328	bi_mul                   a(1)     a(2)     a(1)     16 
13329	get_structure            a(1)     f / 1     ref(2) 
13330	write_value              a(2) 
13331	ret                  
13332label(2):
13333	read_value               a(2) 
13334	ret                  
13335
13336------ Test am5 -------
13337am5 :-
13338	p(A),
13339	*(f(A), A, f(A)),
13340	q(A).
13341
13342am5 / 0:
13343label(1):
13344	allocate                 1 
13345	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
13346	put_structure            a(2)     f / 1 
13347	push_value               y(1) 
13348	move                     y(1)     a(1) 
13349	bi_mul                   a(2)     a(1)     a(2)     16 
13350	get_structure            a(2)     f / 1     ref(2) 
13351	write_value              a(1) 
13352	chain                    q / 1 
13353label(2):
13354	read_value               a(1) 
13355	chain                    q / 1 
13356
13357------ Test am6 -------
13358am6 :-
13359	var(A),
13360	*(A, f(A), A),
13361	q(A).
13362
13363am6 / 0:
13364label(1):
13365	put_variable             a(1) 
13366	bi_var                   a(1) 
13367	put_structure            a(2)     f / 1 
13368	push_value               a(1) 
13369	bi_mul                   a(1)     a(2)     a(2)     16 
13370	get_value                a(2)     a(1) 
13371	jmp                      q / 1 
13372
13373------ Test am7 -------
13374am7 :-
13375	p(A),
13376	*(f(A), A, f(A)),
13377	q(A).
13378
13379am7 / 0:
13380label(1):
13381	allocate                 1 
13382	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
13383	put_structure            a(2)     f / 1 
13384	push_value               y(1) 
13385	move                     y(1)     a(1) 
13386	bi_mul                   a(2)     a(1)     a(2)     16 
13387	get_structure            a(2)     f / 1     ref(2) 
13388	write_value              a(1) 
13389	chain                    q / 1 
13390label(2):
13391	read_value               a(1) 
13392	chain                    q / 1 
13393
13394------ Test am8 -------
13395am8 :-
13396	p(A),
13397	*(A, f(A), A),
13398	q(A).
13399
13400am8 / 0:
13401label(1):
13402	allocate                 1 
13403	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
13404	put_structure            a(2)     f / 1 
13405	push_value               y(1) 
13406	move                     y(1)     a(1) 
13407	bi_mul                   a(1)     a(2)     a(2)     16 
13408	get_value                a(2)     a(1) 
13409	chain                    q / 1 
13410
13411------ Test am9 -------
13412am9 :-
13413	var(A),
13414	f(A) == A,
13415	q(A).
13416
13417am9 / 0:
13418label(1):
13419	put_variable             a(1) 
13420	bi_var                   a(1) 
13421	put_structure            a(2)     f / 1 
13422	push_value               a(1) 
13423	get_matched_value        a(2)     a(1) 
13424	jmp                      q / 1 
13425
13426------ Test am10 -------
13427am10 :-
13428	p(A),
13429	var(A),
13430	f(A) == A,
13431	q(A).
13432
13433am10 / 0:
13434label(1):
13435	allocate                 1 
13436	put_global_variable_callf     a(1)     y(1)     p / 1     Y[1] 
13437	move                     y(1)     a(1) 
13438	bi_var                   a(1) 
13439	put_structure            a(2)     f / 1 
13440	push_value               a(1) 
13441	get_matched_value        a(2)     a(1) 
13442	chain                    q / 1 
13443
13444------ Test am11 -------
13445am11 :-
13446	var(A),
13447	f(A) == A.
13448
13449am11 / 0:
13450label(1):
13451	put_variable             a(1) 
13452	bi_var                   a(1) 
13453	put_structure            a(2)     f / 1 
13454	push_value               a(1) 
13455	get_matched_value        a(2)     a(1) 
13456	ret                  
13457
13458------ Test am12 -------
13459am12 :-
13460	var(A),
13461	A == f(A).
13462
13463am12 / 0:
13464label(1):
13465	put_variable             a(1) 
13466	bi_var                   a(1) 
13467	put_structure            a(2)     f / 1 
13468	push_value               a(1) 
13469	get_matched_value        a(1)     a(2) 
13470	ret                  
13471
13472------ Test am13 -------
13473am13 :-
13474	A == f(A).
13475
13476am13 / 0:
13477label(1):
13478	put_variable             a(1) 
13479	put_structure            a(2)     f / 1 
13480	push_value               a(1) 
13481	get_matched_value        a(1)     a(2) 
13482	ret                  
13483
13484------ Test am14 -------
13485am14 :-
13486	eq(A, B),
13487	f(A) == A.
13488
13489am14 / 0:
13490label(1):
13491	put_variable             a(2) 
13492	allocate                 1 
13493	put_global_variable_callf     a(1)     y(1)     eq / 2     Y[1] 
13494	put_structure            a(1)     f / 1 
13495	push_value               y(1) 
13496	move                     y(1)     a(2) 
13497	get_matched_value        a(1)     a(2) 
13498	exit                 
13499
13500------ Test disj1 -------
13501p :-
13502	(
13503	    var(A)
13504	->
13505	    b
13506	;
13507	    c
13508	).
13509
13510p / 0:
13511label(1):
13512	savecut                  a(1) 
13513	try_me_else              0     1     ref(3) 
13514label(2):
13515	put_variable             a(2) 
13516	bi_var                   a(2) 
13517	cut                      a(1) 
13518	jmp                      b / 0 
13519label(3):
13520	trust_me                 0 
13521label(4):
13522	jmp                      c / 0 
13523
13524------ Test disj2 -------
13525p :-
13526	(
13527	    var(A)
13528	->
13529	    b
13530	;
13531	    (
13532		var(A)
13533	    ->
13534		c
13535	    ;
13536		d
13537	    )
13538	).
13539
13540p / 0:
13541label(1):
13542	savecut                  a(1) 
13543	try_me_else              0     1     ref(3) 
13544label(2):
13545	put_variable             a(2) 
13546	bi_var                   a(2) 
13547	cut                      a(1) 
13548	jmp                      b / 0 
13549label(3):
13550	retry_me_else            0     ref(5) 
13551label(4):
13552	put_variable             a(2) 
13553	bi_var                   a(2) 
13554	cut                      a(1) 
13555	jmp                      c / 0 
13556label(5):
13557	trust_me                 0 
13558label(6):
13559	jmp                      d / 0 
13560
13561------ Test disj3 -------
13562p :-
13563	(
13564	    var(A)
13565	->
13566	    var(B)
13567	;
13568	    var(C)
13569	).
13570
13571p / 0:
13572label(1):
13573	savecut                  a(1) 
13574	try_me_else              0     1     ref(3) 
13575label(2):
13576	put_variable             a(2) 
13577	bi_var                   a(2) 
13578	cut                      a(1) 
13579	put_variable             a(1) 
13580	bi_var                   a(1) 
13581	ret                  
13582label(3):
13583	trust_me                 0 
13584label(4):
13585	put_variable             a(1) 
13586	bi_var                   a(1) 
13587	ret                  
13588
13589------ Test disj4 -------
13590p :-
13591	(
13592	    var(A)
13593	->
13594	    b
13595	;
13596	    c
13597	),
13598	e,
13599	f.
13600
13601p / 0:
13602label(1):
13603	savecut                  a(1) 
13604	try_me_else              0     1     ref(3) 
13605label(2):
13606	put_variable             a(2) 
13607	bi_var                   a(2) 
13608	cut                      a(1) 
13609	allocate                 0 
13610	callf                    b / 0     Y[] 
13611	callf                    e / 0     Y[] 
13612	chain                    f / 0 
13613label(3):
13614	trust_me                 0 
13615label(4):
13616	allocate                 0 
13617	callf                    c / 0     Y[] 
13618	callf                    e / 0     Y[] 
13619	chain                    f / 0 
13620
13621------ Test disj5 -------
13622p :-
13623	(
13624	    var(A)
13625	->
13626	    b
13627	;
13628	    (
13629		var(A)
13630	    ->
13631		c
13632	    ;
13633		d
13634	    )
13635	),
13636	e,
13637	f.
13638
13639p / 0:
13640label(1):
13641	savecut                  a(1) 
13642	try_me_else              0     1     ref(3) 
13643label(2):
13644	put_variable             a(2) 
13645	bi_var                   a(2) 
13646	cut                      a(1) 
13647	allocate                 0 
13648	callf                    b / 0     Y[] 
13649	callf                    e / 0     Y[] 
13650	chain                    f / 0 
13651label(3):
13652	retry_me_else            0     ref(5) 
13653label(4):
13654	put_variable             a(2) 
13655	bi_var                   a(2) 
13656	cut                      a(1) 
13657	allocate                 0 
13658	callf                    c / 0     Y[] 
13659	callf                    e / 0     Y[] 
13660	chain                    f / 0 
13661label(5):
13662	trust_me                 0 
13663label(6):
13664	allocate                 0 
13665	callf                    d / 0     Y[] 
13666	callf                    e / 0     Y[] 
13667	chain                    f / 0 
13668
13669------ Test disj6 -------
13670p :-
13671	(
13672	    var(A)
13673	->
13674	    var(B)
13675	;
13676	    var(C)
13677	),
13678	e,
13679	f.
13680
13681p / 0:
13682label(1):
13683	savecut                  a(1) 
13684	try_me_else              0     1     ref(3) 
13685label(2):
13686	put_variable             a(2) 
13687	bi_var                   a(2) 
13688	cut                      a(1) 
13689	put_variable             a(1) 
13690	bi_var                   a(1) 
13691	allocate                 0 
13692	callf                    e / 0     Y[] 
13693	chain                    f / 0 
13694label(3):
13695	trust_me                 0 
13696label(4):
13697	put_variable             a(1) 
13698	bi_var                   a(1) 
13699	allocate                 0 
13700	callf                    e / 0     Y[] 
13701	chain                    f / 0 
13702
13703------ Test disj7 -------
13704p :-
13705	(
13706	    var(A)
13707	;
13708	    var(B)
13709	),
13710	c,
13711	d.
13712
13713p / 0:
13714label(1):
13715	try_me_else              0     0     ref(3) 
13716label(2):
13717	put_variable             a(1) 
13718	bi_var                   a(1) 
13719	allocate                 0 
13720	callf                    c / 0     Y[] 
13721	chain                    d / 0 
13722label(3):
13723	trust_me                 0 
13724label(4):
13725	put_variable             a(1) 
13726	bi_var                   a(1) 
13727	allocate                 0 
13728	callf                    c / 0     Y[] 
13729	chain                    d / 0 
13730
13731------ Test disj8 -------
13732p :-
13733	(
13734	    once t
13735	->
13736	    fail
13737	;
13738	    true
13739	).
13740
13741p / 0:
13742label(1):
13743	allocate                 2 
13744	savecut                  y(1) 
13745	try_me_else              0     0     ref(3) 
13746label(2):
13747	savecut                  y(2) 
13748	callf                    t / 0     Y[1,2] 
13749	cut                      y(2)     1 
13750	cut                      y(1)     0 
13751	failure              
13752label(3):
13753	trust_me_inline          0     Y[] 
13754label(4):
13755	exit                 
13756
13757------ Test disj8a -------
13758p :-
13759	(
13760	    once true
13761	->
13762	    fail
13763	;
13764	    true
13765	).
13766
13767p / 0:
13768label(1):
13769	savecut                  a(1) 
13770	try_me_else              0     1     ref(3) 
13771label(2):
13772	allocate                 2 
13773	savecut                  y(2) 
13774	move                     a(1)     y(1) 
13775	callf                    true / 0     Y[1,2] 
13776	cut                      y(2)     1 
13777	cut                      y(1)     0 
13778	failure              
13779label(3):
13780	trust_me                 0 
13781label(4):
13782	ret                  
13783
13784------ Test disj9 -------
13785p :-
13786	q,
13787	once var(A),
13788	p.
13789
13790p / 0:
13791label(1):
13792	allocate                 0 
13793	callf                    q / 0     Y[] 
13794	savecut                  a(1) 
13795	put_variable             a(2) 
13796	bi_var                   a(2) 
13797	cut                      a(1)     0 
13798	chain                    ref(1) 
13799
13800------ Test disj10 -------
13801p :-
13802	q,
13803	once var(A).
13804
13805p / 0:
13806label(1):
13807	allocate                 0 
13808	callf                    q / 0     Y[] 
13809	savecut                  a(1) 
13810	put_variable             a(2) 
13811	bi_var                   a(2) 
13812	cut                      a(1)     0 
13813	exit                 
13814
13815------ Test disj11 -------
13816p :-
13817	(
13818	    (
13819		a,
13820		b
13821	    ->
13822		c
13823	    )
13824	->
13825	    q
13826	).
13827
13828p / 0:
13829label(1):
13830	allocate                 2 
13831	savecut                  y(1) 
13832	savecut                  y(2) 
13833	callf                    a / 0     Y[1,2] 
13834	callf                    b / 0     Y[1,2] 
13835	cut                      y(2)     1 
13836	callf                    c / 0     Y[1] 
13837	cut                      y(1)     0 
13838	chain                    q / 0 
13839
13840------ Test disj12 -------
13841p :-
13842	(
13843	    q,
13844	    var(A)
13845	->
13846	    true
13847	).
13848
13849p / 0:
13850label(1):
13851	allocate                 1 
13852	savecut                  y(1) 
13853	callf                    q / 0     Y[1] 
13854	put_variable             a(1) 
13855	bi_var                   a(1) 
13856	cut                      y(1)     0 
13857	exit                 
13858
13859------ Test disj13 -------
13860p :-
13861	q,
13862	var(A),
13863	!,
13864	p(A).
13865
13866p / 0:
13867label(1):
13868	allocate                 1 
13869	savecut                  y(1) 
13870	callf                    q / 0     Y[1] 
13871	put_variable             a(1) 
13872	bi_var                   a(1) 
13873	cut                      y(1)     0 
13874	chain                    p / 1 
13875
13876------ Test disj14 -------
13877p :-
13878	(
13879	    a
13880	;
13881	    (
13882		var(A)
13883	    ->
13884		var(A)
13885	    )
13886	),
13887	b.
13888
13889p / 0:
13890label(1):
13891	try_me_else              0     0     ref(3) 
13892label(2):
13893	allocate                 0 
13894	callf                    a / 0     Y[] 
13895	chain                    b / 0 
13896label(3):
13897	trust_me                 0 
13898label(4):
13899	savecut                  a(1) 
13900	put_variable             a(2) 
13901	bi_var                   a(2) 
13902	cut                      a(1) 
13903	bi_var                   a(2) 
13904	jmp                      b / 0 
13905
13906------ Test disj15 -------
13907p :-
13908	(
13909	    var(A)
13910	->
13911	    var(A),
13912	    !
13913	;
13914	    (
13915		p,
13916		var(A),
13917		!
13918	    ;
13919		var(A),
13920		!
13921	    )
13922	).
13923
13924p / 0:
13925label(1):
13926	savecut                  a(1) 
13927	savecut                  a(2) 
13928	try_me_else              0     2     ref(3) 
13929label(2):
13930	put_variable             a(3) 
13931	bi_var                   a(3) 
13932	cut                      a(2) 
13933	bi_var                   a(3) 
13934	cut                      a(1) 
13935	ret                  
13936label(3):
13937	retry_me_else            0     ref(5) 
13938label(4):
13939	get_variable             1     a(1)     y(1) 
13940	callf                    ref(1)     Y[1] 
13941	put_variable             a(1) 
13942	bi_var                   a(1) 
13943	cut                      y(1)     0 
13944	exit                 
13945label(5):
13946	trust_me                 0 
13947label(6):
13948	put_variable             a(1) 
13949	bi_var                   a(1) 
13950	ret                  
13951
13952------ Test disj16 -------
13953p :-
13954	not (p, !, once (a, !, b)).
13955
13956p / 0:
13957label(1):
13958	allocate                 3 
13959	savecut                  y(1) 
13960	try_me_else              0     0     ref(3) 
13961label(2):
13962	savecut                  y(3) 
13963	callf                    ref(1)     Y[1,3] 
13964	cut                      y(3)     2 
13965	savecut                  y(2) 
13966	callf                    a / 0     Y[1,2] 
13967	cut                      y(2)     2 
13968	callf                    b / 0     Y[1,2] 
13969	cut                      y(2)     1 
13970	cut                      y(1)     0 
13971	failure              
13972label(3):
13973	trust_me_inline          0     Y[] 
13974label(4):
13975	exit                 
13976
13977------ Test disj17 -------
13978p :-
13979	(
13980	    q(A)
13981	;
13982	    r(B)
13983	).
13984
13985p / 0:
13986label(1):
13987	try_me_else              0     0     ref(3) 
13988label(2):
13989	put_variable             a(1) 
13990	jmp                      q / 1 
13991label(3):
13992	trust_me                 0 
13993label(4):
13994	put_variable             a(1) 
13995	jmp                      r / 1 
13996
13997------ Test disj18 -------
13998p1(A, B, f(C)) :-
13999	A = B,
14000	A = C,
14001	a = b,
14002	q,
14003	argc(D),
14004	D = a.
14005
14006p1 / 3:
14007label(1):
14008	get_structure            a(3)     f / 1     ref(2) 
14009	write_variable           a(3) 
14010	branch                   ref(3) 
14011label(2):
14012	read_variable            a(3) 
14013label(3):
14014	get_value                a(1)     a(2) 
14015	get_value                a(1)     a(3) 
14016	failure              
14017
14018------ Test disj19 -------
14019t :-
14020	not not (!, fail).
14021
14022t / 0:
14023label(1):
14024	allocate                 1 
14025	savecut                  y(1) 
14026	try_me_else              0     0     ref(6) 
14027label(2):
14028	savecut                  a(1) 
14029	try_me_else              0     1     ref(4) 
14030label(3):
14031	failure              
14032label(4):
14033	trust_me_inline          0     Y[1] 
14034label(5):
14035	cut                      y(1)     0 
14036	failure              
14037label(6):
14038	trust_me_inline          0     Y[] 
14039label(7):
14040	exit                 
14041
14042------ Test disj20 -------
14043t :-
14044	(
14045	    tt
14046	->
14047	    not (tt -> fail)
14048	).
14049
14050t / 0:
14051label(1):
14052	allocate                 3 
14053	savecut                  y(3) 
14054	callf                    tt / 0     Y[3] 
14055	cut                      y(3)     2 
14056	savecut                  y(1) 
14057	try_me_else              0     0     ref(3) 
14058label(2):
14059	savecut                  y(2) 
14060	callf                    tt / 0     Y[1,2] 
14061	cut                      y(2)     1 
14062	failure              
14063label(3):
14064	trust_me_inline          0     Y[] 
14065label(4):
14066	exit                 
14067
14068------ Test disj20a -------
14069t :-
14070	(
14071	    true
14072	->
14073	    not (true -> fail)
14074	).
14075
14076t / 0:
14077label(1):
14078	allocate                 3 
14079	savecut                  y(3) 
14080	callf                    true / 0     Y[3] 
14081	cut                      y(3)     2 
14082	savecut                  a(1) 
14083	try_me_else              0     1     ref(3) 
14084label(2):
14085	savecut                  y(2) 
14086	move                     a(1)     y(1) 
14087	callf                    true / 0     Y[1,2] 
14088	cut                      y(2)     1 
14089	failure              
14090label(3):
14091	trust_me_inline          0     Y[] 
14092label(4):
14093	exit                 
14094
14095------ Test disj21 -------
14096t :-
14097	(
14098	    q,
14099	    var(A)
14100	->
14101	    p(A)
14102	).
14103
14104t / 0:
14105label(1):
14106	allocate                 1 
14107	savecut                  y(1) 
14108	callf                    q / 0     Y[1] 
14109	put_variable             a(1) 
14110	bi_var                   a(1) 
14111	cut                      y(1)     0 
14112	chain                    p / 1 
14113
14114------ Test disj22 -------
14115q(A) :-
14116	(
14117	    p(a)
14118	->
14119	    r(A)
14120	).
14121
14122q / 1:
14123label(1):
14124	allocate                 2 
14125	savecut                  y(2) 
14126	move                     a(1)     y(1) 
14127	put_atom                 a(1)     a 
14128	callf                    p / 1     Y[1,2] 
14129	cut                      y(2)     1 
14130	move_chain               y(1)     a(1)     r / 1 
14131
14132------ Test disj23 -------
14133g(A, B, C) :-
14134	copy_term(B, d(A, C, D)),
14135	once D.
14136
14137g / 3:
14138label(1):
14139	shift                    a(4)     a(1)     a(2) 
14140	put_structure            a(2)     d / 3 
14141	push_value               a(4) 
14142	push_value               a(3) 
14143	allocate                 2 
14144	push_variable            y(2) 
14145	callf                    copy_term / 2     Y[2] 
14146	savecut                  y(1) 
14147	put_module               a(2)     eclipse 
14148	move_callf               y(2)     a(1)     sepia_kernel : call_ / 2     Y[1] 
14149	cut                      y(1)     0 
14150	exit                 
14151
14152------ Test disj24 -------
14153p2([A|B], C, D) :-
14154	l(C, D, E / F),
14155	q(B, C, D).
14156
14157p2 / 3:
14158label(1):
14159	allocate                 3 
14160	get_list                 a(1)     ref(2) 
14161	write_void           
14162	write_variable           y(3) 
14163	branch                   ref(3) 
14164label(2):
14165	read_void            
14166	read_variable            y(3) 
14167label(3):
14168	move                     2     a(2)     y(1) 
14169	put_structure            a(3)     (/) / 2 
14170	push_void                2 
14171	move                     a(2)     a(1) 
14172	move_callf               y(2)     a(2)     l / 3     Y[1,2,3] 
14173	move                     y(3)     a(1) 
14174	move                     2     y(1)     a(2) 
14175	chain                    q / 3 
14176
14177------ Test disj25 -------
14178p(A) :-
14179	(
14180	    (
14181		A = 1,
14182		!
14183	    ;
14184		A = 2
14185	    ),
14186	    fail
14187	;
14188	    A = 4
14189	).
14190
14191INDEXES for (nondet) disjunction [2]
141921. Quality 1.3
14193    [] - []
14194    [var] - [1, 2]
14195    [integer] - []
14196    [integer, 4] - [2]
14197    [integer, 1] - [1]
14198    [integer, 2] - [1]
14199Branch determinisms for disjunction [2]
14200    Branch 1: try
14201    Branch 2: trust
14202INDEXES for (semidet) disjunction [2, 1, 2]
142031. Quality 1.0
14204    [] - []
14205    [var] - [1]
14206    [integer] - []
14207    [integer, 1] - [1]
14208    [integer, 2] - [2]
14209Branch determinisms for disjunction [2, 1, 2]
14210    Branch 1: det
14211    Branch 2: det
14212p / 1:
14213label(1):
14214	allocate                 1 
14215	savecut                  y(1) 
14216	integer_switch           a(1) 
14217		4: 	ref(13)
14218		1: 	ref(4)
14219		2: 	ref(4)
14220		default: 	ref(fail)
14221
14222label(3):
14223	try_me_else              0     1     ref(10) 
14224label(4):
14225	integer_switch           a(1) 
14226		1: 	ref(14)
14227		2: 	ref(15)
14228		default: 	ref(fail)
14229
14230label(6):
14231	get_integer              a(1)     1 
14232label(14):
14233	cut                      y(1)     0 
14234	failure              
14235label(8):
14236	get_integer              a(1)     2 
14237label(15):
14238	failure              
14239label(10):
14240	trust_me_inline          0     Y[] 
14241label(11):
14242	get_integer              a(1)     4 
14243label(13):
14244	exit                 
14245
14246------ Test disj26 -------
14247p(A, B) :-
14248	(
14249	    var(C),
14250	    q(C)
14251	->
14252	    r(C)
14253	;
14254	    s(A, B)
14255	).
14256
14257p / 2:
14258label(1):
14259	allocate                 2 
14260	savecut                  y(1) 
14261	try_me_else              0     2     ref(3) 
14262label(2):
14263	put_global_variable      a(1)     y(2) 
14264	bi_var                   a(1) 
14265	callf                    q / 1     Y[1,2] 
14266	cut                      y(1)     2 
14267	move_chain               y(2)     a(1)     r / 1 
14268label(3):
14269	trust_me_inline          0     Y[] 
14270label(4):
14271	chain                    s / 2 
14272
14273------ Test disj27 -------
14274p3(A, B, C) :-
14275	(
14276	    A = ''
14277	->
14278	    D = "",
14279	    E = F
14280	;
14281	    D = "a",
14282	    E = [A, F]
14283	).
14284
14285INDEXES for (semidet) disjunction [2]
142861. Quality 1.0
14287    [] - [2]
14288    [atom] - [2]
14289    [atom, ] - [1]
14290    [var] - [1]
14291Branch determinisms for disjunction [2]
14292    Branch 1: det
14293    Branch 2: det
14294p3 / 3:
14295label(1):
14296	atom_switch              a(1) 
14297		'': 	ref(6)
14298		default: 	ref(5)
14299
14300label(3):
14301	get_atom                 a(1)     '' 
14302label(6):
14303label(5):
14304	ret                  
14305
14306------ Test disj28 -------
14307s :-
14308	(
14309	    A == open
14310	->
14311	    true
14312	;
14313	    (
14314		A == def
14315	    ->
14316		(
14317		    transformed(B)
14318		->
14319		    true
14320		;
14321		    true
14322		)
14323	    )
14324	).
14325
14326s / 0:
14327label(1):
14328	savecut                  a(1) 
14329	try_me_else              0     1     ref(3) 
14330label(2):
14331	put_variable             a(2) 
14332	in_get_atom              a(2)     open 
14333	cut                      a(1) 
14334	ret                  
14335label(3):
14336	trust_me                 0 
14337label(4):
14338	savecut                  a(1) 
14339	put_variable             a(2) 
14340	in_get_atom              a(2)     def 
14341	cut                      a(1) 
14342	allocate                 1 
14343	savecut                  y(1) 
14344	try_me_else              0     0     ref(6) 
14345label(5):
14346	put_variable             a(1) 
14347	callf                    transformed / 1     Y[1] 
14348	cut                      y(1)     0 
14349	exit                 
14350label(6):
14351	trust_me_inline          0     Y[] 
14352label(7):
14353	exit                 
14354
14355------ Test disj29 -------
14356test A :-
14357	!,
14358	writeln(clause1),
14359	(
14360	    A = 1
14361	->
14362	    writeln(ok)
14363	;
14364	    writeln(wrong)
14365	).
14366
14367INDEXES for (semidet) disjunction [3]
143681. Quality 1.0
14369    [] - [2]
14370    [var] - [1]
14371    [integer] - [2]
14372    [integer, 1] - [1]
14373Branch determinisms for disjunction [3]
14374    Branch 1: det
14375    Branch 2: det
14376test / 1:
14377label(1):
14378	savecut                  a(3) 
14379	get_variable             1     a(1)     y(1) 
14380	put_atom                 a(1)     clause1 
14381	put_module               a(2)     eclipse 
14382	callf                    sepia_kernel : writeln_body / 2     Y[1] 
14383	integer_switch           y(1) 
14384		1: 	ref(4)
14385		default: 	ref(6)
14386
14387label(4):
14388	move                     y(1)     a(3) 
14389	get_integer              a(3)     1 
14390	put_atom                 a(1)     ok 
14391	put_module               a(2)     eclipse 
14392	chain                    sepia_kernel : writeln_body / 2 
14393label(6):
14394	put_atom                 a(1)     wrong 
14395	put_module               a(2)     eclipse 
14396	chain                    sepia_kernel : writeln_body / 2 
14397
14398------ Test disj30 -------
14399test :-
14400	getcond(A, B),
14401	(
14402	    A
14403	->
14404	    (
14405		B
14406	    ->
14407		true
14408	    )
14409	).
14410
14411test / 0:
14412label(1):
14413	allocate                 4 
14414	put_global_variable2     a(1)     y(4)     a(2)     y(3) 
14415	callf                    getcond / 2     Y[3,4] 
14416	savecut                  y(2) 
14417	put_module               a(2)     eclipse 
14418	move_callf               y(4)     a(1)     sepia_kernel : call_ / 2     Y[2,3] 
14419	cut                      y(2)     3 
14420	savecut                  y(1) 
14421	put_module               a(2)     eclipse 
14422	move_callf               y(3)     a(1)     sepia_kernel : call_ / 2     Y[1] 
14423	cut                      y(1)     0 
14424	exit                 
14425
14426------ Test disj31 -------
14427go(A) :-
14428	A = [B, C, D],
14429	findall(E, member(E, A), F),
14430	F = [1, 2, 3],
14431	nl,
14432	write('L = '),
14433	write(A).
14434
14435go / 1:
14436label(1):
14437	get_list                 a(1)     ref(4) 
14438	write_void           
14439	write_list           
14440label(2):
14441	write_void           
14442	write_list           
14443label(3):
14444	write_void           
14445	write_nil            
14446	branch                   ref(5) 
14447label(4):
14448	read_void            
14449	read_last_list           ref(2) 
14450	read_void            
14451	read_last_list           ref(3) 
14452	read_void            
14453	read_nil             
14454label(5):
14455	get_variable             2     a(1)     y(1) 
14456	put_structure            a(2)     member / 2 
14457	push_variable            a(1) 
14458	push_value               y(1) 
14459	put_global_variable      a(3)     y(2) 
14460	put_module               a(4)     eclipse 
14461	callf                    sepia_kernel : findall_body / 4     Y[1,2] 
14462	move                     y(2)     a(1) 
14463	get_list                 a(1)     ref(8) 
14464	write_integer            1 
14465	write_list           
14466label(6):
14467	write_integer            2 
14468	write_list           
14469label(7):
14470	write_integer            3 
14471	write_nil            
14472	branch                   ref(9) 
14473label(8):
14474	read_integer             1 
14475	read_last_list           ref(6) 
14476	read_integer             2 
14477	read_last_list           ref(7) 
14478	read_integer             3 
14479	read_nil             
14480label(9):
14481	callf                    nl / 0     Y[1] 
14482	put_atom                 a(1)     'L = ' 
14483	put_module               a(2)     eclipse 
14484	callf                    sepia_kernel : write_ / 2     Y[1] 
14485	put_module               a(2)     eclipse 
14486	move_chain               y(1)     a(1)     sepia_kernel : write_ / 2 
14487
14488------ Test disj33 -------
14489c(A, B) :-
14490	(
14491	    A = B
14492	->
14493	    a
14494	;
14495	    b
14496	),
14497	c.
14498
14499c / 2:
14500label(1):
14501	savecut                  a(3) 
14502	try_me_else              0     3     ref(3) 
14503label(2):
14504	get_value                a(1)     a(2) 
14505	cut                      a(3) 
14506	allocate                 0 
14507	callf                    a / 0     Y[] 
14508	chain                    c / 0 
14509label(3):
14510	trust_me                 0 
14511label(4):
14512	allocate                 0 
14513	callf                    b / 0     Y[] 
14514	chain                    c / 0 
14515
14516------ Test disj34 -------
14517producer(A) :-
14518	random(B),
14519	(
14520	    B > 0
14521	->
14522	    A = [B|C]
14523	;
14524	    A = [zero|C]
14525	),
14526	producer(C).
14527
14528INDEXES for (nondet) disjunction [3]
145291. Quality 1.5
14530    [] - [1]
14531    [list] - [1, 2]
14532    [var] - [1, 2]
14533Branch determinisms for disjunction [3]
14534    Branch 1: try
14535    Branch 2: trust
14536producer / 1:
14537label(1):
14538	get_variable             3     a(1)     y(2) 
14539	put_global_variable_callf     a(1)     y(3)     random / 1     Y[2,3] 
14540	savecut                  a(1) 
14541	list_switch              y(2)     ref(2)     ref(3)     ref(3) 
14542label(2):
14543	try_me_else              0     1     ref(5) 
14544label(3):
14545	put_integer              a(2)     0 
14546	move                     y(3)     a(3) 
14547	bi_gt                    a(3)     a(2)     eclipse     48 
14548	cut                      a(1)     3 
14549	move                     y(2)     a(1) 
14550	get_list                 a(1)     ref(4) 
14551	write_value              a(3) 
14552	write_variable           y(1) 
14553	move_chain               y(1)     a(1)     ref(1) 
14554label(4):
14555	read_value               a(3) 
14556	read_variable            y(1) 
14557	move_chain               y(1)     a(1)     ref(1) 
14558label(5):
14559	trust_me_inline          0     Y[2] 
14560label(6):
14561	move                     y(2)     a(1) 
14562	get_list                 a(1)     ref(7) 
14563	write_atom               zero 
14564	write_variable           y(1) 
14565	move_chain               y(1)     a(1)     ref(1) 
14566label(7):
14567	read_atom                zero 
14568	read_variable            y(1) 
14569	move_chain               y(1)     a(1)     ref(1) 
14570
14571------ Test disj35 -------
14572nm(A, [A|B]) :-
14573	true,
14574	!,
14575	fail.
14576nm(A, [B|C]) :-
14577	!,
14578	nm(A, C).
14579nm(A, []).
14580
14581INDEXES for (nondet) disjunction [2]
145821. Quality 1.5
14583    [] - []
14584    [[]] - [3]
14585    [list] - [1, 2]
14586    [var] - [1, 2]
14587Branch determinisms for disjunction [2]
14588    Branch 1: try
14589    Branch 2: trust
14590    Branch 3: det
14591nm / 2:
14592label(1):
14593	savecut                  a(3) 
14594	list_switch              a(2)     ref(13)     ref(14)     ref(fail) 
14595label(13):
14596	try                      0     3     ref(3) 
14597	trust                    0     ref(7) 
14598label(3):
14599	get_list                 a(2)     ref(4) 
14600	write_value              a(1) 
14601	write_void           
14602	branch                   ref(5) 
14603label(4):
14604	read_value               a(1) 
14605label(5):
14606	get_variable             1     a(3)     y(1) 
14607	callf                    true / 0     Y[1] 
14608	cut                      y(1)     0 
14609	failure              
14610label(7):
14611	get_list                 a(2)     ref(8) 
14612	write_void           
14613	write_variable           a(2) 
14614	jmp                      ref(1) 
14615label(8):
14616	read_void            
14617	read_variable            a(2) 
14618	jmp                      ref(1) 
14619label(11):
14620	get_nil                  a(2) 
14621label(14):
14622	ret                  
14623
14624------ Test disj36 -------
14625nm(A, [A|B]) :-
14626	!,
14627	fail.
14628nm(A, [B|C]) :-
14629	!,
14630	nm(A, C).
14631nm(A, []).
14632
14633INDEXES for (nondet) disjunction [2]
146341. Quality 1.3
14635    [] - []
14636    [[]] - [3]
14637    [list] - [1, 2]
14638    [var] - [1]
14639Branch determinisms for disjunction [2]
14640    Branch 1: try
14641    Branch 2: trust
14642    Branch 3: det
14643nm / 2:
14644label(1):
14645	savecut                  a(3) 
14646	list_switch              a(2)     ref(13)     ref(14)     ref(fail) 
14647label(3):
14648	get_list                 a(2)     ref(4) 
14649	write_value              a(1) 
14650	write_void           
14651	cut                      a(3) 
14652	failure              
14653label(4):
14654	read_value               a(1) 
14655	cut                      a(3) 
14656	failure              
14657label(7):
14658	get_list                 a(2)     ref(8) 
14659	write_void           
14660	write_variable           a(2) 
14661	jmp                      ref(1) 
14662label(8):
14663	read_void            
14664	read_variable            a(2) 
14665	jmp                      ref(1) 
14666label(11):
14667	get_nil                  a(2) 
14668label(14):
14669	ret                  
14670label(13):
14671	try                      0     3     ref(3) 
14672	trust                    0     ref(7) 
14673
14674------ Test alloc(1) -------
14675p(A) :-
14676	A = foo(2, 3, 4, 5).
14677
14678p / 1:
14679label(1):
14680	get_structure            a(1)     foo / 4     ref(2) 
14681	write_integer2           2     3 
14682	write_integer2           4     5 
14683	ret                  
14684label(2):
14685	read_integer             2 
14686	read_integer             3 
14687	read_integer             4 
14688	read_integer             5 
14689	ret                  
14690
14691------ Test alloc(2) -------
14692p :-
14693	A = foo(2, 3, 4, 5),
14694	q(A).
14695
14696p / 0:
14697label(1):
14698	put_structure            a(1)     foo / 4 
14699	write_integer2           2     3 
14700	write_integer2           4     5 
14701	jmp                      q / 1 
14702
14703------ Test alloc(3) -------
14704p :-
14705	A = foo(2, 3),
14706	q(A).
14707p :-
14708	A = foo(2, 3, 4, 5),
14709	r(A).
14710
14711p / 0:
14712label(1):
14713	try_me_else              0     0     ref(3) 
14714label(2):
14715	put_structure            a(1)     foo / 2 
14716	write_integer2           2     3 
14717	jmp                      q / 1 
14718label(3):
14719	trust_me                 0 
14720label(4):
14721	put_structure            a(1)     foo / 4 
14722	write_integer2           2     3 
14723	write_integer2           4     5 
14724	jmp                      r / 1 
14725
14726------ Test alloc(4) -------
14727p :-
14728	A = foo(2, 3, 4, 5),
14729	r(A).
14730p :-
14731	A = foo(2, 3),
14732	q(A).
14733
14734p / 0:
14735label(1):
14736	try_me_else              0     0     ref(3) 
14737label(2):
14738	put_structure            a(1)     foo / 4 
14739	write_integer2           2     3 
14740	write_integer2           4     5 
14741	jmp                      r / 1 
14742label(3):
14743	trust_me                 0 
14744label(4):
14745	put_structure            a(1)     foo / 2 
14746	write_integer2           2     3 
14747	jmp                      q / 1 
14748
14749------ Test alloc(5) -------
14750p :-
14751	(
14752	    A = foo(2, 3, 4, 5),
14753	    r(A)
14754	;
14755	    A = foo(2, 3),
14756	    q(A)
14757	).
14758
14759p / 0:
14760label(1):
14761	try_me_else              0     0     ref(3) 
14762label(2):
14763	put_structure            a(1)     foo / 4 
14764	write_integer2           2     3 
14765	write_integer2           4     5 
14766	jmp                      r / 1 
14767label(3):
14768	trust_me                 0 
14769label(4):
14770	put_structure            a(1)     foo / 2 
14771	write_integer2           2     3 
14772	jmp                      q / 1 
14773
14774------ Test alloc(6) -------
14775p(A) :-
14776	A = bar(2),
14777	(
14778	    B = foo(2, 3, 4, 5, 6),
14779	    r(B)
14780	;
14781	    B = foo(2, 3),
14782	    q(B)
14783	).
14784
14785p / 1:
14786label(1):
14787	get_structure            a(1)     bar / 1     ref(2) 
14788	write_integer            2 
14789	branch                   ref(3) 
14790label(2):
14791	read_integer             2 
14792label(3):
14793	try_me_else              0     0     ref(5) 
14794label(4):
14795	put_structure            a(1)     foo / 5 
14796	write_integer2           2     3 
14797	write_integer2           4     5 
14798	push_integer             6 
14799	jmp                      r / 1 
14800label(5):
14801	trust_me                 0 
14802label(6):
14803	put_structure            a(1)     foo / 2 
14804	write_integer2           2     3 
14805	jmp                      q / 1 
14806
14807------ Test alloc(7) -------
14808p(A) :-
14809	(
14810	    A == a,
14811	    B = foo(2, 3, 4, 5, 6),
14812	    r(B)
14813	;
14814	    (
14815		A == b,
14816		B = foo(2, 3),
14817		q(B)
14818	    ;
14819		A == c,
14820		B == foo(2, 3, 4, 5),
14821		s(B)
14822	    )
14823	).
14824
14825INDEXES for (semidet) disjunction [2]
148261. Quality 0.8
14827    [] - []
14828    [atom] - []
14829    [atom, a] - [1]
14830    [atom, b] - [2]
14831    [atom, c] - [3]
14832Branch determinisms for disjunction [2]
14833    Branch 1: det
14834    Branch 2: det
14835    Branch 3: det
14836p / 1:
14837label(1):
14838	atom_switch              a(1) 
14839		a: 	ref(10)
14840		b: 	ref(11)
14841		c: 	ref(12)
14842		default: 	ref(fail)
14843
14844	branch                   ref(fail) 
14845label(4):
14846	in_get_atom              a(1)     a 
14847label(10):
14848	put_structure            a(1)     foo / 5 
14849	write_integer2           2     3 
14850	write_integer2           4     5 
14851	push_integer             6 
14852	jmp                      r / 1 
14853label(6):
14854	in_get_atom              a(1)     b 
14855label(11):
14856	put_structure            a(1)     foo / 2 
14857	write_integer2           2     3 
14858	jmp                      q / 1 
14859label(8):
14860	in_get_atom              a(1)     c 
14861label(12):
14862	put_variable             a(1) 
14863	put_structure            a(2)     foo / 4 
14864	write_integer2           2     3 
14865	write_integer2           4     5 
14866	get_matched_value        a(1)     a(2) 
14867	jmp                      s / 1 
14868
14869------ Test alloc(8) -------
14870p(A) :-
14871	(
14872	    A == a,
14873	    B = foo(2, 6),
14874	    r(B)
14875	;
14876	    (
14877		A == b,
14878		B = foo(2, 3),
14879		q(B)
14880	    ;
14881		A == c,
14882		B == foo(2, 3, 4, 5),
14883		s(B)
14884	    )
14885	).
14886
14887INDEXES for (semidet) disjunction [2]
148881. Quality 0.8
14889    [] - []
14890    [atom] - []
14891    [atom, a] - [1]
14892    [atom, b] - [2]
14893    [atom, c] - [3]
14894Branch determinisms for disjunction [2]
14895    Branch 1: det
14896    Branch 2: det
14897    Branch 3: det
14898p / 1:
14899label(1):
14900	atom_switch              a(1) 
14901		a: 	ref(10)
14902		b: 	ref(11)
14903		c: 	ref(12)
14904		default: 	ref(fail)
14905
14906	branch                   ref(fail) 
14907label(4):
14908	in_get_atom              a(1)     a 
14909label(10):
14910	put_structure            a(1)     foo / 2 
14911	write_integer2           2     6 
14912	jmp                      r / 1 
14913label(6):
14914	in_get_atom              a(1)     b 
14915label(11):
14916	put_structure            a(1)     foo / 2 
14917	write_integer2           2     3 
14918	jmp                      q / 1 
14919label(8):
14920	in_get_atom              a(1)     c 
14921label(12):
14922	put_variable             a(1) 
14923	put_structure            a(2)     foo / 4 
14924	write_integer2           2     3 
14925	write_integer2           4     5 
14926	get_matched_value        a(1)     a(2) 
14927	jmp                      s / 1 
14928
14929------ Test alloc(10) -------
14930p :-
14931	(
14932	    A = foo(2, 3, 4, 5),
14933	    r(A, B)
14934	;
14935	    A = foo(2, 3),
14936	    q(A)
14937	),
14938	s(B).
14939
14940p / 0:
14941label(1):
14942	try_me_else              0     0     ref(3) 
14943label(2):
14944	put_structure            a(1)     foo / 4 
14945	write_integer2           2     3 
14946	write_integer2           4     5 
14947	allocate                 1 
14948	put_global_variable_callf     a(2)     y(1)     r / 2     Y[1] 
14949	move_chain               y(1)     a(1)     s / 1 
14950label(3):
14951	trust_me                 0 
14952label(4):
14953	put_structure            a(1)     foo / 2 
14954	write_integer2           2     3 
14955	allocate                 1 
14956	callf                    q / 1     Y[] 
14957	gc_test                  1 
14958	put_global_variable      y(1) 
14959	move_chain               y(1)     a(1)     s / 1 
14960
14961------ Test alloc(11) -------
14962p(A, A, foo(2, 3, 4, 5)).
14963
14964p / 3:
14965label(1):
14966	get_value                a(2)     a(1) 
14967	get_structure            a(3)     foo / 4     ref(2) 
14968	write_integer2           2     3 
14969	write_integer2           4     5 
14970	ret                  
14971label(2):
14972	read_integer             2 
14973	read_integer             3 
14974	read_integer             4 
14975	read_integer             5 
14976	ret                  
14977
14978------ Test alloc(12) -------
14979p(bar(A, A), foo(2, 3, 4, 5)).
14980
14981p / 2:
14982label(1):
14983	get_structure            a(1)     bar / 2     ref(2) 
14984	write_variable           a(1) 
14985	write_value              a(1) 
14986	branch                   ref(3) 
14987label(2):
14988	read_variable            a(1) 
14989	read_value               a(1) 
14990label(3):
14991	get_structure            a(2)     foo / 4     ref(4) 
14992	write_integer2           2     3 
14993	write_integer2           4     5 
14994	ret                  
14995label(4):
14996	read_integer             2 
14997	read_integer             3 
14998	read_integer             4 
14999	read_integer             5 
15000	ret                  
15001