Example #1
0
/**
 * Generate code for a group of mutually recursive definitions
 */
void DocCompiler::generateRec(Tree sig, Tree var, Tree le, int priority)
{
  int N = len(le);

  vector<bool> used(N);
  vector<int> delay(N);
  vector<string> vname(N);
  vector<string> ctype(N);

  // prepare each element of a recursive definition
  for(int i = 0; i < N; i++)
  {
    Tree e = sigProj(i, sig);     // recreate each recursive definition

    if(fOccMarkup.retrieve(e))
    {
      // this projection is used
      used[i] = true;
      // cerr << "generateRec : used[" << i << "] = true" << endl;
      getTypedNames(getCertifiedSigType(e), "r", ctype[i], vname[i]);
      gDocNoticeFlagMap["recursigs"] = true;
      // cerr << "- r : generateRec setVectorNameProperty : \"" << vname[i] << "\"" << endl;
      setVectorNameProperty(e, vname[i]);
      delay[i] = fOccMarkup.retrieve(e)->getMaxDelay();
    }
    else
    {
      // this projection is not used therefore
      // we should not generate code for it
      used[i] = false;
      // cerr << "generateRec : used[" << i << "] = false" << endl;
    }
  }

  // generate delayline for each element of a recursive definition
  for(int i = 0; i < N; i++)
  {
    if(used[i])
    {
      generateDelayLine(ctype[i], vname[i], delay[i], CS(nth(le, i), priority));
    }
  }
}
Example #2
0
//! Fabrique une liste de n mem projections d'un groupe récursif
siglist makeMemSigProjList (Tree t, int n)
{
	siglist l(n);
	for (int i = 0; i < n; i++) l[i] = sigDelay1(sigProj(i, t));
	return l;
}