00001 /************************************************************************ 00002 ************************************************************************ 00003 FAUST compiler 00004 Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale 00005 --------------------------------------------------------------------- 00006 This program is free software; you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 2 of the License, or 00009 (at your option) any later version. 00010 00011 This program is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this program; if not, write to the Free Software 00018 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00019 ************************************************************************ 00020 ************************************************************************/ 00021 00022 00023 00024 #ifndef _COMPILE_ 00025 #define _COMPILE_ 00026 00027 00028 #include "signals.hh" 00029 #include "klass.hh" 00030 #include "Text.hh" 00031 #include "uitree.hh" 00032 #include <string> 00033 #include <list> 00034 #include <stack> 00035 #include <map> 00036 00037 #include "description.hh" 00038 00040 00045 00046 00047 #define kMaxHeight 1024 00048 00049 class Compiler 00050 { 00051 protected: 00052 Klass* fClass; 00053 Tree fUIRoot; 00054 Description* fDescription; 00055 00056 public: 00057 Compiler (const string& name, const string& super, int numInputs, int numOutputs, bool vec); 00058 Compiler (Klass* k); 00059 00060 virtual ~Compiler(); 00061 00062 virtual void compileMultiSignal (Tree lsig) = 0; 00063 virtual void compileSingleSignal (Tree lsig) = 0; 00064 //virtual string CS (Tree tEnv, Tree sig, int ctx = 0) = 0; 00065 //virtual string generateCacheCode(Tree tEnv, Tree sig, const string& exp, int context=0)=0; 00066 00067 Klass* getClass() { return (Klass*)fClass; } 00068 00069 void setDescription(Description* descr) { fDescription= descr; } 00070 Description* getDescription() { return fDescription; } 00071 00072 protected: 00073 //string getFreshID (const char* prefix); 00074 //Tree makeCompileKey(Tree t); 00075 virtual Tree prepare (Tree L0); 00076 virtual Tree prepare2 (Tree L0); 00077 //void compilePreparedSignalList (Tree lsig); 00078 00079 // analyse du partage des expressions 00080 //virtual int getSharingCount(Tree t) = 0; 00081 //virtual void sharingAnalysis(Tree t) = 0; 00082 //virtual void sharingAnnotation(int vctxt, Tree t) = 0; 00083 00084 00085 // generation du code 00086 //string generateCode (Tree tEnv, Tree sig); 00087 00088 //string generateCacheCode (Tree tEnv, Tree sig, const string& exp); 00089 00090 //string generateDelay1 (Tree tEnv, Tree sig, Tree arg); 00091 //string generateBinOp (Tree tEnv, Tree sig, int opcode, Tree arg1, Tree arg2); 00092 00093 //string generateFFun (Tree tEnv, Tree sig, Tree ff, Tree largs); 00094 00095 //string generateInput (Tree tEnv, Tree sig, const string& idx); 00096 //string generateOutput (Tree tEnv, Tree sig, const string& idx, const string& arg1); 00097 00098 //string generateTable (Tree tEnv, Tree sig, Tree tsize, Tree content); 00099 //string generateWRTbl (Tree tEnv, Tree sig, Tree tbl, Tree idx, Tree data); 00100 //string generateRDTbl (Tree tEnv, Tree sig, Tree tbl, Tree idx); 00101 //string generateSigGen (Tree tEnv, Tree sig, Tree content); 00102 00103 //string generateSelect2 (Tree tEnv, Tree sig, Tree sel, Tree s1, Tree s2); 00104 //string generateSelect3 (Tree tEnv, Tree sig, Tree sel, Tree s1, Tree s2, Tree s3); 00105 00106 //string generateRecProj (Tree tEnv, Tree sig, const string& vname, int i); 00107 //string generateRecRef (Tree tEnv, Tree sig, Tree var); 00108 //string generateRecGroup (Tree tEnv, Tree sig, Tree var, Tree le); 00109 00110 //string generateIntCast (Tree tEnv, Tree sig, Tree x); 00111 //string generateFloatCast (Tree tEnv, Tree sig, Tree x); 00112 00113 //string generateButton (Tree tEnv, Tree sig, Tree label); 00114 //string generateCheckbox (Tree tEnv, Tree sig, Tree label); 00115 //string generateVSlider (Tree tEnv, Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step); 00116 //string generateHSlider (Tree tEnv, Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step); 00117 //string generateNumEntry (Tree tEnv, Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step); 00118 00119 00120 // gestion des includes et librairies 00121 void addIncludeFile (const string& str) { fClass->addIncludeFile(str); } 00122 void addLibrary (const string& str) { fClass->addLibrary(str); } 00123 00124 // gestion de la description arborescente de l'IU 00125 void addUIWidget(Tree path, Tree widget); 00126 void generateWidgetCode(Tree label, Tree varname, Tree sig); 00127 void generateUserInterfaceTree(Tree t); 00128 void generateUserInterfaceElements(Tree elements); 00129 Tree prepareUserInterfaceTree(Tree t); 00130 00131 }; 00132 #define generateEquivRecGroup generateRecGroup 00133 00134 00135 void compileSignals (const string& name, const string& super, int numInputs, int numOutputs, Tree lsig); 00136 00137 #endif