FAUST compiler  0.9.9.6b8
Public Member Functions | Private Attributes
boxpp Class Reference

#include <ppbox.hh>

Collaboration diagram for boxpp:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 boxpp (Tree b, int p=0)
ostream & print (ostream &fout) const

Private Attributes

Tree box
int priority

Detailed Description

Definition at line 58 of file ppbox.hh.


Constructor & Destructor Documentation

boxpp::boxpp ( Tree  b,
int  p = 0 
) [inline]

Definition at line 63 of file ppbox.hh.

Referenced by print().

: box(b), priority(p) {}

Here is the caller graph for this function:


Member Function Documentation

ostream & boxpp::print ( ostream &  fout) const

Definition at line 113 of file ppbox.cpp.

References box, boxpp(), ffname(), getUserData(), hd(), isBoxAbstr(), isBoxAccess(), isBoxAppl(), isBoxButton(), isBoxCase(), isBoxCheckbox(), isBoxComponent(), isBoxCut(), isBoxEnvironment(), isBoxError(), isBoxFConst(), isBoxFFun(), isBoxFVar(), isBoxHBargraph(), isBoxHGroup(), isBoxHSlider(), isBoxIdent(), isBoxInt(), isBoxIPar(), isBoxIProd(), isBoxISeq(), isBoxISum(), isBoxMerge(), isBoxNumEntry(), isBoxPar(), isBoxPatternMatcher(), isBoxPatternVar(), isBoxPrim0(), isBoxPrim1(), isBoxPrim2(), isBoxPrim3(), isBoxPrim4(), isBoxPrim5(), isBoxReal(), isBoxRec(), isBoxSeq(), isBoxSlot(), isBoxSplit(), isBoxSymbolic(), isBoxTGroup(), isBoxVBargraph(), isBoxVGroup(), isBoxVSlider(), isBoxWire(), isBoxWithLocalDef(), isClosure(), isImportFile(), isList(), isNil(), max(), min(), xtended::name(), name(), prim0name(), prim1name(), prim2name(), prim3name(), prim4name(), prim5name(), printRule(), priority, streambinop(), tl(), and tree2str().

Referenced by operator<<().

{
    int     i, id;
    double  r;
    prim0   p0;
    prim1   p1;
    prim2   p2;
    prim3   p3;
    prim4   p4;
    prim5   p5;

    Tree    t1, t2, t3, ff, label, cur, min, max, step, type, name, file, arg,
            body, fun, args, abstr, genv, vis, lenv, ldef, slot,
            ident, rules;

    const char* str;

    xtended* xt = (xtended*) getUserData(box);


    // primitive elements
         if (xt)                        fout << xt->name();
    else if (isBoxInt(box, &i))         fout << i;
    else if (isBoxReal(box, &r))        fout << r;
    else if (isBoxCut(box))             fout << '!';
    else if (isBoxWire(box))            fout << '_';
    else if (isBoxIdent(box, &str))     fout << str;
    else if (isBoxPrim0(box, &p0))      fout << prim0name(p0);
    else if (isBoxPrim1(box, &p1))      fout << prim1name(p1);
    else if (isBoxPrim2(box, &p2))      fout << prim2name(p2);
    else if (isBoxPrim3(box, &p3))      fout << prim3name(p3);
    else if (isBoxPrim4(box, &p4))      fout << prim4name(p4);
    else if (isBoxPrim5(box, &p5))      fout << prim5name(p5);

    else if (isBoxAbstr(box,arg,body))  fout << "\\" << boxpp(arg) << ".(" << boxpp(body) << ")";
    else if (isBoxAppl(box, fun, args)) fout << boxpp(fun) << boxpp(args) ;

    else if (isBoxWithLocalDef(box, body, ldef))    fout << boxpp(body) << " with { " << envpp(ldef) << " }";

    // foreign elements
    else if (isBoxFFun(box, ff))        fout << "ffunction(" << ffname(ff) << ')';
    else if (isBoxFConst(box, type, name, file))
                                        fout << "fconstant(" /*<< tree2str(type) */<< tree2str(name) << ')';
    else if (isBoxFVar(box, type, name, file))
                                        fout << "fvariable(" << tree2str(name) << ')';

    // block diagram binary operator
    else if (isBoxSeq(box, t1, t2))     streambinop(fout, t1, ":", t2, 1, priority);
    else if (isBoxSplit(box, t1, t2))   streambinop(fout, t1, "<:", t2, 1, priority);
    else if (isBoxMerge(box, t1, t2))   streambinop(fout, t1, ":>", t2, 1, priority);
    else if (isBoxPar(box, t1, t2))     streambinop(fout, t1,",",t2, 2, priority);
    else if (isBoxRec(box, t1, t2))     streambinop(fout, t1,"~",t2, 4, priority);

    // iterative block diagram construction
    else if (isBoxIPar(box, t1, t2, t3))    fout << "par(" << boxpp(t1) << ", " << boxpp(t2) << ") {" << boxpp(t3) << "}";
    else if (isBoxISeq(box, t1, t2, t3))    fout << "seq(" << boxpp(t1) << ", " << boxpp(t2) << ") {" << boxpp(t3) << "}";
    else if (isBoxISum(box, t1, t2, t3))    fout << "sum(" << boxpp(t1) << ", " << boxpp(t2) << ") {" << boxpp(t3) << "}";
    else if (isBoxIProd(box, t1, t2, t3))   fout << "prod(" << boxpp(t1) << ", " << boxpp(t2) << ") {" << boxpp(t3) << "}";

    // user interface
    else if (isBoxButton(box, label))   fout << "button(" << tree2str(label) << ')';
    else if (isBoxCheckbox(box, label)) fout << "checkbox(" << tree2str(label) << ')';
    else if (isBoxVSlider(box, label, cur, min, max, step))     {
        fout << "vslider("
             << tree2str(label) << ", "
             << boxpp(cur) << ", "
             << boxpp(min) << ", "
             << boxpp(max) << ", "
             << boxpp(step)<< ')';
    }
    else if (isBoxHSlider(box, label, cur, min, max, step))     {
        fout << "hslider("
             << tree2str(label) << ", "
             << boxpp(cur) << ", "
             << boxpp(min) << ", "
             << boxpp(max) << ", "
             << boxpp(step)<< ')';
    }
    else if (isBoxVGroup(box, label, t1)) {
        fout << "vgroup(" << tree2str(label) << ", " << boxpp(t1, 0) << ')';
    }
    else if (isBoxHGroup(box, label, t1)) {
        fout << "hgroup(" << tree2str(label) << ", " << boxpp(t1, 0) << ')';
    }
    else if (isBoxTGroup(box, label, t1)) {
        fout << "tgroup(" << tree2str(label) << ", " << boxpp(t1, 0) << ')';
    }
    else if (isBoxHBargraph(box, label, min, max))  {
        fout << "hbargraph("
             << tree2str(label) << ", "
             << boxpp(min) << ", "
             << boxpp(max) << ')';
    }
    else if (isBoxVBargraph(box, label, min, max))  {
        fout << "vbargraph("
             << tree2str(label) << ", "
             << boxpp(min) << ", "
             << boxpp(max) << ')';
    }
    else if (isBoxNumEntry(box, label, cur, min, max, step))    {
        fout << "nentry("
             << tree2str(label) << ", "
             << boxpp(cur) << ", "
             << boxpp(min) << ", "
             << boxpp(max) << ", "
             << boxpp(step)<< ')';
    }
    else if (isNil(box)) {
        fout << "()" ;
    }
    else if (isList(box)) {

        Tree l = box;
        char sep = '(';

        do {
            fout << sep << boxpp(hd(l));
            sep = ',';
            l = tl(l);
        } while (isList(l));

        fout << ')';

    }
    else if (isBoxEnvironment(box)) {
        fout << "environment";
    }
    else if (isClosure(box, abstr, genv, vis, lenv)) {
        fout << "closure[" << boxpp(abstr)
            << ", genv = " << envpp(genv)
            << ", lenv = " << envpp(lenv)
            << "]";
    }
    else if (isBoxComponent(box, label)) {
        fout << "component("
            << tree2str(label) << ')';
    }
    else if (isBoxAccess(box, t1, t2)) {
        fout << boxpp(t1) << '.' << boxpp(t2);
    }
    else if (isImportFile(box, label)) {
        fout << "import("
            << tree2str(label) << ')';
    }
    else if (isBoxSlot(box, &id)) {
        fout << "#" << id;
    }
    else if (isBoxSymbolic(box, slot, body)) {
        fout << "[" << boxpp(slot) << ">" << boxpp(body) << "]";
    }
    
    // Pattern Matching Extensions
    else if (isBoxCase(box, rules)) {
        fout << "case {";
        while (!isNil(rules)) { printRule(fout, hd(rules)); rules = tl(rules); }
        fout << "}";     
    }
#if 1
    // more useful for debugging output
    else if (isBoxPatternVar(box, ident)) {
        fout << "<" << boxpp(ident) << ">"; 
    }
#else
    // beautify messages involving lhs patterns
    else if (isBoxPatternVar(box, ident)) {
        fout << boxpp(ident);   
    }
#endif

    else if (isBoxPatternMatcher(box)) {
        fout << "PM[" << box << "]";    
    }

    else if (isBoxError(box)) {
        fout << "ERROR";    
    }

    
    // None of the previous tests succeded, then it is not a valid box
    else {
        cerr << "Error in box::print() : " << *box << " is not a valid box" << endl;
        exit(1);
    }

    return fout;
}

Here is the caller graph for this function:


Member Data Documentation

Tree boxpp::box [private]

Definition at line 60 of file ppbox.hh.

Referenced by print().

int boxpp::priority [private]

Definition at line 61 of file ppbox.hh.

Referenced by print().


The documentation for this class was generated from the following files: