summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/JavaScriptCore/parser/SourcePoolQt.h
blob: 0f00071d00117d3b2923e6af775413abe2da9d4d (plain)
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
#ifndef SOURCEPOOL_H
#define SOURCEPOOL_H

#ifdef QT_BUILD_SCRIPT_LIB

#include "qhash.h"
#include "qstack.h"
#include "qdebug.h"

namespace JSC {

    class SourceCode;
    class Debugger;

    class SourcePool
    {
        class ScriptActivCount
        {
            int count;
        public:
            void incCount()
            {
                count++;
            };
            void decCount()
            {
                count--;
            };
            int getCount() const
            {
                return count;
            };
            bool isActive;
            ScriptActivCount() : count(0), isActive(true) {}
        };
        QStack<intptr_t> currentScript;
        QHash<unsigned, ScriptActivCount> scriptRef;
        QHash<int, QString> codes;  //debug
        Debugger *debug;

        friend class SourcePoolToken;
    public:
        class SourcePoolToken
        {
            unsigned id;
            SourcePool *ptr;
            SourcePoolToken(unsigned scriptId, SourcePool *scriptPool) : id(scriptId),ptr(scriptPool) {}
            SourcePoolToken(const SourcePoolToken&) : id(0), ptr(0) {}  //private - do not use - will crash
        public:
            ~SourcePoolToken() { ptr->objectUnregister(this); }
            friend class SourcePool;
        };

        SourcePool() : debug(0) {}

        void startEvaluating(const SourceCode& source);
        void stopEvaluating(const SourceCode& source);
        SourcePoolToken* objectRegister();

        void setDebugger(Debugger *debugger);
        Debugger* debugger();

    private:
        void objectUnregister(const SourcePoolToken *token);
    };

} //namespace JSC


#endif  //QT_BUILD_SCRIPT_LIB

#endif // SOURCEPOOL_H