support expand group of clauses

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1031 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc
2004-03-31 01:03:10 +00:00
parent 545b12a808
commit c853e894c0
8 changed files with 192 additions and 77 deletions

View File

@@ -11,8 +11,11 @@
* File: amasm.c *
* comments: abstract machine assembler *
* *
* Last rev: $Date: 2004-03-10 14:59:55 $ *
* $Log: not supported by cvs2svn $ *
* Last rev: $Date: 2004-03-31 01:03:09 $ *
* $Log: not supported by cvs2svn $
* Revision 1.58 2004/03/10 14:59:55 vsc
* optimise -> for type tests
* *
* *
*************************************************************************/
#ifdef SCCS
@@ -734,18 +737,6 @@ a_r(CELL arnd2, op_numbers opcode, yamop *code_p, int pass_no)
return code_p;
}
inline static yamop *
a_sp(op_numbers opcode, COUNT sv, yamop *code_p, int pass_no, struct intermediates *cip)
{
if (pass_no) {
code_p->opc = emit_op(opcode);
code_p->u.sp.s = sv-1;
code_p->u.sp.p = cip->CurrentPred;
}
GONEXT(dp);
return code_p;
}
static yamop *
check_alloc(clause_info *clinfo, yamop *code_p, int pass_no, struct intermediates *cip)
{
@@ -1191,25 +1182,32 @@ a_hx(op_numbers opcode, union clause_obj *cl_u, int log_update, yamop *code_p, i
{
register CELL i, imax;
register CELL *seq_ptr = (CELL *)cip->cpc->rnd2;
int j = 0;
imax = cip->cpc->rnd1;
if (pass_no) {
code_p->opc = emit_op(opcode);
code_p->u.sl.s = emit_c(imax);
code_p->u.sl.l = emit_a(cip->cpc->rnd2);
code_p->u.sssl.s = emit_c(imax);
code_p->u.sssl.l = emit_a(cip->cpc->rnd2);
if (log_update) {
init_log_upd_table(ClauseCodeToLogUpdIndex(cip->cpc->rnd2), cl_u);
} else {
init_static_table(ClauseCodeToStaticIndex(cip->cpc->rnd2), cl_u);
}
}
GONEXT(sl);
if (pass_no) {
for (i = 0; i < imax; i++) {
yamop *ipc = (yamop *)seq_ptr[1];
a_pair(seq_ptr, pass_no, cip);
if (ipc != FAILCODE) {
j++;
}
seq_ptr += 2;
}
code_p->u.sssl.e = j;
code_p->u.sssl.w = 0;
}
GONEXT(sssl);
return code_p;
}
@@ -1222,15 +1220,16 @@ a_if(op_numbers opcode, union clause_obj *cl_u, int log_update, yamop *code_p, i
imax = cip->cpc->rnd1;
if (pass_no) {
code_p->opc = emit_op(opcode);
code_p->u.sl.s = emit_count(imax);
code_p->u.sl.l = emit_a(cip->cpc->rnd2);
code_p->u.sssl.s = code_p->u.sssl.e = emit_count(imax);
code_p->u.sssl.w = 0;
code_p->u.sssl.l = emit_a(cip->cpc->rnd2);
if (log_update) {
init_log_upd_table(ClauseCodeToLogUpdIndex(cip->cpc->rnd2), cl_u);
} else {
init_static_table(ClauseCodeToStaticIndex(cip->cpc->rnd2), cl_u);
}
}
GONEXT(sl);
GONEXT(sssl);
if (pass_no) {
CELL lab, lab0;
for (i = 0; i < imax; i++) {