+++ /dev/null
-/************************************************************************
- ************************************************************************
- FAUST compiler
- Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
- ---------------------------------------------------------------------
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- ************************************************************************
- ************************************************************************/
-
-
-/**
- * \file eval.cpp
- * Interface for names propagation.
- *
- **/
-
-
-#include "ppsig.hh"
-#include "names.hh"
-#include "property.hh"
-#include "ppsig.hh"
-#include "doc_Text.hh"
-#include "Text.hh"
-#include <assert.h>
-
-
-// History
-// 2009/09/08 : get/setDefNameProperty
-
-
-extern int gMaxNameSize;
-
-
-/**
- * Definition name property : a property to keep track of the definition name
- * of an expression. Whenever an identifier is evaluated, it is attached as a
- * property of its definitionObviously there is no perfect solution since a same
- * definition quand be given to different names.
- */
-Tree DEFNAMEPROPERTY = tree(symbol("DEFNAMEPROPERTY"));
-
-void setDefNameProperty(Tree t, Tree id)
-{
- //cerr << "setDefNameProperty : " << *id << " FOR " << t << "#" << boxpp(t) << endl;
- setProperty(t, DEFNAMEPROPERTY, id);
-}
-
-void setDefNameProperty(Tree t, const string& name)
-{
- //cerr << "setDefNameProperty : " << name << " FOR " << t << "#" << boxpp(t) << endl;
- int n = name.size();
- int m = (gMaxNameSize>1023) ? 1023 : gMaxNameSize;
- if (n > m) {
- // the name is too long we reduce it to 2/3 of maxsize
- char buf[1024];
- int i = 0;
- // copy first third
- for (; i < m/3; i++) { buf[i] = name[i]; }
- // add ...
- buf[i++] = '.';
- buf[i++] = '.';
- buf[i++] = '.';
- // copy last third
- for (int c = n-m/3; c<n; c++, i++) { buf[i] = name[c]; }
- buf[i] = 0;
- setProperty(t, DEFNAMEPROPERTY, tree(buf));
- } else {
- setProperty(t, DEFNAMEPROPERTY, tree(name.c_str()));
- }
-
-}
-
-bool getDefNameProperty(Tree t, Tree& id)
-{
- //cerr << "getDefNameProperty of : " << t << endl;
- return getProperty(t, DEFNAMEPROPERTY, id);
-}
-
-
-/**
- * Convert a definition name (can be long) into a short nickname
- * that can be used as an equation name in latex
- * @todo Simplify long definition names.
- */
-string defName2NickName (const string& defname)
-{
- return defname;
-}
-
-Tree NICKNAMEPROPERTY = tree(symbol("NICKNAMEPROPERTY"));
-
-
-/**
- * Set the nickname property of a signal
- */
-void setSigNickname(Tree t, const string& id)
-{
- Tree s,d;
- if (isSigFixDelay(t,s,d) && isZero(d)) {
- setProperty(s, NICKNAMEPROPERTY, tree(id));
- } else {
- setProperty(t, NICKNAMEPROPERTY, tree(id));
- }
-}
-
-
-/**
- * Get the nickname property of a signal
- */
-bool getSigNickname(Tree t, Tree& id)
-{
- bool r = getProperty(t, NICKNAMEPROPERTY, id);
- return r;
-}
-
-
-
-/**
- * set the nickname property of a list of signals. If the list
- * contains more than one signal, adds an index to the nickname
- */
-void setSigListNickName (Tree lsig, const string& nickname)
-{
- assert(isList(lsig));
-
- if (isNil(tl(lsig))) {
- setSigNickname(hd(lsig), nickname);
- } else {
- int i=0;
- while (!isNil(lsig)) {
- setSigNickname(hd(lsig), subst("$0_$1", nickname, T(++i)));
- lsig = tl(lsig);
- }
- }
-}
-
-
-
-