]> git.saurik.com Git - apple/javascriptcore.git/blame_incremental - debugger/DebuggerCallFrame.h
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / debugger / DebuggerCallFrame.h
... / ...
CommitLineData
1/*
2 * Copyright (C) 2008, 2013, 2014 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef DebuggerCallFrame_h
30#define DebuggerCallFrame_h
31
32#include "DebuggerPrimitives.h"
33#include "Strong.h"
34#include <wtf/NakedPtr.h>
35#include <wtf/PassRefPtr.h>
36#include <wtf/RefCounted.h>
37#include <wtf/text/TextPosition.h>
38
39namespace JSC {
40
41class DebuggerScope;
42class Exception;
43class ExecState;
44typedef ExecState CallFrame;
45
46class DebuggerCallFrame : public RefCounted<DebuggerCallFrame> {
47public:
48 enum Type { ProgramType, FunctionType };
49
50 static Ref<DebuggerCallFrame> create(CallFrame* callFrame)
51 {
52 return adoptRef(*new DebuggerCallFrame(callFrame));
53 }
54
55 JS_EXPORT_PRIVATE explicit DebuggerCallFrame(CallFrame*);
56
57 JS_EXPORT_PRIVATE RefPtr<DebuggerCallFrame> callerFrame();
58 ExecState* exec() const { return m_callFrame; }
59 JS_EXPORT_PRIVATE SourceID sourceID() const;
60
61 // line and column are in base 0 e.g. the first line is line 0.
62 int line() const { return m_position.m_line.zeroBasedInt(); }
63 int column() const { return m_position.m_column.zeroBasedInt(); }
64 JS_EXPORT_PRIVATE const TextPosition& position() const { return m_position; }
65
66 JS_EXPORT_PRIVATE JSGlobalObject* vmEntryGlobalObject() const;
67 JS_EXPORT_PRIVATE DebuggerScope* scope();
68 JS_EXPORT_PRIVATE String functionName() const;
69 JS_EXPORT_PRIVATE Type type() const;
70 JS_EXPORT_PRIVATE JSValue thisValue() const;
71 JSValue evaluate(const String&, NakedPtr<Exception>&);
72
73 bool isValid() const { return !!m_callFrame; }
74 JS_EXPORT_PRIVATE void invalidate();
75
76 // The following are only public for the Debugger's use only. They will be
77 // made private soon. Other clients should not use these.
78
79 JS_EXPORT_PRIVATE static TextPosition positionForCallFrame(CallFrame*);
80 JS_EXPORT_PRIVATE static SourceID sourceIDForCallFrame(CallFrame*);
81 static JSValue thisValueForCallFrame(CallFrame*);
82
83private:
84 CallFrame* m_callFrame;
85 RefPtr<DebuggerCallFrame> m_caller;
86 TextPosition m_position;
87 // The DebuggerPausedScope is responsible for calling invalidate() which,
88 // in turn, will clear this strong ref.
89 Strong<DebuggerScope> m_scope;
90};
91
92} // namespace JSC
93
94#endif // DebuggerCallFrame_h