diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2009-06-15 09:06:43 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-06-15 09:31:31 (GMT) |
commit | c411f16870f112c3407c28c22b617f613a82cff4 (patch) | |
tree | 29a1bcd590c8b31af2aab445bfe8a978dc5bf582 /src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.cpp | |
parent | 3d77b56b32a0c53ec0bbfaa07236fedb900ff336 (diff) | |
download | Qt-c411f16870f112c3407c28c22b617f613a82cff4.zip Qt-c411f16870f112c3407c28c22b617f613a82cff4.tar.gz Qt-c411f16870f112c3407c28c22b617f613a82cff4.tar.bz2 |
Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit-4.6-snapshot-15062009 ( 65232bf00dc494ebfd978f998c88f58d18ecce1e )
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.cpp')
-rw-r--r-- | src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.cpp | 68 |
1 files changed, 55 insertions, 13 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.cpp index b0429a9..f867fe8 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.cpp @@ -69,8 +69,50 @@ void Arguments::mark() d->activation->mark(); } -void Arguments::fillArgList(ExecState* exec, ArgList& args) +void Arguments::copyToRegisters(ExecState* exec, Register* buffer, uint32_t maxSize) { + if (UNLIKELY(d->overrodeLength)) { + unsigned length = min(get(exec, exec->propertyNames().length).toUInt32(exec), maxSize); + for (unsigned i = 0; i < length; i++) + buffer[i] = get(exec, i); + return; + } + + if (LIKELY(!d->deletedArguments)) { + unsigned parametersLength = min(min(d->numParameters, d->numArguments), maxSize); + unsigned i = 0; + for (; i < parametersLength; ++i) + buffer[i] = d->registers[d->firstParameterIndex + i].jsValue(); + for (; i < d->numArguments; ++i) + buffer[i] = d->extraArguments[i - d->numParameters].jsValue(); + return; + } + + unsigned parametersLength = min(min(d->numParameters, d->numArguments), maxSize); + unsigned i = 0; + for (; i < parametersLength; ++i) { + if (!d->deletedArguments[i]) + buffer[i] = d->registers[d->firstParameterIndex + i].jsValue(); + else + buffer[i] = get(exec, i); + } + for (; i < d->numArguments; ++i) { + if (!d->deletedArguments[i]) + buffer[i] = d->extraArguments[i - d->numParameters].jsValue(); + else + buffer[i] = get(exec, i); + } +} + +void Arguments::fillArgList(ExecState* exec, MarkedArgumentBuffer& args) +{ + if (UNLIKELY(d->overrodeLength)) { + unsigned length = get(exec, exec->propertyNames().length).toUInt32(exec); + for (unsigned i = 0; i < length; i++) + args.append(get(exec, i)); + return; + } + if (LIKELY(!d->deletedArguments)) { if (LIKELY(!d->numParameters)) { args.initialize(d->extraArguments, d->numArguments); @@ -85,9 +127,9 @@ void Arguments::fillArgList(ExecState* exec, ArgList& args) unsigned parametersLength = min(d->numParameters, d->numArguments); unsigned i = 0; for (; i < parametersLength; ++i) - args.append(d->registers[d->firstParameterIndex + i].jsValue(exec)); + args.append(d->registers[d->firstParameterIndex + i].jsValue()); for (; i < d->numArguments; ++i) - args.append(d->extraArguments[i - d->numParameters].jsValue(exec)); + args.append(d->extraArguments[i - d->numParameters].jsValue()); return; } @@ -95,13 +137,13 @@ void Arguments::fillArgList(ExecState* exec, ArgList& args) unsigned i = 0; for (; i < parametersLength; ++i) { if (!d->deletedArguments[i]) - args.append(d->registers[d->firstParameterIndex + i].jsValue(exec)); + args.append(d->registers[d->firstParameterIndex + i].jsValue()); else args.append(get(exec, i)); } for (; i < d->numArguments; ++i) { if (!d->deletedArguments[i]) - args.append(d->extraArguments[i - d->numParameters].jsValue(exec)); + args.append(d->extraArguments[i - d->numParameters].jsValue()); else args.append(get(exec, i)); } @@ -113,7 +155,7 @@ bool Arguments::getOwnPropertySlot(ExecState* exec, unsigned i, PropertySlot& sl if (i < d->numParameters) { slot.setRegisterSlot(&d->registers[d->firstParameterIndex + i]); } else - slot.setValue(d->extraArguments[i - d->numParameters].jsValue(exec)); + slot.setValue(d->extraArguments[i - d->numParameters].jsValue()); return true; } @@ -128,7 +170,7 @@ bool Arguments::getOwnPropertySlot(ExecState* exec, const Identifier& propertyNa if (i < d->numParameters) { slot.setRegisterSlot(&d->registers[d->firstParameterIndex + i]); } else - slot.setValue(d->extraArguments[i - d->numParameters].jsValue(exec)); + slot.setValue(d->extraArguments[i - d->numParameters].jsValue()); return true; } @@ -145,28 +187,28 @@ bool Arguments::getOwnPropertySlot(ExecState* exec, const Identifier& propertyNa return JSObject::getOwnPropertySlot(exec, propertyName, slot); } -void Arguments::put(ExecState* exec, unsigned i, JSValuePtr value, PutPropertySlot& slot) +void Arguments::put(ExecState* exec, unsigned i, JSValue value, PutPropertySlot& slot) { if (i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) { if (i < d->numParameters) - d->registers[d->firstParameterIndex + i] = JSValuePtr(value); + d->registers[d->firstParameterIndex + i] = JSValue(value); else - d->extraArguments[i - d->numParameters] = JSValuePtr(value); + d->extraArguments[i - d->numParameters] = JSValue(value); return; } JSObject::put(exec, Identifier(exec, UString::from(i)), value, slot); } -void Arguments::put(ExecState* exec, const Identifier& propertyName, JSValuePtr value, PutPropertySlot& slot) +void Arguments::put(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot) { bool isArrayIndex; unsigned i = propertyName.toArrayIndex(&isArrayIndex); if (isArrayIndex && i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) { if (i < d->numParameters) - d->registers[d->firstParameterIndex + i] = JSValuePtr(value); + d->registers[d->firstParameterIndex + i] = JSValue(value); else - d->extraArguments[i - d->numParameters] = JSValuePtr(value); + d->extraArguments[i - d->numParameters] = JSValue(value); return; } |