|
FAUST compiler
0.9.9.6b8
|

Go to the source code of this file.
Functions | |
| Tree | pathRoot () |
| bool | isPathRoot (Tree t) |
| Tree | pathParent () |
| bool | isPathParent (Tree t) |
| Tree | pathCurrent () |
| bool | isPathCurrent (Tree t) |
| static Tree | encodeName (char g, const string &name) |
| analyze name for "H:name" | "V:name" etc | |
| static Tree | label2path (const char *label) |
| Analyzes a label and converts it as a path. | |
| static Tree | concatPath (Tree relpath, Tree abspath) |
| Concatenate the relative path to the absolute path Note that the relpath is top-down while the abspath is bottom-up. | |
| static Tree | normalizeLabel (Tree label, Tree path) |
| Tree | normalizePath (Tree path) |
Variables | |
| Sym | PATHROOT = symbol ("/") |
Grammar for labels with pathnames<label> = <name> | <path> <name> <name> = [^/]+ <path> = <apath> | <rpath> <apath> = '/' | '/' <rpath> <rpath> = (<gname> '/')+ <gname> = ".." | "." | <gtype> <name> <gtype> = "h:" | "H:" | "v:" | V:" | "t:" | "T:" | |
| Sym | PATHPARENT = symbol ("..") |
| Sym | PATHCURRENT = symbol (".") |
| static Tree concatPath | ( | Tree | relpath, |
| Tree | abspath | ||
| ) | [static] |
Concatenate the relative path to the absolute path Note that the relpath is top-down while the abspath is bottom-up.
Definition at line 95 of file labels.cpp.
References cons(), hd(), isList(), isNil(), isPathCurrent(), isPathParent(), isPathRoot(), nil, and tl().
Referenced by normalizeLabel().
{
if (isList(relpath)) {
Tree head = hd(relpath);
if (isPathRoot(head)) {
return concatPath(tl(relpath), nil);
} else if (isPathParent(head)) {
if (!isList(abspath)) {
//cerr << "abspath : " << *abspath << endl;
return concatPath(tl(relpath), hd(relpath));
} else {
return concatPath(tl(relpath), tl(abspath));
}
} else if (isPathCurrent(head)) {
return concatPath(tl(relpath), abspath);
} else {
return concatPath(tl(relpath), cons(head,abspath));
}
} else {
assert(isNil(relpath));
return abspath;
}
}


| static Tree encodeName | ( | char | g, |
| const string & | name | ||
| ) | [static] |
analyze name for "H:name" | "V:name" etc
Definition at line 37 of file labels.cpp.
References cons(), and tree().
Referenced by label2path().
{
switch (g) {
case 'v':
case 'V': return cons(tree(0), tree(name));
case 'h':
case 'H': return cons(tree(1), tree(name));
case 't':
case 'T': return cons(tree(2), tree(name));
default : return cons(tree(0), tree(name));
}
}


| bool isPathCurrent | ( | Tree | t | ) |
Definition at line 29 of file labels.cpp.
References isTree().
Referenced by concatPath().
{ return isTree(t, PATHCURRENT); }


| bool isPathParent | ( | Tree | t | ) |
Definition at line 25 of file labels.cpp.
References isTree().
Referenced by concatPath().
{ return isTree(t, PATHPARENT); }


| bool isPathRoot | ( | Tree | t | ) |
Definition at line 21 of file labels.cpp.
References isTree().
Referenced by concatPath().


| static Tree label2path | ( | const char * | label | ) | [static] |
Analyzes a label and converts it as a path.
Definition at line 58 of file labels.cpp.
References cons(), encodeName(), nil, pathParent(), pathRoot(), and tree().
Referenced by normalizeLabel().
{
if (label[0] == 0) {
return cons(tree(""), nil);
} else if (label[0] == '/') {
return cons(pathRoot(), label2path(&label[1]));
} else if ((label[0] == '.') && (label[1] == '/')) {
return label2path(&label[2]);
} else if ((label[0] == '.') && (label[1] == '.') && (label[2] == '/')) {
return cons(pathParent(), label2path(&label[3]));
} else if (label[1] == ':') {
char g = label[0];
string s;
int i = 2;
while ((label[i] != 0) && (label[i] != '/')) {
s.push_back(label[i]);
i++;
}
if (label[i] == '/') i++;
return cons(encodeName(g,s), label2path(&label[i]));
} else {
return cons(tree(label),nil);
}
}


| static Tree normalizeLabel | ( | Tree | label, |
| Tree | path | ||
| ) | [static] |
Definition at line 120 of file labels.cpp.
References concatPath(), cons(), isList(), isSym(), label2path(), name(), and CTree::node().
Referenced by normalizePath().
{
// we suppose label = "../label" ou "name/label" ou "name"
//cout << "Normalize Label " << *label << " with path " << *path << endl;
if (isList(label)) {
return cons(label, path);
} else {
Sym s;
assert (isSym(label->node(),&s));
return concatPath(label2path(name(s)),path);
}
}


| Tree normalizePath | ( | Tree | path | ) |
Definition at line 133 of file labels.cpp.
References hd(), isNil(), normalizeLabel(), normalizePath(), and tl().
Referenced by normalizePath(), and propagate().
{
//cout << "Normalize Path [[" << *path << "]]" << endl;
Tree npath;
if (isNil(path)) {
npath = path;
} else {
npath = normalizeLabel(hd(path), normalizePath(tl(path)));
}
//cout << " -> [[" << *npath << "]]" << endl;
return npath;
}


| Tree pathCurrent | ( | ) |
Definition at line 28 of file labels.cpp.
References tree().
{ return tree(PATHCURRENT); }

| Tree pathParent | ( | ) |
Definition at line 24 of file labels.cpp.
References tree().
Referenced by label2path().
{ return tree(PATHPARENT); }


Definition at line 20 of file labels.cpp.
References tree().
Referenced by label2path().


| Sym PATHCURRENT = symbol (".") |
Definition at line 27 of file labels.cpp.
| Sym PATHPARENT = symbol ("..") |
Definition at line 23 of file labels.cpp.
Definition at line 19 of file labels.cpp.
1.8.0