|
FAUST compiler
0.9.9.6b8
|
#include "sigtype.hh"#include "compatibility.hh"#include <stdio.h>#include "sigprint.hh"#include "sigtyperules.hh"#include "privatise.hh"
Go to the source code of this file.
Functions | |
| static Tree | makePrivatisationKey (const Tree &t) |
| static Tree | makePrivatisationLabel (const Tree &exp) |
| static Tree | privatisation (const Tree &k, const Tree &t) |
| static Tree | computePrivatisation (const Tree &k, const Tree &t) |
| static Tree | labelize (const Tree &label, const Tree &exp) |
| Tree | privatise (const Tree &t) |
Definition at line 102 of file privatise.cpp.
References CTree::arity(), CTree::branch(), isRec(), isSigGen(), isSigTable(), isSigWRTbl(), labelize(), makePrivatisationLabel(), nil, CTree::node(), privatisation(), rec(), setProperty(), sigWRTbl(), and tree().
Referenced by privatisation().
{
Tree tbl, size, idx, wrt, content, id, var, body;
if ( isSigWRTbl(exp, id, tbl, idx, wrt) ) {
/* Ce qui ne peut pas être partagé, ce sont les
tables dans lesquelles on ecrit. Pour cela
on leur donne un label unique
*/
return sigWRTbl(
id,
labelize( makePrivatisationLabel(exp), privatisation(k, tbl) ),
privatisation(k, idx),
privatisation(k, wrt) );
} else if ( isSigTable(exp, id, size, content) ) {
/* Rien à privatiser dans une table (car size est
censée etre une expression entiere)
*/
return exp;
} else if ( isSigGen(exp, content) ) {
/* On ne visite pas les contenus des tables
*/
printf("erreur 1 dans computePrivatisation\n");
exit(1);
} else if ( isRec(exp, var, body) ) {
/* On ne visite pas les contenus des tables
*/
setProperty(exp, k, nil);
return rec(var, privatisation(k,body));
} else {
/* On parcours les autres arbres en privatisant les branches
*/
int n = exp->arity();
switch (n) {
case 1 :
return tree(
exp->node(),
privatisation(k, exp->branch(0)) );
case 2 :
return tree(
exp->node(),
privatisation(k, exp->branch(0)),
privatisation(k, exp->branch(1)) );
case 3 :
return tree (
exp->node(),
privatisation(k, exp->branch(0)),
privatisation(k, exp->branch(1)),
privatisation(k, exp->branch(2)) );
case 4 :
return tree (
exp->node(),
privatisation(k, exp->branch(0)),
privatisation(k, exp->branch(1)),
privatisation(k, exp->branch(2)),
privatisation(k, exp->branch(3)) );
}
printf("erreur 2 dans computePrivatisation\n");
exit(1);
}
printf("situation anormale dans computePrivatisation\n");
return exp;
}


Definition at line 172 of file privatise.cpp.
References isSigTable(), isSigWRTbl(), sigTable(), and sigWRTbl().
Referenced by computePrivatisation().
{
Tree tbl, size, idx, wrt, content, oldid;
if ( isSigWRTbl(exp, oldid, tbl, idx, wrt) ) {
/* Ce qui ne peut pas être partagé, ce sont les
tables dans lesquelles on ecrit. Pour cela
on leur donne un label unique
*/
return sigWRTbl(newid, tbl, idx, wrt);
} else if ( isSigTable(exp, oldid, size, content) ) {
/* Rien à privatiser dans une table (car size est
censée etre une expression entiere)
*/
return sigTable(newid, size, content);
} else {
printf("erreur labelize\n");
exit(1);
}
return exp;
}


Definition at line 54 of file privatise.cpp.
References name(), tree(), and unique().
Referenced by privatise().


Definition at line 61 of file privatise.cpp.
References name(), tree(), and unique().
Referenced by computePrivatisation().


Definition at line 71 of file privatise.cpp.
References CTree::arity(), computePrivatisation(), getProperty(), isNil(), nil, and setProperty().
Referenced by computePrivatisation(), and privatise().
{
Tree v;
if (t->arity() == 0) {
return t;
} else if (getProperty(t, k, v)) {
/* Terme deja visité. La propriété nous indique
la version privatisée ou nil si elle est identique
au terme initial.
*/
return isNil(v) ? t : v;
} else {
/* Calcul du terme privatisé et mis à jour
de la propriété. Nil indique que le terme
privatisé est identique à celui de depart
(pour eviter les boucles avec les compteurs
de references)
*/
v = computePrivatisation(k,t);
if (v != t) {
setProperty(t, k, v );
} else {
setProperty(t, k, nil);
}
return v;
}
}


Definition at line 45 of file privatise.cpp.
References makePrivatisationKey(), and privatisation().
Referenced by ScalarCompiler::prepare().
{
return privatisation(makePrivatisationKey(t), t);
}


1.7.5.1