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

{
    int     i;
    double  r;
    Tree     x, y, z, u, le, id;
        
         if ( isSigInt(sig, &i) )           { fprintf(out, "%d", i);    }
    else if ( isSigReal(sig, &r) )          { fprintf(out, "%f", r);    }
    else if ( isSigInput(sig, &i) )         { fprintf(out, "IN%d", i);  }
    else if ( isSigOutput(sig, &i, x) )     { fprintf(out, "OUT%d := ", i); printSignal(x, out, 0); }
    
    else if ( isSigBinOp(sig, &i, x, y) )   { 
        if (prec > binopprec[i]) fputs("(", out); 
        printSignal(x,out,binopprec[i]); fputs(binopname[i], out); printSignal(y, out, binopprec[i]); 
        if (prec > binopprec[i]) fputs(")", out);   
    }
    else if ( isSigDelay1(sig, x) )         { fputs("mem(", out); printSignal(x,out,0); fputs(")", out);        }
    else if ( isSigPrefix(sig, x, y) )      { fputs("prefix(", out); printSignal(x,out,0); fputs(",", out);  printSignal(y,out,0); fputs(")", out);     }
    else if ( isSigAttach(sig, x, y) )      { fputs("attach(", out); printSignal(x,out,0); fputs(",", out);  printSignal(y,out,0); fputs(")", out);     }
    else if ( isSigFixDelay(sig, x, y) )    { 
        if (prec > 4) fputs("(", out); 
        printSignal(x,out,4); fputs("@", out); printSignal(y, out, 4); 
        if (prec > 4) fputs(")", out);  
    }

    else if ( isProj(sig, &i, x) )          { printSignal(x,out,prec); fprintf(out, "#%d", i);      }
    else if ( isRef(sig, i) )               { fprintf(out, "$%d", i);   }
    else if ( isRef(sig, x) )               { print(x, out);            }
    else if ( isRec(sig, le))               { fputs("\\_.", out); printSignal(le, out, prec);   }
    else if ( isRec(sig, x, le))            { fputs("\\", out); print(x,out); fputs(".", out); printSignal(le, out, prec);  }
    
    else if ( isSigTable(sig, id, x, y) )   { fputs("table(", out); printSignal(x,out,0); fputc(',', out); printSignal(y,out,0); fputc(')', out);   }
    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);   }
    else if ( isSigRDTbl(sig, x, y) )       { printSignal(x,out,0); fputc('[', out); printSignal(y,out,0); fputc(']', out);   }

    else if (isSigDocConstantTbl(sig,x,y))  { fputs("sigDocConstantTbl(", out); printSignal(x,out,0); fputc(',', out);
                                                                                printSignal(y,out,0); fputc(')', out);   }

    else if (isSigDocWriteTbl(sig,x,y,z,u)) { fputs("sigDocWriteTbl(", out);    printSignal(x,out,0); fputc(',', out);
                                                                                printSignal(y,out,0); fputc(',', out);
                                                                                printSignal(z,out,0); fputc(',', out);
                                                                                printSignal(u,out,0); fputc(')', out);   }

    else if (isSigDocAccessTbl(sig,x,y))    { fputs("sigDocAccessTbl(", out);   printSignal(x,out,0); fputc(',', out);
                                                                                printSignal(y,out,0); fputc(')', out);   }


    else if ( isSigGen(sig, x) )            { printSignal(x,out,prec);              }
 
    else if ( isSigIntCast(sig, x) )        { fputs("int(", out); printSignal(x,out,0); fputs(")", out);        }
    else if ( isSigFloatCast(sig, x) )      { fputs("float(", out); printSignal(x,out,0); fputs(")", out);      }

    else if (isList(sig)) {
        char sep = '{';
        do { 
            fputc(sep, out);
            printSignal(hd(sig), out, 0);
            sep=',';
            sig = tl(sig);
        } while (isList(sig));
        fputc('}', out);
    }
    else
        print(sig, out);
}

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.

{
    putchar("NR"[n]);
    putchar("KB S"[v]);
    putchar("CI X"[c]);
}

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.