sigprint.cpp File Reference

#include <stdio.h>
#include "signals.hh"
#include "sigtype.hh"
#include "sigtyperules.hh"
Include dependency graph for sigprint.cpp:
This graph shows which files directly or indirectly include this file:

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().

00086 {
00087     int     i;
00088     double  r;
00089     Tree     x, y, z, u, le, id;
00090         
00091          if ( isSigInt(sig, &i) )           { fprintf(out, "%d", i);    }
00092     else if ( isSigReal(sig, &r) )          { fprintf(out, "%f", r);    }
00093     else if ( isSigInput(sig, &i) )         { fprintf(out, "IN%d", i);  }
00094     else if ( isSigOutput(sig, &i, x) )     { fprintf(out, "OUT%d := ", i); printSignal(x, out, 0); }
00095     
00096     else if ( isSigBinOp(sig, &i, x, y) )   { 
00097         if (prec > binopprec[i]) fputs("(", out); 
00098         printSignal(x,out,binopprec[i]); fputs(binopname[i], out); printSignal(y, out, binopprec[i]); 
00099         if (prec > binopprec[i]) fputs(")", out);   
00100     }
00101     else if ( isSigDelay1(sig, x) )         { fputs("mem(", out); printSignal(x,out,0); fputs(")", out);        }
00102     else if ( isSigPrefix(sig, x, y) )      { fputs("prefix(", out); printSignal(x,out,0); fputs(",", out);  printSignal(y,out,0); fputs(")", out);     }
00103     else if ( isSigAttach(sig, x, y) )      { fputs("attach(", out); printSignal(x,out,0); fputs(",", out);  printSignal(y,out,0); fputs(")", out);     }
00104     else if ( isSigFixDelay(sig, x, y) )    { 
00105         if (prec > 4) fputs("(", out); 
00106         printSignal(x,out,4); fputs("@", out); printSignal(y, out, 4); 
00107         if (prec > 4) fputs(")", out);  
00108     }
00109 
00110     else if ( isProj(sig, &i, x) )          { printSignal(x,out,prec); fprintf(out, "#%d", i);      }
00111     else if ( isRef(sig, i) )               { fprintf(out, "$%d", i);   }
00112     else if ( isRef(sig, x) )               { print(x, out);            }
00113     else if ( isRec(sig, le))               { fputs("\\_.", out); printSignal(le, out, prec);   }
00114     else if ( isRec(sig, x, le))            { fputs("\\", out); print(x,out); fputs(".", out); printSignal(le, out, prec);  }
00115     
00116     else if ( isSigTable(sig, id, x, y) )   { fputs("table(", out); printSignal(x,out,0); fputc(',', out); printSignal(y,out,0); fputc(')', out);   }
00117     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);   }
00118     else if ( isSigRDTbl(sig, x, y) )       { printSignal(x,out,0); fputc('[', out); printSignal(y,out,0); fputc(']', out);   }
00119 
00120     else if (isSigDocConstantTbl(sig,x,y))  { fputs("sigDocConstantTbl(", out); printSignal(x,out,0); fputc(',', out);
00121                                                                                 printSignal(y,out,0); fputc(')', out);   }
00122 
00123     else if (isSigDocWriteTbl(sig,x,y,z,u)) { fputs("sigDocWriteTbl(", out);    printSignal(x,out,0); fputc(',', out);
00124                                                                                 printSignal(y,out,0); fputc(',', out);
00125                                                                                 printSignal(z,out,0); fputc(',', out);
00126                                                                                 printSignal(u,out,0); fputc(')', out);   }
00127 
00128     else if (isSigDocAccessTbl(sig,x,y))    { fputs("sigDocAccessTbl(", out);   printSignal(x,out,0); fputc(',', out);
00129                                                                                 printSignal(y,out,0); fputc(')', out);   }
00130 
00131 
00132     else if ( isSigGen(sig, x) )            { printSignal(x,out,prec);              }
00133  
00134     else if ( isSigIntCast(sig, x) )        { fputs("int(", out); printSignal(x,out,0); fputs(")", out);        }
00135     else if ( isSigFloatCast(sig, x) )      { fputs("float(", out); printSignal(x,out,0); fputs(")", out);      }
00136 
00137     else if (isList(sig)) {
00138         char sep = '{';
00139         do { 
00140             fputc(sep, out);
00141             printSignal(hd(sig), out, 0);
00142             sep=',';
00143             sig = tl(sig);
00144         } while (isList(sig));
00145         fputc('}', out);
00146     }
00147     else
00148         print(sig, out);
00149 }

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.

00065 {
00066     putchar("NR"[n]);
00067     putchar("KB S"[v]);
00068     putchar("CI X"[c]);
00069 }


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.

Generated on Thu Jul 15 16:15:49 2010 for FAUST compiler by  doxygen 1.6.3