Commit f32186ef authored by oliver@apple.com's avatar oliver@apple.com

Clean up ArgList to be a trivial type

Reviewed by Gavin Barraclough

Separate out old ArgList logic to handle buffering and marking arguments
into a distinct MarkedArgumentBuffer type.  ArgList becomes a trivial
struct of a pointer and length.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@43037 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent eb7f9305
......@@ -122,7 +122,7 @@ JSObjectRef JSObjectMakeFunction(JSContextRef ctx, JSStringRef name, unsigned pa
Identifier nameID = name ? name->identifier(&exec->globalData()) : Identifier(exec, "anonymous");
ArgList args;
MarkedArgumentBuffer args;
for (unsigned i = 0; i < parameterCount; i++)
args.append(jsString(exec, parameterNames[i]->ustring()));
args.append(jsString(exec, body->ustring()));
......@@ -145,7 +145,7 @@ JSObjectRef JSObjectMakeArray(JSContextRef ctx, size_t argumentCount, const JSVa
JSObject* result;
if (argumentCount) {
ArgList argList;
MarkedArgumentBuffer argList;
for (size_t i = 0; i < argumentCount; ++i)
argList.append(toJS(arguments[i]));
......@@ -169,7 +169,7 @@ JSObjectRef JSObjectMakeDate(JSContextRef ctx, size_t argumentCount, const JSVal
exec->globalData().heap.registerThread();
JSLock lock(exec);
ArgList argList;
MarkedArgumentBuffer argList;
for (size_t i = 0; i < argumentCount; ++i)
argList.append(toJS(arguments[i]));
......@@ -190,7 +190,7 @@ JSObjectRef JSObjectMakeError(JSContextRef ctx, size_t argumentCount, const JSVa
exec->globalData().heap.registerThread();
JSLock lock(exec);
ArgList argList;
MarkedArgumentBuffer argList;
for (size_t i = 0; i < argumentCount; ++i)
argList.append(toJS(arguments[i]));
......@@ -211,7 +211,7 @@ JSObjectRef JSObjectMakeRegExp(JSContextRef ctx, size_t argumentCount, const JSV
exec->globalData().heap.registerThread();
JSLock lock(exec);
ArgList argList;
MarkedArgumentBuffer argList;
for (size_t i = 0; i < argumentCount; ++i)
argList.append(toJS(arguments[i]));
......@@ -389,7 +389,7 @@ JSValueRef JSObjectCallAsFunction(JSContextRef ctx, JSObjectRef object, JSObject
if (!jsThisObject)
jsThisObject = exec->globalThisValue();
ArgList argList;
MarkedArgumentBuffer argList;
for (size_t i = 0; i < argumentCount; i++)
argList.append(toJS(arguments[i]));
......@@ -428,7 +428,7 @@ JSObjectRef JSObjectCallAsConstructor(JSContextRef ctx, JSObjectRef object, size
if (constructType == ConstructTypeNone)
return 0;
ArgList argList;
MarkedArgumentBuffer argList;
for (size_t i = 0; i < argumentCount; i++)
argList.append(toJS(arguments[i]));
JSObjectRef result = toRef(construct(exec, jsObject, constructType, constructData, argList));
......
2009-04-29 Oliver Hunt <oliver@apple.com>
Reviewed by Gavin Barraclough.
Clean up ArgList to be a trivial type
Separate out old ArgList logic to handle buffering and marking arguments
into a distinct MarkedArgumentBuffer type. ArgList becomes a trivial
struct of a pointer and length.
* API/JSObjectRef.cpp:
(JSObjectMakeFunction):
(JSObjectMakeArray):
(JSObjectMakeDate):
(JSObjectMakeError):
(JSObjectMakeRegExp):
(JSObjectCallAsFunction):
(JSObjectCallAsConstructor):
* JavaScriptCore.exp:
* interpreter/CallFrame.h:
(JSC::ExecState::emptyList):
* runtime/ArgList.cpp:
(JSC::ArgList::getSlice):
(JSC::MarkedArgumentBuffer::markLists):
(JSC::MarkedArgumentBuffer::slowAppend):
* runtime/ArgList.h:
(JSC::MarkedArgumentBuffer::MarkedArgumentBuffer):
(JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
(JSC::ArgList::ArgList):
(JSC::ArgList::at):
(JSC::ArgList::isEmpty):
(JSC::ArgList::size):
(JSC::ArgList::begin):
(JSC::ArgList::end):
* runtime/Arguments.cpp:
(JSC::Arguments::fillArgList):
* runtime/Arguments.h:
* runtime/ArrayPrototype.cpp:
(JSC::arrayProtoFuncConcat):
(JSC::arrayProtoFuncPush):
(JSC::arrayProtoFuncSort):
(JSC::arrayProtoFuncFilter):
(JSC::arrayProtoFuncMap):
(JSC::arrayProtoFuncEvery):
(JSC::arrayProtoFuncForEach):
(JSC::arrayProtoFuncSome):
(JSC::arrayProtoFuncReduce):
(JSC::arrayProtoFuncReduceRight):
* runtime/Collector.cpp:
(JSC::Heap::collect):
* runtime/Collector.h:
(JSC::Heap::markListSet):
* runtime/CommonIdentifiers.h:
* runtime/Error.cpp:
(JSC::Error::create):
* runtime/FunctionPrototype.cpp:
(JSC::functionProtoFuncApply):
* runtime/JSArray.cpp:
(JSC::JSArray::JSArray):
(JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
(JSC::JSArray::fillArgList):
(JSC::constructArray):
* runtime/JSArray.h:
* runtime/JSGlobalData.cpp:
(JSC::JSGlobalData::JSGlobalData):
* runtime/JSGlobalData.h:
* runtime/JSObject.cpp:
(JSC::JSObject::put):
* runtime/StringConstructor.cpp:
(JSC::stringFromCharCodeSlowCase):
* runtime/StringPrototype.cpp:
(JSC::stringProtoFuncReplace):
(JSC::stringProtoFuncConcat):
(JSC::stringProtoFuncMatch):
2009-04-29 Laszlo Gombos <laszlo.1.gombos@nokia.com>
Reviewed by Sam Weinig.
......@@ -161,6 +161,7 @@ __ZN3JSC18DebuggerActivationC1EPNS_8JSObjectE
__ZN3JSC19constructEmptyArrayEPNS_9ExecStateE
__ZN3JSC19initializeThreadingEv
__ZN3JSC20constructEmptyObjectEPNS_9ExecStateE
__ZN3JSC20MarkedArgumentBuffer10slowAppendENS_10JSValuePtrE
__ZN3JSC23objectProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_10JSValuePtrERKNS_7ArgListE
__ZN3JSC23setUpStaticFunctionSlotEPNS_9ExecStateEPKNS_9HashEntryEPNS_8JSObjectERKNS_10IdentifierERNS_12PropertySlotE
__ZN3JSC25evaluateInGlobalCallFrameERKNS_7UStringERNS_10JSValuePtrEPNS_14JSGlobalObjectE
......@@ -203,7 +204,6 @@ __ZN3JSC6JSLock6unlockEb
__ZN3JSC6JSLock9lockCountEv
__ZN3JSC6JSLockC1EPNS_9ExecStateE
__ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE
__ZN3JSC7ArgList10slowAppendENS_10JSValuePtrE
__ZN3JSC7CStringD1Ev
__ZN3JSC7CStringaSERKS0_
__ZN3JSC7JSArray4infoE
......
......@@ -80,7 +80,7 @@ namespace JSC {
bool hadException() const { return globalData().exception; }
const CommonIdentifiers& propertyNames() const { return *globalData().propertyNames; }
const ArgList& emptyList() const { return *globalData().emptyList; }
const MarkedArgumentBuffer& emptyList() const { return *globalData().emptyList; }
Interpreter* interpreter() { return globalData().interpreter; }
Heap* heap() { return &globalData().heap; }
......
......@@ -30,19 +30,18 @@ namespace JSC {
void ArgList::getSlice(int startIndex, ArgList& result) const
{
ASSERT(!result.m_isReadOnly);
const_iterator start = min(begin() + startIndex, end());
result.m_vector.appendRange(start, end());
result.m_size = result.m_vector.size();
result.m_buffer = result.m_vector.data();
if (startIndex <= 0 || static_cast<unsigned>(startIndex) >= m_argCount) {
result = ArgList(m_args, 0);
return;
}
result = ArgList(m_args + startIndex, m_argCount - startIndex);
}
void ArgList::markLists(ListSet& markSet)
void MarkedArgumentBuffer::markLists(ListSet& markSet)
{
ListSet::iterator end = markSet.end();
for (ListSet::iterator it = markSet.begin(); it != end; ++it) {
ArgList* list = *it;
MarkedArgumentBuffer* list = *it;
iterator end2 = list->end();
for (iterator it2 = list->begin(); it2 != end2; ++it2)
......@@ -51,7 +50,7 @@ void ArgList::markLists(ListSet& markSet)
}
}
void ArgList::slowAppend(JSValuePtr v)
void MarkedArgumentBuffer::slowAppend(JSValuePtr v)
{
// As long as our size stays within our Vector's inline
// capacity, all our values are allocated on the stack, and
......
......@@ -31,11 +31,11 @@
namespace JSC {
class ArgList : Noncopyable {
class MarkedArgumentBuffer : Noncopyable {
private:
static const unsigned inlineCapacity = 8;
typedef Vector<Register, inlineCapacity> VectorType;
typedef HashSet<ArgList*> ListSet;
typedef HashSet<MarkedArgumentBuffer*> ListSet;
public:
typedef VectorType::iterator iterator;
......@@ -43,7 +43,7 @@ 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.
ArgList()
MarkedArgumentBuffer()
: m_markSet(0)
#ifndef NDEBUG
, m_isReadOnly(false)
......@@ -54,7 +54,7 @@ namespace JSC {
}
// Constructor for a read-only list whose data has already been allocated elsewhere.
ArgList(Register* buffer, size_t size)
MarkedArgumentBuffer(Register* buffer, size_t size)
: m_buffer(buffer)
, m_size(size)
, m_markSet(0)
......@@ -76,7 +76,7 @@ namespace JSC {
#endif
}
~ArgList()
~MarkedArgumentBuffer()
{
if (m_markSet)
m_markSet->remove(this);
......@@ -114,8 +114,6 @@ namespace JSC {
}
}
void getSlice(int startIndex, ArgList& result) const;
iterator begin() { return m_buffer; }
iterator end() { return m_buffer + m_size; }
......@@ -156,6 +154,59 @@ namespace JSC {
void operator delete(void*, size_t);
};
class ArgList {
public:
typedef JSValuePtr* iterator;
typedef const JSValuePtr* const_iterator;
ArgList()
: m_args(0)
, m_argCount(0)
{
}
ArgList(JSValuePtr* args, unsigned argCount)
: m_args(args)
, m_argCount(argCount)
{
}
ArgList(Register* args, int argCount)
: m_args(reinterpret_cast<JSValuePtr*>(args))
, m_argCount(argCount)
{
ASSERT(argCount >= 0);
}
ArgList(const MarkedArgumentBuffer& args)
: m_args(reinterpret_cast<JSValuePtr*>(const_cast<Register*>(args.begin())))
, m_argCount(args.size())
{
}
JSValuePtr at(size_t idx) const
{
if (idx < m_argCount)
return m_args[idx];
return jsUndefined();
}
bool isEmpty() const { return !m_argCount; }
size_t size() const { return m_argCount; }
iterator begin() { return m_args; }
iterator end() { return m_args + m_argCount; }
const_iterator begin() const { return m_args; }
const_iterator end() const { return m_args + m_argCount; }
void getSlice(int startIndex, ArgList& result) const;
private:
JSValuePtr* m_args;
size_t m_argCount;
};
} // namespace JSC
#endif // ArgList_h
......@@ -104,7 +104,7 @@ void Arguments::copyToRegisters(ExecState* exec, Register* buffer, uint32_t maxS
}
}
void Arguments::fillArgList(ExecState* exec, ArgList& args)
void Arguments::fillArgList(ExecState* exec, MarkedArgumentBuffer& args)
{
if (UNLIKELY(d->overrodeLength)) {
unsigned length = get(exec, exec->propertyNames().length).toUInt32(exec);
......
......@@ -63,7 +63,7 @@ namespace JSC {
virtual void mark();
void fillArgList(ExecState*, ArgList&);
void fillArgList(ExecState*, MarkedArgumentBuffer&);
uint32_t numProvidedArguments(ExecState* exec) const
{
......
......@@ -305,7 +305,7 @@ JSValuePtr arrayProtoFuncConcat(ExecState* exec, JSObject*, JSValuePtr thisValue
}
if (it == end)
break;
curArg = (*it).jsValue();
curArg = (*it);
++it;
}
arr->setLength(n);
......@@ -335,7 +335,7 @@ JSValuePtr arrayProtoFuncPush(ExecState* exec, JSObject*, JSValuePtr thisValue,
{
if (isJSArray(&exec->globalData(), thisValue) && args.size() == 1) {
JSArray* array = asArray(thisValue);
array->push(exec, args.begin()->jsValue());
array->push(exec, *args.begin());
return jsNumber(exec, array->length());
}
......@@ -477,7 +477,7 @@ JSValuePtr arrayProtoFuncSort(ExecState* exec, JSObject*, JSValuePtr thisValue,
else if (minObj.isUndefined())
compareResult = -1;
else if (callType != CallTypeNone) {
ArgList l;
MarkedArgumentBuffer l;
l.append(jObj);
l.append(minObj);
compareResult = call(exec, function, callType, callData, exec->globalThisValue(), l).toNumber(exec);
......@@ -619,7 +619,7 @@ JSValuePtr arrayProtoFuncFilter(ExecState* exec, JSObject*, JSValuePtr thisValue
JSValuePtr v = slot.getValue(exec, k);
ArgList eachArguments;
MarkedArgumentBuffer eachArguments;
eachArguments.append(v);
eachArguments.append(jsNumber(exec, k));
......@@ -672,7 +672,7 @@ JSValuePtr arrayProtoFuncMap(ExecState* exec, JSObject*, JSValuePtr thisValue, c
JSValuePtr v = slot.getValue(exec, k);
ArgList eachArguments;
MarkedArgumentBuffer eachArguments;
eachArguments.append(v);
eachArguments.append(jsNumber(exec, k));
......@@ -729,7 +729,7 @@ JSValuePtr arrayProtoFuncEvery(ExecState* exec, JSObject*, JSValuePtr thisValue,
if (!thisObj->getPropertySlot(exec, k, slot))
continue;
ArgList eachArguments;
MarkedArgumentBuffer eachArguments;
eachArguments.append(slot.getValue(exec, k));
eachArguments.append(jsNumber(exec, k));
......@@ -781,7 +781,7 @@ JSValuePtr arrayProtoFuncForEach(ExecState* exec, JSObject*, JSValuePtr thisValu
if (!thisObj->getPropertySlot(exec, k, slot))
continue;
ArgList eachArguments;
MarkedArgumentBuffer eachArguments;
eachArguments.append(slot.getValue(exec, k));
eachArguments.append(jsNumber(exec, k));
eachArguments.append(thisObj);
......@@ -829,7 +829,7 @@ JSValuePtr arrayProtoFuncSome(ExecState* exec, JSObject*, JSValuePtr thisValue,
if (!thisObj->getPropertySlot(exec, k, slot))
continue;
ArgList eachArguments;
MarkedArgumentBuffer eachArguments;
eachArguments.append(slot.getValue(exec, k));
eachArguments.append(jsNumber(exec, k));
eachArguments.append(thisObj);
......@@ -903,7 +903,7 @@ JSValuePtr arrayProtoFuncReduce(ExecState* exec, JSObject*, JSValuePtr thisValue
if (!prop)
continue;
ArgList eachArguments;
MarkedArgumentBuffer eachArguments;
eachArguments.append(rv);
eachArguments.append(prop);
eachArguments.append(jsNumber(exec, i));
......@@ -972,7 +972,7 @@ JSValuePtr arrayProtoFuncReduceRight(ExecState* exec, JSObject*, JSValuePtr this
if (!prop)
continue;
ArgList eachArguments;
MarkedArgumentBuffer eachArguments;
eachArguments.append(rv);
eachArguments.append(prop);
eachArguments.append(jsNumber(exec, idx));
......
......@@ -986,7 +986,7 @@ bool Heap::collect()
markStackObjectsConservatively();
markProtectedObjects();
if (m_markListSet && m_markListSet->size())
ArgList::markLists(*m_markListSet);
MarkedArgumentBuffer::markLists(*m_markListSet);
if (m_globalData->exception && !m_globalData->exception.marked())
m_globalData->exception.mark();
m_globalData->interpreter->registerFile().markCallFrames(this);
......
......@@ -39,7 +39,7 @@
namespace JSC {
class ArgList;
class MarkedArgumentBuffer;
class CollectorBlock;
class JSCell;
class JSGlobalData;
......@@ -113,7 +113,7 @@ namespace JSC {
void markConservatively(void* start, void* end);
HashSet<ArgList*>& markListSet() { if (!m_markListSet) m_markListSet = new HashSet<ArgList*>; return *m_markListSet; }
HashSet<MarkedArgumentBuffer*>& markListSet() { if (!m_markListSet) m_markListSet = new HashSet<MarkedArgumentBuffer*>; return *m_markListSet; }
JSGlobalData* globalData() const { return m_globalData; }
static bool isNumber(JSCell*);
......@@ -147,7 +147,7 @@ namespace JSC {
OwnPtr<Mutex> m_protectedValuesMutex; // Only non-null if the client explicitly requested it via setGCPrtotectNeedsLocking().
ProtectCountSet m_protectedValues;
HashSet<ArgList*>* m_markListSet;
HashSet<MarkedArgumentBuffer*>* m_markListSet;
#if ENABLE(JSC_MULTIPLE_THREADS)
void makeUsableFromMultipleThreads();
......
......@@ -24,7 +24,7 @@
#include "Identifier.h"
#include <wtf/Noncopyable.h>
// ArgList of property names, passed to a macro so we can do set them up various
// MarkedArgumentBuffer of property names, passed to a macro so we can do set them up various
// ways without repeating the list.
#define JSC_COMMON_IDENTIFIERS_EACH_PROPERTY_NAME(macro) \
macro(__defineGetter__) \
......
......@@ -72,7 +72,7 @@ JSObject* Error::create(ExecState* exec, ErrorType type, const UString& message,
break;
}
ArgList args;
MarkedArgumentBuffer args;
if (message.isEmpty())
args.append(jsString(exec, name));
else
......
......@@ -108,7 +108,7 @@ JSValuePtr functionProtoFuncApply(ExecState* exec, JSObject*, JSValuePtr thisVal
JSValuePtr array = args.at(1);
ArgList applyArgs;
MarkedArgumentBuffer applyArgs;
if (!array.isUndefinedOrNull()) {
if (!array.isObject())
return throwError(exec, TypeError);
......
......@@ -173,7 +173,7 @@ JSArray::JSArray(PassRefPtr<Structure> structure, const ArgList& list)
size_t i = 0;
ArgList::const_iterator end = list.end();
for (ArgList::const_iterator it = list.begin(); it != end; ++it, ++i)
storage->m_vector[i] = (*it).jsValue();
storage->m_vector[i] = *it;
m_storage = storage;
......@@ -790,7 +790,7 @@ struct AVLTreeAbstractorForArrayCompare {
m_cachedCall->setArgument(1, vb);
compareResult = m_cachedCall->call().toNumber(m_cachedCall->newCallFrame());
} else {
ArgList arguments;
MarkedArgumentBuffer arguments;
arguments.append(va);
arguments.append(vb);
compareResult = call(m_exec, m_compareFunction, m_compareCallType, *m_compareCallData, m_globalThisValue, arguments).toNumber(m_exec);
......@@ -914,7 +914,7 @@ void JSArray::sort(ExecState* exec, JSValuePtr compareFunction, CallType callTyp
checkConsistency(SortConsistencyCheck);
}
void JSArray::fillArgList(ExecState* exec, ArgList& args)
void JSArray::fillArgList(ExecState* exec, MarkedArgumentBuffer& args)
{
unsigned fastAccessLength = min(m_storage->m_length, m_fastAccessCutoff);
unsigned i = 0;
......@@ -1060,7 +1060,7 @@ JSArray* constructEmptyArray(ExecState* exec, unsigned initialLength)
JSArray* constructArray(ExecState* exec, JSValuePtr singleItemValue)
{
ArgList values;
MarkedArgumentBuffer values;
values.append(singleItemValue);
return new (exec) JSArray(exec->lexicalGlobalObject()->arrayStructure(), values);
}
......
......@@ -75,7 +75,7 @@ namespace JSC {
return m_storage->m_vector[i] = v;
}
void fillArgList(ExecState*, ArgList&);
void fillArgList(ExecState*, MarkedArgumentBuffer&);
void copyToRegisters(ExecState*, Register*, uint32_t);
static PassRefPtr<Structure> createStructure(JSValuePtr prototype)
......
......@@ -124,7 +124,7 @@ JSGlobalData::JSGlobalData(bool isShared, const VPtrSet& vptrSet)
, jsFunctionVPtr(vptrSet.jsFunctionVPtr)
, identifierTable(createIdentifierTable())
, propertyNames(new CommonIdentifiers(this))
, emptyList(new ArgList)
, emptyList(new MarkedArgumentBuffer)
, lexer(new Lexer(this))
, parser(new Parser)
, interpreter(new Interpreter)
......
......@@ -107,7 +107,7 @@ namespace JSC {
IdentifierTable* identifierTable;
CommonIdentifiers* propertyNames;
const ArgList* emptyList; // Lists are supposed to be allocated on the stack to have their elements properly marked, which is not the case here - but this list has nothing to mark.
const MarkedArgumentBuffer* emptyList; // Lists are supposed to be allocated on the stack to have their elements properly marked, which is not the case here - but this list has nothing to mark.
SmallStrings smallStrings;
#if ENABLE(ASSEMBLER)
......
......@@ -147,7 +147,7 @@ void JSObject::put(ExecState* exec, const Identifier& propertyName, JSValuePtr v
CallData callData;
CallType callType = setterFunc->getCallData(callData);
ArgList args;
MarkedArgumentBuffer args;
args.append(value);
call(exec, setterFunc, callType, callData, this, args);
return;
......
......@@ -33,7 +33,7 @@ static NEVER_INLINE JSValuePtr stringFromCharCodeSlowCase(ExecState* exec, const
UChar* p = buf;
ArgList::const_iterator end = args.end();
for (ArgList::const_iterator it = args.begin(); it != end; ++it)
*p++ = static_cast<UChar>((*it).jsValue().toUInt32(exec));
*p++ = static_cast<UChar>((*it).toUInt32(exec));
return jsString(exec, UString(buf, p - buf, false));
}
......
......@@ -290,7 +290,7 @@ JSValuePtr stringProtoFuncReplace(ExecState* exec, JSObject*, JSValuePtr thisVal
if (callType != CallTypeNone) {
int completeMatchStart = ovector[0];
ArgList args;
MarkedArgumentBuffer args;
for (unsigned i = 0; i < reg->numSubpatterns() + 1; ++i) {
int matchStart = ovector[i * 2];
......@@ -342,7 +342,7 @@ JSValuePtr stringProtoFuncReplace(ExecState* exec, JSObject*, JSValuePtr thisVal
return sourceVal;
if (callType != CallTypeNone) {
ArgList args;
MarkedArgumentBuffer args;
args.append(jsSubstring(exec, source, matchPos, matchLen));
args.append(jsNumber(exec, matchPos));
args.append(sourceVal);
......@@ -409,7 +409,7 @@ JSValuePtr stringProtoFuncConcat(ExecState* exec, JSObject*, JSValuePtr thisValu
ArgList::const_iterator end = args.end();
for (ArgList::const_iterator it = args.begin(); it != end; ++it)
s += (*it).jsValue().toString(exec);
s += (*it).toString(exec);
return jsString(exec, s);
}
......@@ -486,7 +486,7 @@ JSValuePtr stringProtoFuncMatch(ExecState* exec, JSObject*, JSValuePtr thisValue
}
// return array of matches
ArgList list;
MarkedArgumentBuffer list;
int lastIndex = 0;
while (pos >= 0) {
list.append(jsSubstring(exec, u, pos, matchLength));
......
2009-04-29 Oliver Hunt <oliver@apple.com>
Reviewed by Gavin Barraclough.
Clean up ArgList to be a trivial type
Start using MarkedArgumentBuffer to create argument lists for function calls
* JSValueWrapper.cpp:
(JSValueWrapper::JSObjectCallFunction):
2009-04-28 Geoffrey Garen <ggaren@apple.com>
Rubber stamped by Beth Dakin.
......
......@@ -152,7 +152,7 @@ JSObjectRef JSValueWrapper::JSObjectCallFunction(void *data, JSObjectRef thisObj
JSObject* ksjThisObj = value.toObject(exec);
JSObject* objValue = ptr->GetValue().toObject(exec);
ArgList listArgs;
MarkedArgumentBuffer listArgs;
CFIndex argCount = args ? CFArrayGetCount(args) : 0;
for (CFIndex i = 0; i < argCount; i++)
{
......