summaryrefslogtreecommitdiffstats
path: root/JavaScriptCore/runtime/ArgList.h
diff options
context:
space:
mode:
Diffstat (limited to 'JavaScriptCore/runtime/ArgList.h')
-rw-r--r--JavaScriptCore/runtime/ArgList.h26
1 files changed, 21 insertions, 5 deletions
diff --git a/JavaScriptCore/runtime/ArgList.h b/JavaScriptCore/runtime/ArgList.h
index 8e85d7f..ab501b6 100644
--- a/JavaScriptCore/runtime/ArgList.h
+++ b/JavaScriptCore/runtime/ArgList.h
@@ -22,7 +22,6 @@
#ifndef ArgList_h
#define ArgList_h
-#include "JSImmediate.h"
#include "Register.h"
#include <wtf/HashSet.h>
@@ -31,7 +30,7 @@
namespace JSC {
- class MarkedArgumentBuffer : Noncopyable {
+ class MarkedArgumentBuffer : public Noncopyable {
private:
static const unsigned inlineCapacity = 8;
typedef Vector<Register, inlineCapacity> VectorType;
@@ -44,7 +43,8 @@ namespace JSC {
// Constructor for a read-write list, to which you may append values.
// FIXME: Remove all clients of this API, then remove this API.
MarkedArgumentBuffer()
- : m_markSet(0)
+ : m_isUsingInlineBuffer(true)
+ , m_markSet(0)
#ifndef NDEBUG
, m_isReadOnly(false)
#endif
@@ -57,6 +57,7 @@ namespace JSC {
MarkedArgumentBuffer(Register* buffer, size_t size)
: m_buffer(buffer)
, m_size(size)
+ , m_isUsingInlineBuffer(true)
, m_markSet(0)
#ifndef NDEBUG
, m_isReadOnly(true)
@@ -103,7 +104,7 @@ namespace JSC {
{
ASSERT(!m_isReadOnly);
- if (m_size < inlineCapacity) {
+ if (m_isUsingInlineBuffer && m_size < inlineCapacity) {
m_vector.uncheckedAppend(v);
++m_size;
} else {
@@ -111,22 +112,37 @@ namespace JSC {
// the performance of the fast "just append to inline buffer" case.
slowAppend(v);
++m_size;
+ m_isUsingInlineBuffer = false;
}
}
+ void removeLast()
+ {
+ ASSERT(m_size);
+ m_size--;
+ m_vector.removeLast();
+ }
+
+ JSValue last()
+ {
+ ASSERT(m_size);
+ return m_buffer[m_size - 1].jsValue();
+ }
+
iterator begin() { return m_buffer; }
iterator end() { return m_buffer + m_size; }
const_iterator begin() const { return m_buffer; }
const_iterator end() const { return m_buffer + m_size; }
- static void markLists(ListSet&);
+ static void markLists(MarkStack&, ListSet&);
private:
void slowAppend(JSValue);
Register* m_buffer;
size_t m_size;
+ bool m_isUsingInlineBuffer;
VectorType m_vector;
ListSet* m_markSet;