FAUST compiler  0.9.9.6b8
Functions | Variables
labels.cpp File Reference
#include "labels.hh"
#include "compatibility.hh"
Include dependency graph for labels.cpp:

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 (".")

Function Documentation

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;
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

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));
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool isPathCurrent ( Tree  t)

Definition at line 29 of file labels.cpp.

References isTree().

Referenced by concatPath().

{ return isTree(t, PATHCURRENT); }

Here is the call graph for this function:

Here is the caller graph for this function:

bool isPathParent ( Tree  t)

Definition at line 25 of file labels.cpp.

References isTree().

Referenced by concatPath().

{ return isTree(t, PATHPARENT); }

Here is the call graph for this function:

Here is the caller graph for this function:

bool isPathRoot ( Tree  t)

Definition at line 21 of file labels.cpp.

References isTree().

Referenced by concatPath().

{ return isTree(t, PATHROOT); }

Here is the call graph for this function:

Here is the caller graph for this function:

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);
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

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);
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

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;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 28 of file labels.cpp.

References tree().

{ return tree(PATHCURRENT); }

Here is the call graph for this function:

Definition at line 24 of file labels.cpp.

References tree().

Referenced by label2path().

{ return tree(PATHPARENT); }

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 20 of file labels.cpp.

References tree().

Referenced by label2path().

{ return tree(PATHROOT); }

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

Definition at line 27 of file labels.cpp.

Sym PATHPARENT = symbol ("..")

Definition at line 23 of file labels.cpp.

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:"

Definition at line 19 of file labels.cpp.