FAUST compiler  0.9.9.6b8
Functions | Variables
sigprint.cpp File Reference
#include <stdio.h>
#include "signals.hh"
#include "sigtype.hh"
#include "sigtyperules.hh"
Include dependency graph for sigprint.cpp:

Go to the source code of this file.

Functions

void printSigType (int n, int v, int c)
 
void printSignal (Tree sig, FILE *out, int prec)
 

Variables

const char * binopname []
 
int binopprec []
 

Function Documentation

void printSignal ( Tree  sig,
FILE *  out,
int  prec 
)

Definition at line 85 of file sigprint.cpp.

References hd(), isList(), isProj(), isRec(), isRef(), isSigAttach(), isSigBinOp(), isSigDelay1(), isSigDocAccessTbl(), isSigDocConstantTbl(), isSigDocWriteTbl(), isSigFixDelay(), isSigFloatCast(), isSigGen(), isSigInput(), isSigInt(), isSigIntCast(), isSigOutput(), isSigPrefix(), isSigRDTbl(), isSigReal(), isSigTable(), isSigWRTbl(), print(), printSignal(), and tl().

Referenced by calcDeBruijn2Sym(), ScalarCompiler::generateCode(), main(), and printSignal().

86 {
87  int i;
88  double r;
89  Tree x, y, z, u, le, id;
90 
91  if ( isSigInt(sig, &i) ) { fprintf(out, "%d", i); }
92  else if ( isSigReal(sig, &r) ) { fprintf(out, "%f", r); }
93  else if ( isSigInput(sig, &i) ) { fprintf(out, "IN%d", i); }
94  else if ( isSigOutput(sig, &i, x) ) { fprintf(out, "OUT%d := ", i); printSignal(x, out, 0); }
95 
96  else if ( isSigBinOp(sig, &i, x, y) ) {
97  if (prec > binopprec[i]) fputs("(", out);
98  printSignal(x,out,binopprec[i]); fputs(binopname[i], out); printSignal(y, out, binopprec[i]);
99  if (prec > binopprec[i]) fputs(")", out);
100  }
101  else if ( isSigDelay1(sig, x) ) { fputs("mem(", out); printSignal(x,out,0); fputs(")", out); }
102  else if ( isSigPrefix(sig, x, y) ) { fputs("prefix(", out); printSignal(x,out,0); fputs(",", out); printSignal(y,out,0); fputs(")", out); }
103  else if ( isSigAttach(sig, x, y) ) { fputs("attach(", out); printSignal(x,out,0); fputs(",", out); printSignal(y,out,0); fputs(")", out); }
104  else if ( isSigFixDelay(sig, x, y) ) {
105  if (prec > 4) fputs("(", out);
106  printSignal(x,out,4); fputs("@", out); printSignal(y, out, 4);
107  if (prec > 4) fputs(")", out);
108  }
109 
110  else if ( isProj(sig, &i, x) ) { printSignal(x,out,prec); fprintf(out, "#%d", i); }
111  else if ( isRef(sig, i) ) { fprintf(out, "$%d", i); }
112  else if ( isRef(sig, x) ) { print(x, out); }
113  else if ( isRec(sig, le)) { fputs("\\_.", out); printSignal(le, out, prec); }
114  else if ( isRec(sig, x, le)) { fputs("\\", out); print(x,out); fputs(".", out); printSignal(le, out, prec); }
115 
116  else if ( isSigTable(sig, id, x, y) ) { fputs("table(", out); printSignal(x,out,0); fputc(',', out); printSignal(y,out,0); fputc(')', out); }
117  else if ( isSigWRTbl(sig, id, x, y, z) ){ printSignal(x,out,0); fputc('[',out); printSignal(y,out,0); fputs("] := (", out); printSignal(z,out,0); fputc(')', out); }
118  else if ( isSigRDTbl(sig, x, y) ) { printSignal(x,out,0); fputc('[', out); printSignal(y,out,0); fputc(']', out); }
119 
120  else if (isSigDocConstantTbl(sig,x,y)) { fputs("sigDocConstantTbl(", out); printSignal(x,out,0); fputc(',', out);
121  printSignal(y,out,0); fputc(')', out); }
122 
123  else if (isSigDocWriteTbl(sig,x,y,z,u)) { fputs("sigDocWriteTbl(", out); printSignal(x,out,0); fputc(',', out);
124  printSignal(y,out,0); fputc(',', out);
125  printSignal(z,out,0); fputc(',', out);
126  printSignal(u,out,0); fputc(')', out); }
127 
128  else if (isSigDocAccessTbl(sig,x,y)) { fputs("sigDocAccessTbl(", out); printSignal(x,out,0); fputc(',', out);
129  printSignal(y,out,0); fputc(')', out); }
130 
131 
132  else if ( isSigGen(sig, x) ) { printSignal(x,out,prec); }
133 
134  else if ( isSigIntCast(sig, x) ) { fputs("int(", out); printSignal(x,out,0); fputs(")", out); }
135  else if ( isSigFloatCast(sig, x) ) { fputs("float(", out); printSignal(x,out,0); fputs(")", out); }
136 
137  else if (isList(sig)) {
138  char sep = '{';
139  do {
140  fputc(sep, out);
141  printSignal(hd(sig), out, 0);
142  sep=',';
143  sig = tl(sig);
144  } while (isList(sig));
145  fputc('}', out);
146  }
147  else
148  print(sig, out);
149 }
bool isSigRDTbl(Tree s, Tree &t, Tree &i)
Definition: signals.cpp:77
bool isSigPrefix(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:66
A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches.
Definition: tree.hh:109
bool isSigInput(Tree t, int *i)
Definition: signals.cpp:48
bool isSigFixDelay(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:62
Tree hd(Tree l)
Definition: list.hh:133
bool isSigGen(Tree t, Tree &x)
Definition: signals.cpp:91
bool isSigReal(Tree t, double *r)
Definition: signals.cpp:44
bool isRef(Tree t, int &level)
is t a de Bruijn recursive reference
bool isSigDocConstantTbl(Tree t, Tree &n, Tree &sig)
Definition: signals.cpp:99
bool isList(Tree l)
Definition: list.hh:138
const char * binopname[]
Definition: sigprint.cpp:71
bool isSigTable(Tree t, Tree &id, Tree &n, Tree &sig)
Definition: signals.cpp:85
void printSignal(Tree sig, FILE *out, int prec)
Definition: sigprint.cpp:85
bool isSigBinOp(Tree s, int *op, Tree &x, Tree &y)
Definition: signals.cpp:126
bool isSigAttach(Tree t, Tree &t0, Tree &t1)
Definition: signals.cpp:291
bool isSigDocAccessTbl(Tree t, Tree &tbl, Tree &ridx)
Definition: signals.cpp:107
bool isSigWRTbl(Tree u, Tree &id, Tree &t, Tree &i, Tree &s)
Definition: signals.cpp:81
bool isRec(Tree t, Tree &body)
is t a de Bruijn recursive tree
bool isSigInt(Tree t, int *i)
Definition: signals.cpp:41
int binopprec[]
Definition: sigprint.cpp:78
bool isSigDocWriteTbl(Tree t, Tree &n, Tree &sig, Tree &widx, Tree &wsig)
Definition: signals.cpp:103
bool isSigDelay1(Tree t, Tree &t0)
Definition: signals.cpp:58
bool isSigFloatCast(Tree t)
Definition: signals.cpp:187
bool isSigIntCast(Tree t)
Definition: signals.cpp:184
bool isProj(Tree t, int *i, Tree &rgroup)
Definition: signals.cpp:151
Tree tl(Tree l)
Definition: list.hh:134
bool isSigOutput(Tree t, int *i, Tree &t0)
Definition: signals.cpp:52
void print(Tree t, FILE *out)
Definition: list.cpp:154

Here is the call graph for this function:

Here is the caller graph for this function:

void printSigType ( int  n,
int  v,
int  c 
)

Definition at line 64 of file sigprint.cpp.

65 {
66  putchar("NR"[n]);
67  putchar("KB S"[v]);
68  putchar("CI X"[c]);
69 }

Variable Documentation

const char* binopname[]
Initial value:
= {
"+", "-", "*", "/", "%",
"<<", ">>",
">", "<", ">=", "<=", "==", "!=",
"&", "|", "^"
}

Definition at line 71 of file sigprint.cpp.

int binopprec[]
Initial value:
= {
2, 2, 3, 3, 3,
1, 1,
1, 1, 1, 1, 1, 1,
1, 1, 1
}

Definition at line 78 of file sigprint.cpp.