File: conflicts.cc

package info (click to toggle)
bisonc%2B%2B 6.09.02-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,984 kB
  • sloc: cpp: 9,375; ansic: 1,505; fortran: 1,134; makefile: 1,062; sh: 526; yacc: 84; lex: 60
file content (78 lines) | stat: -rw-r--r-- 2,705 bytes parent folder | download | duplicates (7)
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
77
78
#include "generator.ih"

bool Generator::conflicts() const
{
    bool ret = false;

    emsg.noLineNr();
    emsg.setLineTag("");

    string const &classHeader = d_options.classHeader();

    if (d_stat.set(classHeader))
    {
                // class-name must match
        ret = errExisting(classHeader, "class-name", 
                                "^class " + d_options.className() + "\\b")
              or ret;

        ret = errExisting(classHeader, "baseclass-header", 
                    "^#include \"" + d_options.baseclassHeaderName() + '"')
              or ret;

                // if a namespace was provided: it must be present
        if (not d_options.nameSpace().empty())
            ret = errExisting(classHeader, "namespace", 
                            "^namespace " + d_options.nameSpace() + "\\b")
                  or ret;

        if (d_options.specified("scanner"))
        {
                // the 'scanner' include spec. must be present
            ret = errExisting(classHeader, "scanner", 
                                "^#include " + d_options.scannerInclude())
                  or ret;

                // the 'scanner-class-name must be present
            if (d_options.specified("scanner-class-name"))
                ret = errExisting(classHeader, "scanner-class-name",
                            "^[[:space:]]*" + 
                                d_options.scannerClassName() + 
                                " d_scanner;") 
                      or ret;
        }
        else if (d_options.specified("scanner-class-name"))
            wmsg << '`' << classHeader << 
            "': option/directive `scanner-class-name' ignored: "
            " option `scanner' not specified" << endl;
    }


    string const &implementationHeader = d_options.implementationHeader();
    if (d_stat.set(implementationHeader))
    {
        ret = errExisting(implementationHeader, "class-header", 
                            "^#include \"" + d_options.classHeader() + '"')
              or ret;

        ret = errExisting(implementationHeader, "class-name", 
                            "\\b" + d_options.className() + "::")
              or ret;

        if (not d_options.nameSpace().empty())
            ret = errExisting(implementationHeader, "namespace", 
                            "^namespace " + d_options.nameSpace() + "\\b")
                  or ret;

        string pattern = "\\b" + d_options.scannerTokenFunction() + "\\b";
        replace(pattern, '(', "\\(");
        replace(pattern, ')', "\\)");

        ret = errExisting(implementationHeader, "scanner-token-function",
                        pattern)
              or ret;
    }

    return ret;
}