summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/JavaScriptCore/parser/SourcePoolQt.h
blob: baed3ba6422e24150a8cee046a03da3cdcf6aba2 (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
    Copyright (C) 2008, 2009 Nokia Corporation and/or its subsidiary(-ies)

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/
#ifndef SOURCEPOOL_H
#define SOURCEPOOL_H

#ifdef QT_BUILD_SCRIPT_LIB

#include "qhash.h"
#include "qstack.h"
#include "qdebug.h"
#include <stdint.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