This file is indexed.

/usr/share/yacas/include/substitute.h is in yacas 1.3.3-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifndef __substitute_h__
#define __substitute_h__

#include "yacasbase.h"
#include "lispobject.h"
#include "lispenvironment.h"


/** Behaviour for substituting sub-expressions.
 */
class SubstBehaviourBase : public YacasBase
{
public:
    virtual ~SubstBehaviourBase();
    virtual LispBoolean Matches(LispPtr& aResult, LispPtr& aElement) = 0;
};

/** main routine that can perform substituting of expressions
 */
void InternalSubstitute(LispPtr& aTarget, LispPtr& aSource,
                        SubstBehaviourBase& aBehaviour);


/** Substing one expression for another. The simplest form
 * of substitution
 */
class SubstBehaviour : public SubstBehaviourBase
{
public:
    SubstBehaviour(LispEnvironment& aEnvironment,LispPtr& aToMatch,
                  LispPtr& aToReplaceWith);
    virtual LispBoolean Matches(LispPtr& aResult, LispPtr& aElement);
private:
    LispEnvironment& iEnvironment;
    LispPtr& iToMatch;
    LispPtr& iToReplaceWith;
};

/** subst behaviour for changing the local variables to have unique
 * names.
 */
class LocalSymbolBehaviour : public SubstBehaviourBase
{
public:
    LocalSymbolBehaviour(LispEnvironment& aEnvironment,
                         LispString ** aOriginalNames,
                         LispString ** aNewNames, LispInt aNrNames);
    virtual LispBoolean Matches(LispPtr& aResult, LispPtr& aElement);
private:
    LispEnvironment& iEnvironment;
    LispString ** iOriginalNames;
    LispString ** iNewNames;
    LispInt iNrNames;
};

/** subst behaviour for backquote mechanism as in LISP.
 * When typing `(...) all occurrences of @a will be
 * replaced with:
 * 1) a evaluated if a is an atom
 * 2) function call with function name replaced by evaluated
 *    head of function if a is a function. For instance, if
 *    a is f(x) and f is g, then f(x) gets replaced by g(x)
 */
class BackQuoteBehaviour : public SubstBehaviourBase
{
public:
    BackQuoteBehaviour(LispEnvironment& aEnvironment)
        : iEnvironment(aEnvironment) {};
    virtual LispBoolean Matches(LispPtr& aResult, LispPtr& aElement);
    LispEnvironment& iEnvironment;
};




#endif