|
FAUST compiler
0.9.9.6b8
|
00001 #include <signals.hh> 00002 #include <property.hh> 00003 00012 int getSubSignals (Tree sig, vector<Tree>& vsigs, bool visitgen) 00013 { 00014 vsigs.clear(); 00015 00016 int i; 00017 double r; 00018 Tree c, sel, x, y, z, u, v, var, le, label, id, ff, largs, type, name, file; 00019 00020 if ( getUserData(sig) ) { for (int i=0; i<sig->arity(); i++) { vsigs.push_back(sig->branch(i)); } 00021 return sig->arity(); } 00022 else if ( isSigInt(sig, &i) ) { return 0; } 00023 else if ( isSigReal(sig, &r) ) { return 0; } 00024 else if ( isSigInput(sig, &i) ) { return 0; } 00025 else if ( isSigOutput(sig, &i, x) ) { vsigs.push_back(x); return 1; } 00026 00027 else if ( isSigDelay1(sig, x) ) { vsigs.push_back(x); return 1; } 00028 00029 else if ( isSigFixDelay(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; } 00030 else if ( isSigPrefix(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; } 00031 else if ( isSigIota(sig, x) ) { vsigs.push_back(x); return 1; } 00032 00033 else if ( isSigBinOp(sig, &i, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; } 00034 else if ( isSigFFun(sig, ff, largs) ) { int n = 0; while (!isNil(largs)) { vsigs.push_back(hd(largs)); largs = tl(largs); n++; } return n; } 00035 else if ( isSigFConst(sig, type, name, file) ) { return 0; } 00036 else if ( isSigFVar(sig, type, name, file) ) { return 0; } 00037 00038 else if ( isSigTable(sig, id, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; } 00039 else if ( isSigWRTbl(sig, id, x, y, z) ) { vsigs.push_back(x); vsigs.push_back(y); vsigs.push_back(z); return 3; } 00040 else if ( isSigRDTbl(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; } 00041 00042 else if ( isSigDocConstantTbl(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; } 00043 else if ( isSigDocWriteTbl(sig, x, y, u, v) ) { vsigs.push_back(x); vsigs.push_back(y); vsigs.push_back(u); vsigs.push_back(v); return 4; } 00044 else if ( isSigDocAccessTbl(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; } 00045 00046 00047 else if ( isSigSelect2(sig, sel, x, y) ) { vsigs.push_back(sel); vsigs.push_back(x); vsigs.push_back(y); return 3; } 00048 else if ( isSigSelect3(sig, sel, x, y, z) ) { vsigs.push_back(sel); vsigs.push_back(x); vsigs.push_back(y); vsigs.push_back(z); return 4; } 00049 00050 else if ( isSigGen(sig, x) ) { if (visitgen) { vsigs.push_back(x); return 1;} else { return 0; } } 00051 00052 else if ( isProj(sig, &i, x) ) { vsigs.push_back(x); return 1; } 00053 else if ( isRec(sig, var, le) ) { vsigs.push_back(le); return 1; } 00054 00055 else if ( isSigIntCast(sig, x) ) { vsigs.push_back(x); return 1; } 00056 else if ( isSigFloatCast(sig, x) ) { vsigs.push_back(x); return 1; } 00057 00058 else if ( isSigButton(sig, label) ) { return 0; } 00059 else if ( isSigCheckbox(sig, label) ) { return 0; } 00060 else if ( isSigVSlider(sig, label,c,x,y,z) ) { return 0; } 00061 else if ( isSigHSlider(sig, label,c,x,y,z) ) { return 0; } 00062 else if ( isSigNumEntry(sig, label,c,x,y,z) ) { return 0; } 00063 00064 else if ( isSigVBargraph(sig, label,x,y,z) ) { vsigs.push_back(z); return 1; } 00065 else if ( isSigHBargraph(sig, label,x,y,z) ) { vsigs.push_back(z); return 1; } 00066 else if ( isSigAttach(sig, x, y) ) { vsigs.push_back(x); vsigs.push_back(y); return 2; } 00067 else if ( isList(sig) ) { vsigs.push_back(hd(sig)); vsigs.push_back(tl(sig)); return 2; } 00068 else if ( isNil(sig) ) { return 0; } 00069 00070 else { 00071 cerr << "ERROR, unrecognized signal : " << *sig << endl; 00072 exit(1); 00073 } 00074 return 0; 00075 }
1.8.0