Пример #1
0
void YAPQuery::openQuery() {
  CACHE_REGS
  arity_t arity = ap->ArityOfPE;
  if (arity) {
    Term *ts;
    Term t = goal;
    if (IsPairTerm(t)) {
      ts = RepPair(t);
    } else {
      ts = RepAppl(t) + 1;
    }
    for (arity_t i = 0; i < arity; i++) {
      XREGS[i + 1] = ts[i];
    }
  }
  // oq = LOCAL_execution;
  //  LOCAL_execution = this;
  q_open = true;
  q_state = 0;
  q_flags = true; // PL_Q_PASS_EXCEPTION;

  q_p = P;
  q_cp = CP;
  // make sure this is safe
  q_handles = Yap_StartSlots();
}
Пример #2
0
int beam_write(USES_REGS1) {
  Yap_StartSlots();
  Yap_plwrite(ARG1, GLOBAL_Stream + LOCAL_c_output_stream, 0, 0,
              GLOBAL_MaxPriority);
  Yap_CloseSlots();
  Yap_RaiseException();
  return (TRUE);
}
Пример #3
0
int beam_write (void)
{
    Yap_StartSlots();
    Yap_plwrite (ARG1, NULL, 0, 0, 1200);
    Yap_CloseSlots();
    if (EX != 0L) {
        Term ball = Yap_PopTermFromDB(EX);
        EX = 0L;
        Yap_JumpToEnv(ball);
        return(FALSE);
    }
    return (TRUE);
}
Пример #4
0
static Int read_stream_to_codes(USES_REGS1) {
  int sno = Yap_CheckStream(ARG1, Input_Stream_f,
                            "reaMkAtomTerm (AtomEofd_line_to_codes/2");
  CELL *HBASE = HR;
  CELL *h0 = &ARG4;

  if (sno < 0)
    return FALSE;
  while (!(GLOBAL_Stream[sno].status & Eof_Stream_f)) {
    /* skip errors */
    Int ch = GLOBAL_Stream[sno].stream_getc(sno);
    Term t;
    if (ch == EOFCHAR)
      break;
    t = MkIntegerTerm(ch);
    h0[0] = AbsPair(HR);
    *HR = t;
    HR += 2;
    h0 = HR - 1;
    yhandle_t news, news1, st = Yap_StartSlots();
    if (HR >= ASP - 1024) {
      RESET_VARIABLE(h0);
      news = Yap_InitSlot(AbsPair(HBASE));
      news1 = Yap_InitSlot((CELL)(h0));
      if (!Yap_gcl((ASP - HBASE) * sizeof(CELL), 3, ENV, Yap_gcP())) {
        Yap_Error(RESOURCE_ERROR_STACK, ARG1, "read_stream_to_codes/3");
        return false;
      }
      /* build a legal term again */
      h0 = (CELL *)(Yap_GetFromSlot(news1));
      HBASE = RepPair(Yap_GetFromSlot(news));
    }
    Yap_CloseSlots(st);
  }
  UNLOCK(GLOBAL_Stream[sno].streamlock);
  if (HR == HBASE)
    return Yap_unify(ARG2, ARG3);
  RESET_VARIABLE(HR - 1);
  Yap_unify(HR[-1], ARG3);
  return Yap_unify(AbsPair(HBASE), ARG2);
}