Example #1
0
/*
 * This program is used to map special classes like integer into
 * L&O programs
 * This program is only safe before the first GC
 */
ptrI defineSpecialProg(const char *name) {
#ifdef MEMTRACE
  extern long gcCount;
  long gCount = gcCount;
#endif

  insWord proc_seq[] = {       // (gVar,_,tVar) :- name%3(gVar,name,tVar)
    instrhb(mAlit, 2, 0),      /* name */
    instrhb(lkawl, 3, 1),      /* name%3 */
  };
  ptrI obj = buildCode(proc_seq, 3, NumberOf(proc_seq), 2);
  ptrI nameEnum = newEnumSym(name);

  updateCodeLit(codeV(obj), 0, nameEnum);  /* name */

  ptrI nameProg = newProgLbl(name, 3);  /* name%3 */

  defineProg(nameProg, obj);
  updateCodeLit(codeV(obj), 1, nameProg);

#ifdef MEMTRACE
  assert(gcCount == gCount);
#endif
  return obj;
}
Example #2
0
static ptrI buildCode(insPo cd, uint16 arity, unsigned long cdlen, unsigned long litCnt) {
  ptrI code = permCode(cdlen, litCnt, NULL);
  codePo pc = codeV(code);

  memcpy(pc->data, cd, cdlen * sizeof(insWord));
  pc->arity = arity;
  return code;
}
Example #3
0
vector<MamaInstruction> TupleNode::codeC(const Environment &e, int sd) const {
    ENTERED("codeC");
    // Slide 99
    if (!_compiler.testFlag(Compiler::OptimizeConsNodeClosure)) {
        return Node::codeC(e, sd);
    }
    vector<MI> r(codeV(e, sd));
    return r /= "tuple_C";
}